すべてのプロダクト
Search
ドキュメントセンター

Elastic High Performance Computing:コンピュートノードの HT を無効にしてクラスターのパフォーマンスを向上させる

最終更新日:Jan 13, 2025

Elastic High Performance Computing (E-HPC) クラスターの各コンピュートノードは、Elastic Compute Service (ECS) インスタンスです。デフォルトでは、各 ECS インスタンスでハイパースレッディング (HT) が有効になっています。一部の高性能コンピューティング (HPC) シナリオでは、HT を無効にしてインスタンスのパフォーマンスを向上させることができます。このトピックでは、コンピュートノードの HT を無効にする方法について説明します。

背景情報

CPU は中央処理装置です。 1 つの CPU には複数の物理コアが含まれている場合があります。HT テクノロジーを使用すると、CPU の各物理コアに対して 2 つの仮想処理コアを作成できます。ECS は、HT に基づくマルチスレッディングをサポートしており、2 つのスレッドを単一の物理コアで同時に実行できます。各スレッドは仮想 CPU (vCPU) と見なすことができます。vCPU は、ECS インスタンスの仮想処理コアです。一部の HPC シナリオでは、コンピュートノードで HT を無効にしてパフォーマンスを向上させることができます。

注意事項

インスタンスタイプによって、HT の無効化に関する制限が異なります。

  • HT は、一部のエンタープライズレベル x86 コンピュート最適化 ECS インスタンスでのみ無効にできます。詳細については、「インスタンスタイプの制限」をご参照ください。

  • HT は ECS ベアメタルインスタンスでは直接無効にすることはできませんが、ソフトウェアレベルで無効にすることができます。

  • HT は、Super Computing Cluster (SCC) インスタンスではデフォルトで無効になっています。

エンタープライズレベル x86 コンピュート最適化 ECS インスタンスで HT を無効にする

作成済みのクラスターにコンピュートノードを追加する必要がある場合は、これらのインスタンスで HT を有効にするかどうかを指定できます。

重要

エンタープライズレベル x86 コンピュート最適化 ECS インスタンスでは、作成後に HT を無効にすることはできません。

手動スケールアウト

クラスターを手動でスケールアウトする場合、[追加するインスタンスの数と種類] セクションで HT を有効にするかどうかを指定できます。詳細については、「E-HPC クラスターを手動でスケールアウトする」をご参照ください。

Disable HT when manually scale out.png

自動スケーリング

クラスターの自動スケーリングを構成する場合、[グローバル構成] セクションでインスタンスの HT を有効にするかどうかを構成できます。詳細については、「自動スケーリングを構成する」をご参照ください。

Disable HT when in auto scaling.png

ECS ベアメタルインスタンスで HT を無効にする

ECS ベアメタルインスタンスでは、インスタンスの作成後にソフトウェアレベル(ゲスト OS 内)で HT を無効にすることができます。そのためには、nr_cpus を設定するか、vCPU のステータスを変更します。各物理コアは 2 つの仮想処理コアに対応しています。ゲスト OS 内で HT を無効にするということは、実際には各物理コアの仮想処理コアの 1 つを無効にするということです。このようにして、1 つの物理コアは 1 つの仮想処理コアのみに対応します。

説明

ベアメタルサーバーで HT を物理的に無効にするには、マザーボードの BIOS を管理する必要があります。このプロセスではハードウェアの再起動が必要になり、複雑でリスクを伴います。したがって、このトピックで説明する 2 つの方法を使用することをお勧めします。HT をソフトウェアレベルで管理することで、無効化と同様の効果を得ることができます。

方法

メリット

デメリット

nr_cpu を設定する

lscpucpuid などのコマンドを使用して CPU ステータスを表示すると、実際に使用されている CPU の数が返されます。これは、HT が無効になっていることを意味します。

  • nr_cpus をインスタンスタイプの vCPU 数の半分に設定すると、インスタンスの実行中に vCPU の半分を使用できなくなります。すべての vCPU を復元するには、nr_cpus パラメーターを削除してからインスタンスを再起動する必要があります。

  • nr_cpus をインスタンスタイプの vCPU 数の半分に設定する場合は、カスタムイメージを作成する前にこのパラメーターを削除することをお勧めします。そうしないと、カスタムイメージを使用して他のインスタンスタイプのインスタンスを作成すると、一部の物理コアしか認識されない場合があります。この問題を解決するには、nr_cpus パラメーターをリセットする必要があります。

vCPU ステータスを変更する

インスタンスを再起動せずに、コマンドを実行して vCPU のステータスを変更できます。この方法で HT を無効にした後、echo 1 > /sys/devices/system/cpu/cpu$cpunum/online コマンドを使用して、インスタンスを再起動せずにすべての vCPU を復元できます。

  • lscpucpuid などのコマンドを使用して CPU ステータスを表示すると、使用中および未使用のすべての vCPU が返されます。

  • 一部のソフトウェアライセンスはすべての CPU を検出できるため、追加料金が発生する場合があります。

  • インスタンスが再起動された場合は、設定をリセットする必要があります。

重要

これらの 2 つの方法が実際にビジネスに影響を与えるかどうかは保証できません。実際の運用環境でビジネスへの影響を十分に評価することをお勧めします。

nr_cpus を設定する

nr_cpus は、カーネルでサポートされる CPU の最大数を制限するカーネルパラメーターです。有効な値:2 ~ 255。HT を無効にする効果を得るには、nr_cpus をインスタンスタイプの vCPU 数の半分に設定します。こうすることで、カーネルでサポートされる CPU の最大数が半分になり、実際に使用される CPU も半分になります。1 つの物理コアは 1 つの仮想処理コアのみに対応します。また、lscpu などのコマンドでは、実際に使用されている CPU の数が返されます。

このトピックでは、ecs.ebmc6me.16xlarge インスタンスを例として使用します。インスタンスには 64 個の vCPU があり、CentOS.7 オペレーティングシステムを使用しています。次のセクションでは、インスタンスの nr_cpus を設定する手順について説明します。

  1. ECS ベアメタルインスタンスに接続します。詳細については、「パスワードまたはキーを使用して Linux インスタンスに接続する」をご参照ください。

  2. lscpu コマンドを実行して vCPU ステータスを表示し、インスタンスで HT が有効になっているかどうかを確認します。

    次の図は、サンプルレスポンスを示しています。CPU(s) の値はインスタンスの実際の vCPU 数と同じで、Thread(s) per core の値は 2 です。これは、インスタンスで HT が有効になっていることを示しています。

    Bare Metal CPU.png

  3. grub ファイルを変更します。

    vim /boot/grub2/grub.cfg

    i キーを押して編集モードに入ります。nr_cpus をインスタンスタイプの vCPU 数の半分に設定します。例:nr_cpus=32。Esc キーを押して編集モードを終了し、:wq と入力してファイルを保存して終了します。

    裸金属CPU111..png

  4. インスタンスを再起動します。

  5. 結果を確認します。

    1. lscpu コマンドを実行して vCPU ステータスを表示します。

      次の図は、CPU(s) が 32、Thread(s) per core が 1 であるサンプルレスポンスを示しています。レスポンスは、インスタンスで HT が無効になっていることを示しています。

      Bare metal CPU1.png

    2. lscpu --extend コマンドを実行して vCPU の分布を確認します。

      次の図は、32 個の vCPU が 32 個の物理コアに分散されているサンプルレスポンスを示しています。これにより、HT を無効にする効果が得られます。

      Bare metal CPU11.png

vCPU ステータスを変更する

コマンドを実行して vCPU のステータスを変更し、vCPU の半分を無効にすることができます。

このトピックでは、ecs.ebmc6me.16xlarge インスタンスを例として使用します。インスタンスには 64 個の vCPU があり、CentOS.7 オペレーティングシステムを使用しています。次のセクションでは、vCPU ステータスを変更する手順について説明します。

  1. ECS ベアメタルインスタンスに接続します。詳細については、「パスワードまたはキーを使用して Linux インスタンスに接続する」をご参照ください。

  2. lscpu コマンドを実行して vCPU ステータスを表示し、インスタンスで HT が有効になっているかどうかを確認します。

    次の図は、サンプルレスポンスを示しています。CPU(s) の値はインスタンスの実際の vCPU 数と同じで、Thread(s) per core の値は 2 です。これは、インスタンスで HT が有効になっていることを示しています。

    Bare Metal CPU.png

  3. スクリプトを作成して実行し、vCPU ステータスを変更します。

    1. スクリプトを作成します。

      vim test.sh

      サンプルスクリプト:

      #!/bin/bash
      for cpunum in $(cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | cut -s -d, -f2- | tr ',' '\n' | sort -un)
      do
          echo 0 > /sys/devices/system/cpu/cpu$cpunum/online  # set CPU offline
      done
    2. スクリプトを実行します。

      sh test.sh
  4. 結果を確認します。

    1. lscpu コマンドを実行して vCPU ステータスを表示します。

      次の図は、32 個の vCPU がオフラインで、Thread(s) per core が 1 であるサンプルレスポンスを示しています。レスポンスは、インスタンスで HT が無効になっていることを示しています。

      Bare metal CPU22.png

    2. lscpu --extend コマンドを実行して vCPU の分布を確認します。

      次の図は、32 個のオンライン vCPU が 32 個の物理コアに分散されているサンプルレスポンスを示しています。これにより、HT を無効にする効果が得られます。

      Bare metal CPU2.png