メニュー
Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

EC2 インスタンスタイプのプロセッサのステート制御

C ステートはアイドル時のコアのスリープレベルを制御します。C ステートは、C0 (コアがアクティブで、命令を実行している最も浅い状態) から始まる番号が付けられ、C6 (コアの電源がオフになっている最も深いアイドル状態) まで移行します。P ステートはコアに希望するパフォーマンス (CPU 周波数) を制御します。P ステートは、P0 (コアが Intel Turbo Boost Technology を使用して可能であれば周波数を上げることができる最高パフォーマンスの設定) から始まる番号が付けられ、P1 (最大限のベースライン周波数をリクエストする P ステート) から P15 (最小限の周波数) まで移行します。

次のインスタンスタイプにより、オペレーティングシステムがプロセッサの C ステートと P ステートを制御できるようになります。

  • 汎用: m4.10xlarge | m4.16xlarge

  • コンピューティングの最適化: c4.8xlarge

  • ストレージの最適化: d2.8xlarge | i3.8xlarge | i3.16xlarge

  • 高速コンピューティング: f1.16xlarge | g3.16xlarge | p2.16xlarge | p3.16xlarge

  • メモリ最適化: r4.8xlarge | r4.16xlarge | x1.16xlarge | x1.32xlarge | x1e.32xlarge

次のインスタンスタイプにより、オペレーティングシステムがプロセッサの C ステートを制御できるようになります。

  • コンピューティングの最適化: c5.9xlarge | c5.18xlarge

プロセッサのパフォーマンスの安定性を向上させたり、レイテンシーを減らしたり、インスタンスを特定のワークロード用に調整するために、C ステートまたは P ステートの設定を変更したいと思う場合があるかもしれません。デフォルトの C ステートおよび P ステートの設定は、ほとんどの作業負荷に対して最適なパフォーマンスを提供します。ただし、アプリケーションにおいて、より高いシングルコアまたはデュアルコアの周波数でレイテンシーを軽減したい場合、またはバースト的な Turbo Boost 周波数よりも低い周波数でより安定したパフォーマンスを維持することを優先する場合、これらのインスタンスで利用可能な C ステートまたは P ステートを試みることを考慮してください。

以下のセクションでは、プロセッサのさまざまなステート設定と、設定の効果をモニタリングする方法について説明します。これらの手順は、Amazon Linux を対象としており、これに適用されますが、バージョン 3.9 以降の Linux カーネルを持つ他の Linux ディストリビューションでも使用できる可能性があります。他の Linux ディストリビューションやプロセッサのステート制御については、システム固有ドキュメントを参照してください。

注記

このページの例では、turbostat ユーティリティ (Amazon Linux でデフォルトで使用できる) を使用してプロセッサ周波数と C ステート情報を表示し、stress コマンド (sudo yum install -y stress を実行することによってインストールできる) を使用してワークロードをシミュレートします。

最大 Turbo Boost 周波数による最高パフォーマンス

これは、Amazon Linux AMI のデフォルトのプロセッサのステート制御設定であり、ほとんどのワークロードにお勧めします。この設定では、変動性を抑え、最高パフォーマンスを実現します。非アクティブなコアは深いスリープ状態になることができるため、シングルまたはデュアルコアプロセスが Turbo Boost の潜在能力を最大限に引き出すために必要な発熱量の余裕を実現できます。

次の例は、2 個のコアでアクティブに処理を実行する c4.8xlarge インスタンスが Turbo Boost の最大周波数に到達した状況を示しています。

Copy
[ec2-user ~]$ sudo turbostat stress -c 2 -t 10 stress: info: [30680] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd stress: info: [30680] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 5.54 3.44 2.90 0 9.18 0.00 85.28 0.00 0.00 0.00 0.00 0.00 94.04 32.70 54.18 0.00 0 0 0 0.12 3.26 2.90 0 3.61 0.00 96.27 0.00 0.00 0.00 0.00 0.00 48.12 18.88 26.02 0.00 0 0 18 0.12 3.26 2.90 0 3.61 0 1 1 0.12 3.26 2.90 0 4.11 0.00 95.77 0.00 0 1 19 0.13 3.27 2.90 0 4.11 0 2 2 0.13 3.28 2.90 0 4.45 0.00 95.42 0.00 0 2 20 0.11 3.27 2.90 0 4.47 0 3 3 0.05 3.42 2.90 0 99.91 0.00 0.05 0.00 0 3 21 97.84 3.45 2.90 0 2.11 ... 1 1 10 0.06 3.33 2.90 0 99.88 0.01 0.06 0.00 1 1 28 97.61 3.44 2.90 0 2.32 ... 10.002556 sec

この例では、vCPU 21 と 28 が最大 Turbo Boost 周波数で実行され、他のコアは C6 スリープ状態になることで電力を節約し、実行中のコアに電力と発熱の余裕を持たせています。vCPU 3 と 10 (それぞれ vCPU 21 および 28 とプロセッサコアを共有する) は C1 ステートであり、命令を待っています。

以下の例では、18 個のコアはすべてアクティブに処理を実行しているため、Turbo Boost の最大周波数のための余裕はありませんが、すべてのコアが「all core Turbo Boost」の速度である 3.2 GHz で実行されています。

Copy
[ec2-user ~]$ sudo turbostat stress -c 36 -t 10 stress: info: [30685] dispatching hogs: 36 cpu, 0 io, 0 vm, 0 hdd stress: info: [30685] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 99.27 3.20 2.90 0 0.26 0.00 0.47 0.00 0.00 0.00 0.00 0.00 228.59 31.33 199.26 0.00 0 0 0 99.08 3.20 2.90 0 0.27 0.01 0.64 0.00 0.00 0.00 0.00 0.00 114.69 18.55 99.32 0.00 0 0 18 98.74 3.20 2.90 0 0.62 0 1 1 99.14 3.20 2.90 0 0.09 0.00 0.76 0.00 0 1 19 98.75 3.20 2.90 0 0.49 0 2 2 99.07 3.20 2.90 0 0.10 0.02 0.81 0.00 0 2 20 98.73 3.20 2.90 0 0.44 0 3 3 99.02 3.20 2.90 0 0.24 0.00 0.74 0.00 0 3 21 99.13 3.20 2.90 0 0.13 0 4 4 99.26 3.20 2.90 0 0.09 0.00 0.65 0.00 0 4 22 98.68 3.20 2.90 0 0.67 0 5 5 99.19 3.20 2.90 0 0.08 0.00 0.73 0.00 0 5 23 98.58 3.20 2.90 0 0.69 0 6 6 99.01 3.20 2.90 0 0.11 0.00 0.89 0.00 0 6 24 98.72 3.20 2.90 0 0.39 ...

深い C ステートの制限による高パフォーマンスと低レイテンシー

C ステートは非アクティブ時のコアのスリープレベルを制御します。C ステートを制御して、システムのレイテンシーとパフォーマンスを調整することができます。コアをスリープ状態にするには時間がかかります。また、スリープ状態のコアによって、別のコアが高い周波数で動作するための余裕が生まれますが、そのスリープ状態にあるコアが再び稼働し処理を実行するのにも時間がかかります。たとえば、ネットワークパケットの中断を処理するように割り当てられたコアがスリープ状態である場合、その中断の処理に遅延が生じる可能性があります。より深い C ステートを使用しないようにシステムを設定できます。これにより、プロセッサの応答のレイテンシーは減少しますが、他のコアの Turbo Boost 用の余裕も減少します。

深いスリープ状態を無効にする一般的なシナリオとして、Redis データベースアプリケーションがあります。このアプリケーションは、最速のクエリ応答時間を実現するために、データベースをシステムメモリ内に格納します。

Amazon Linux で深いスリープ状態を制限するには

  1. 適切なエディタで /boot/grub/grub.conf ファイルを開きます。

    Copy
    [ec2-user ~]$ sudo vim /boot/grub/grub.conf
  2. 最初のエントリの kernel 行を編集し、intel_idle.max_cstate=1 = オプションを追加して、アイドル状態のコアの最も深い ステートとして C1C を設定します。

    # created by imagebuilder
    default=0
    timeout=1
    hiddenmenu
    
    title Amazon Linux 2014.09 (3.14.26-24.46.amzn1.x86_64)
    root (hd0,0)
    kernel /boot/vmlinuz-3.14.26-24.46.amzn1.x86_64 root=LABEL=/ console=ttyS0 intel_idle.max_cstate=1
    initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img
  3. ファイルを保存し、エディタを終了します。

  4. 新しい kernel オプションを有効にするためにインスタンスを再起動します。

    Copy
    [ec2-user ~]$ sudo reboot

次の例では、2 つのコアが「all core Turbo Boost」コア周波数でアクティブに処理を実行している c4.8xlarge インスタンスを示します。

Copy
[ec2-user ~]$ sudo turbostat stress -c 2 -t 10 stress: info: [5322] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd stress: info: [5322] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 5.56 3.20 2.90 0 94.44 0.00 0.00 0.00 0.00 0.00 0.00 0.00 131.90 31.11 199.47 0.00 0 0 0 0.03 2.08 2.90 0 99.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 67.23 17.11 99.76 0.00 0 0 18 0.01 1.93 2.90 0 99.99 0 1 1 0.02 1.96 2.90 0 99.98 0.00 0.00 0.00 0 1 19 99.70 3.20 2.90 0 0.30 ... 1 1 10 0.02 1.97 2.90 0 99.98 0.00 0.00 0.00 1 1 28 99.67 3.20 2.90 0 0.33 1 2 11 0.04 2.63 2.90 0 99.96 0.00 0.00 0.00 1 2 29 0.02 2.11 2.90 0 99.98 ...

この例では、vCPU 19 および 28 のコアは 3.2 GHz で実行中であり、その他のコアは C1 C ステートで、命令を待機しています。稼働中のコアは Turbo Boost の最大周波数には到達していませんが、非アクティブなコアはより深い C6 C ステートにある場合と比べて、新しいリクエストに迅速に応答します。

変動性が最も低いベースラインパフォーマンス

P ステートによってプロセッサの周波数の変動性を抑制することができます。P ステートはコアに希望するパフォーマンス (CPU 周波数) を制御します。ほとんどのワークロードでは、Turbo Boost をリクエストする、P0 でパフォーマンスが向上します。ただし、Turbo Boost 周波数が有効であるときに発生する可能性があるバースト的なパフォーマンスではなく、安定したパフォーマンスになるようにシステムを調整することもできます。

Intel Advanced Vector Extensions (AVX または AVX2) のワークロードは低い周波数でもパフォーマンスに優れ、AVX 命令はより多くの処理能力を使用できます。Turbo Boost を無効にして、プロセッサをより低い周波数で実行すると、使用される処理能力が抑えられ、より安定した速度が維持されます。インスタンスの設定の最適化や AVX のワークロードの詳細については、http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/performance-xeon-e5-v3-advanced-vector-extensions-paper.pdf を参照してください。

このセクションでは、深いスリープ状態を制限し、(P1 P ステートをリクエストすることにより) Turbo Boost を無効にすることで、これらのタイプのワークロードに対して、低レイテンシーを提供し、プロセッサ速度の変動性を最低限に抑える方法を説明します。

Amazon Linux で深いスリープ状態を制限し、Turbo Burstを無効にするには

  1. 適切なエディタで /boot/grub/grub.conf ファイルを開きます。

    Copy
    [ec2-user ~]$ sudo vim /boot/grub/grub.conf
  2. 最初のエントリの kernel 行を編集し、intel_idle.max_cstate=1 = オプションを追加して、アイドル状態のコアの最も深い ステートとして C1C を設定します。

    # created by imagebuilder
    default=0
    timeout=1
    hiddenmenu
    
    title Amazon Linux 2014.09 (3.14.26-24.46.amzn1.x86_64)
    root (hd0,0)
    kernel /boot/vmlinuz-3.14.26-24.46.amzn1.x86_64 root=LABEL=/ console=ttyS0 intel_idle.max_cstate=1
    initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img
  3. ファイルを保存し、エディタを終了します。

  4. 新しい kernel オプションを有効にするためにインスタンスを再起動します。

    Copy
    [ec2-user ~]$ sudo reboot
  5. P1 P ステートによってプロセッサ速度の変動性を抑える必要がある場合は、次のコマンドを実行して Turbo Boost を無効にします。

    Copy
    [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
  6. ワークロードが終了したら、次のコマンドで Turbo Boost を再度有効にすることができます。

    Copy
    [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"

次の例では、2 つの vCPU が、Turbo Boost を使用せずに、ベースラインコア周波数でアクティブに処理を実行している c4.8xlarge インスタンスを示します。

Copy
[ec2-user ~]$ sudo turbostat stress -c 2 -t 10 stress: info: [5389] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd stress: info: [5389] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 5.59 2.90 2.90 0 94.41 0.00 0.00 0.00 0.00 0.00 0.00 0.00 128.48 33.54 200.00 0.00 0 0 0 0.04 2.90 2.90 0 99.96 0.00 0.00 0.00 0.00 0.00 0.00 0.00 65.33 19.02 100.00 0.00 0 0 18 0.04 2.90 2.90 0 99.96 0 1 1 0.05 2.90 2.90 0 99.95 0.00 0.00 0.00 0 1 19 0.04 2.90 2.90 0 99.96 0 2 2 0.04 2.90 2.90 0 99.96 0.00 0.00 0.00 0 2 20 0.04 2.90 2.90 0 99.96 0 3 3 0.05 2.90 2.90 0 99.95 0.00 0.00 0.00 0 3 21 99.95 2.90 2.90 0 0.05 ... 1 1 28 99.92 2.90 2.90 0 0.08 1 2 11 0.06 2.90 2.90 0 99.94 0.00 0.00 0.00 1 2 29 0.05 2.90 2.90 0 99.95

vCPU 21 および 28 のコアは、ベースラインプロセッサ速度の 2.9 GHz でアクティブに処理を実行し、すべての非アクティブなコアも、C1 C ステートのベースライン速度で実行され、すぐに命令を受け付けることができます。