9.3. コンテナー配置による CPU パフォーマンスの最適化


リアルタイムプロファイルを使用してホストをチューニングした後、コンテナーを選択的に特定の CPU に配置してコンテナーランタイムの動作を調整することで、パフォーマンスをさらに最適化できます。これらの戦略により、CPU の分離および cgroup 設定がコンテナー化されたワークロードのレイテンシーにどのように影響するかを調べることができます。

9.3.1. すべての CPU での podman の実行

rteval コンテナーで podman を実行するには、チューニングされたリアルタイムプロファイルまたはカスタムシステムチューニングを使用して、システムを調整します。測定するシナリオに CPU 分離が必要かどうかを判別します。特定のシナリオでコンテナーを実行する際にの問題を回避するために、CPU 分離を正しく設定してください。

/proc/cmdlineisolcpus= 引数を確認します。isolcpus が設定されていない場合、システムは CPU を分離せず、すべての CPU でコンテナーを実行できます。

前提条件

  • /proc/cmdlineisolcpus= 引数は、すべての CPU でコンテナーを実行するように設定されていません。
  • ホストマシンが Red Hat Enterprise Linux バージョン 9.6 以降で実行されている。
  • podman サービスが実行している。
  • rteval コンテナーがインストールされ、実行中である。

手順

  1. podman レジストリーにログインします。

    $ podman login registry.redhat.io
  2. rteval コンテナーを実行します。次のいずれかの方法を選択して、コンテナーを実行します。

    • 単一の NUMA ノードボックス上のすべての CPU で、以下を実行します。

      $ podman run -it --rm --privileged --pids-limit=0 registry.redhat.io/rhel10/rteval \
      	/bin/bash -c 'rteval --duration 2h’
    • マルチ NUMA ノードマシンで以下を行います。

      $ podman run -it --rm --privileged --pids-limit=0 registry.redhat.io/rhel10/rteval \
      	/bin/bash -c 'rteval --duration 2h --loads-cpulist 0,1 --measurement-cpulist 2-47
      --pids-limit=0

      kcompile は、コンテナーランタイムのデフォルト制限に到達せずに実行できます。

      kcompile は、カーネル全体を再ビルドすることなく、現在実行中のカーネルのカーネルモジュールをコンパイルするために使用されるコマンドラインユーティリティーです。

      --privileged
      コンテナーは、ホストシステム上のすべてのデバイスにアクセスできます。これは、rteval が正常に実行されるために必要です。

これらのコマンドは、利用可能なすべてのノードで単一のコンテナーを実行します。tuned サービスはホストのチューニングを管理するため、CPU を 1 つだけ使用する場合にベアメタルのパフォーマンスを評価できます。

検証

  • 新しいターミナルで、rteval コンテナーを含むすべてのコンテナーを一覧表示し、正しく実行されていることを確認します。

    $ podman ps -a

9.3.2. 分割された CPU 割り当てによる podman の実行

負荷の分離や測定をテストするために、異なるコンテナーを異なる CPU セットに割り当てることができます。たとえば、1 つの NUMA ノードのみが存在し、負荷と測定をコンテナーに分割したい場合などに、2 つの異なるコンテナーを実行できます。この場合、両方のコンテナーがすべての CPU で実行され、チューニングにはパーティションは使用されません。

コマンドの例:

  • コンテナーを読み込み ます。

    $ podman run -it --rm --privileged --pids-limit=0 registry.redhat.io/rhel10/rteval \
       	/bin/bash -c 'rteval --duration 2h --onlyload'
  • コンテナーを測定 します。

    $ podman run -it --rm --privileged --pids-limit=0 registry.redhat.io/rhel10/rteval \
       	/bin/bash -c 'rteval --duration 2h --onlymeasure'

複数の NUMA ノードを持つボックスまたは手動でパーティショニングされたマシンを持つパーティショニングを使用するシナリオでは、コマンド例は次のとおりです。

  • コンテナーを読み込み ます。

    $ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 0,1 registry.redhat.io/rhel10/rteval \
    /bin/bash -c 'rteval --duration 2h --onlyload --loads-cpulist 0,1'
  • コンテナーを測定 します。

    $ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 2-47 registry.redhat.io/rhel10/rteval \
    /bin/bash -c 'rteval --duration 2h --noload --measurement-cpulist 2-47'

これらのコマンドを実行すると、負荷コンテナーはハウスキーピングコアの負荷を生成し、測定コンテナーは isol_cpu セットで動作します。

パーティショニングが設定されていない場合、あるコンテナーがシステム上のすべての CPU 間で負荷を生成し、別のノードでのレイテンシーを測定します。

どちらのシナリオでも、負荷と測定は 2 つのコンテナー間で正常に分離されます。

9.3.3. リアルタイムプロファイルでの NUMA ごとのハウスキーピングの調整

リアルタイムプロファイルで、NUMA ノードごとにハウスキーピング CPU セットを調整できます。これにより、ハウスキーピングタスクが NUMA ノード全体に均等に分散されるようにすることで、システムのパフォーマンスを最適化します。

これは、競合の削減および全体的なパフォーマンスを向上させるのに役立つため、複数の NUMA ノードを持つシステムに特に役立ちます。

デフォルトのリアルタイム tuned プロファイルは、NUMA ノードごとに 1 つのハウスキーピング CPU を確保します(hk_per_numa=1)。コンテナーワークロードにより多くの CPU が必要な場合は、この動作を変更できます。

前提条件

  • ホストマシンが Red Hat Enterprise Linux バージョン 9.6 以降で実行されている。
  • tuned サービスを実行している。
  • rteval コンテナーがインストールされ、実行中である。
  • podman サービスが実行している。
  • tuned-profiles-realtime パッケージがインストールされている。

手順

  1. realtime-variables.conf ファイルを変更して、NUMA ノードごとにハウスキーピング CPU セットを調整します。

    • テキストエディターで /etc/tuned にある realtime-variables.conf ファイルを開きます。

      $ sudo vi /etc/tuned/realtime-variables.conf
    • isolated_cores 変数を見つけます。デフォルトでは、これは 1 に設定されています。つまり、NUMA ノードごとに 1 つのコアが分離またはハウスキーピング以外の使用用に予約されます。この値を大きくすることができますが、NUMA ノードあたりの CPU の総数より小さくなければなりません。

      以下の例では、NUMA ノードごとに 24 コアを持つシステムで、isolated_cores3 に設定します。

      isolated_cores=${f:calc_isolated_cores:3}
  2. 変更を保存してファイルを閉じます。
  3. tuned リアルタイムプロファイルを再適用します。

    $ sudo tuned-adm profile realtime

これにより、テスト中に合計 6 つの CPU (NUMA ノードあたり 3)が負荷を生成し、システムは残りのコアを isolcpus セット用に予約します。この設定は測定に使用されます。場合によっては、優先度の設定が混在すると、isolcpus セットではなく、カスタムトポロジーにコンテナーがデプロイされる可能性があります。

または、ノードごとの自動数に依存する代わりに、カスタム CPU 範囲を手動で指定することもできます。これにより、分離されたコアを完全に制御できるようになり、不均一のトポロジーまたは特殊な CPU レイアウトを使用するシステムを微調整しやすくなります。

検証

  1. realtime-variables.conf ファイルの変更を確認します。
  2. システムを再起動して変更を適用します。
  3. /proc/cmdline ファイルを表示して、isolcpus 設定を確認します。

    $ cat /proc/cmdline
    BOOT_IMAGE=(hd0,gpt2)/vmlinuz-5.XX.X-XX.X.X.el9_6.x86_64+rt root=/dev/mapper/rhel_rt--qe--11-root ro  crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=UUID=00cbf36d-ffaa-4285-a381-5c1d868eb3e3 rd.lvm.lv=rhel_rt-qe-11/root rd.lvm.lv=rhel_rt-qe-11/swap console=ttyS0,115200n81 skew_tick=1 tsc=reliable rcupdate.rcu_normal_after_boot=1 isolcpus=managed_irq,domain,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 intel_pstate=disable nosoftlockup

9.3.4. 分離された CPU 間で複数のコンテナーの分散

分離された CPU 全体で複数のコンテナーを実行するには、the-- cpuset-cpus オプションを使用して各コンテナーが使用する CPU を指定します。これにより、負荷が複数の分離された CPU に分割され、パフォーマンスが向上し、競合が軽減されます。

isolcpus セットを複数のコンテナーに分けて、以下のタスクをシミュレートできます。

  • 同時レイテンシーの影響を受けやすいタスク。
  • パーティションが分割されたシステムに複数ロードします。

9.3.4.1. 同時レイテンシーの影響を受けやすいタスクのシミュレーション

レイテンシーの影響を受けやすいタスクをシミュレートするには、特定の分離された CPU を各コンテナーに割り当てることができます。以下の例は、異なる CPU セット間でコンテナーを設定して実行する方法を示しています。

1 つのコンテナーを CPU 0 - 6 上で、もう 1 つは CPU 7 - 28 で、3 番目のコンテナーを CPU 29-47 で実行します。以下のコマンドを使用します。

$ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 0-6 registry.redhat.io/rhel10/rteval \
    /bin/bash -c 'rteval --duration 2h --onlyload --loads-cpulist 0-6'
$ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 7-28 registry.redhat.io/rhel10/rteval \
    /bin/bash -c 'rteval --duration 2h --onlyload --loads-cpulist 7-28'
$ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 29-47 registry.redhat.io/rhel10/rteval \
    /bin/bash -c 'rteval --duration 2h --onlyload --loads-cpulist 29-47'

9.3.4.2. パーティション化されたシステム全体で複数の負荷のシミュレーション

分離されていない CPU セットで rteval ロードジェネレーターを開始します。次に、isolcpus セットの一部で高速データベースコンテナーなどの高スループットのアプリケーションをシミュレートします。この例では、高速データベースコンテナーを表す CPU 7-28 が使用されます。別のターミナルセッションで以下のコマンドを実行して、読み込みを開始します。

$ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 0-6 registry.redhat.io/rhel10/rteval \
    /bin/bash -c 'rteval --duration 2h --onlyload --loads-cpulist 0-6'

次に、別のターミナルで、分離された CPU のサブセットの一部に負荷を生成します。

$ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 20-30 registry.redhat.io/rhel10/rteval \
    /bin/bash -c 'rteval --duration 2h --onlyload --loads-cpulist 20-30'

ここで、残りの CPU で測定スレッドを実行するには、2 つのオプションがあります。分離された CPU の残りの 2 つのサブセットをデプロイするか、残りの CPU サブセットの両方を使用する単一の測定コンテナーを実行できます。

  • オプション 1: 2 つの測定コンテナーをデプロイします。

    $ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 7-19 registry.redhat.io/rhel10/rteval \
        /bin/bash -c 'rteval --duration 2h --noload --measurement-cpulist 7-19'
    $ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 31-47 registry.redhat.io/rhel10/rteval \
        /bin/bash -c 'rteval --duration 2h --noload --measurement-cpulist 31-47'
  • オプション 2: 単一の測定コンテナーをデプロイします。

    $ podman run -it --rm --privileged --pids-limit=0 --cpuset-cpus 7-19,31-47 registry.redhat.io/rhel10/rteval \
        /bin/bash -c 'rteval --duration 2h --noload --measurement-cpulist 7-19,31-47'
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る