3.13. Tuned-profiles-realtime を使用した CPU の分離
アプリケーションスレッドに可能な限り長い実行時間を割り当てるには、CPU を分離します。つまり、CPU からできるだけ多くの余分なタスクを削除することになります。通常、CPU の分離には、以下が関係します。
- ユーザー空間スレッドをすべて削除
- バインドされていないカーネルスレッドの削除 (バインドされたカーネルスレッドは特定の CPU に関連付けられ、移動できない)
- システム内の各割り込み要求 (IRQ) 番号 N の
/proc/irq/N/smp_affinityプロパティーを変更して割り込みを削除します。
このセクションでは 、tuned-profiles-realtime パッケージの
isolated_cores= cpulist 設定オプションを使用してこれらの操作を自動化する方法を示します。
分離する CPU の選択
分離する CPU を選択するには、システムの CPU トポロジーを慎重に検討する必要があります。ユースケースによっては、異なる設定が必要になる場合があります。
- スレッドがキャッシュを共有して相互に通信する必要があるマルチスレッドアプリケーションがある場合、同じ NUMA ノードまたは物理ソケットでスレッドを保持する必要がある場合があります。
- 関連のない複数の real-time アプリケーションを実行すると、NUMA ノードまたはソケットごとに CPU を分離することができます。
hwloc パッケージには 、lstopo-no-graphics や numactl など、CPU に関する情報を取得するのに役立つコマンドが用意されています。
- 物理パッケージで使用可能な CPU のレイアウトを表示するには、lstopo-no-graphics --no-io --no-legend --of txt コマンドを使用します。
図3.1 lstopo-no-graphics を使用して CPU のレイアウトを表示する
上記のコマンドは、利用可能なコアとソケットの数と NUMA ノードの論理距離を表示するため、マルチスレッドアプリケーションに役立ちます。さらに、hwloc-gui パッケージは、グラフィカル出力を生成する lstopo コマンドを提供します。 - ノード間の距離など、CPU に関する詳細情報を取得するには、numactl --hardware コマンドを使用します。
~]# numactl --hardware available: 2 nodes (0-1) node 0 cpus: 0 1 2 3 node 0 size: 16159 MB node 0 free: 6323 MB node 1 cpus: 4 5 6 7 node 1 size: 16384 MB node 1 free: 10289 MB node distances: node 0 1 0: 10 21 1: 21 10
hwloc パッケージが提供するユーティリティーの詳細は、
hwloc(7) man ページを参照してください。
Tuned の isolated_cores オプションを使用して CPU を分離する
CPU を分離するための初期メカニズムは、カーネルブートコマンドラインでブートパラメーター
isolcpus= cpulist を 指定することです。Red Hat Enterprise Linux for Real Time でこれを行うための推奨方法は、tuned デーモンとその tuned-profiles-realtime パッケージを使用することです。
isolcpus ブートパラメーターを指定するには、次の手順に従います。
- 調整済み パッケージと 調整済みプロファイル - リアルタイム パッケージをインストールします。
~]# yum install tuned tuned-profiles-realtime - ファイル
/etc/tuned/realtime-variables.confで、設定オプションisolation_cores= cpulistを設定します。ここで、cpulist は 分離する CPU のリストです。このリストはコンマで区切られ、CPU 番号または範囲を 1 つ含めることができます。以下に例を示します。isolated_cores=0-3,5,7上記の行では、CPU 0、1、1、2、3、5、および 7 を分離します。例3.3 通信スレッドでの CPU の分離
8 個のコアを持つ 2 ソケットシステムで、NUMA ノード 0 にコア 0 - 3 があり、NUMA ノード 1 にコア 4 - 7 がある場合、マルチスレッドアプリケーションに 2 つのコアを割り当てるには、次の行を追加します。isolated_cores=4,5tuned-profiles-realtimeプロファイルがアクティブになると、isolcpus=4,5パラメーターがブートコマンドラインに追加されます。これにより、ユーザー空間スレッドが CPU 4 および 5 に割り当てられなくなります。例3.4 通信していないスレッドでの CPU の分離
関係のないアプリケーションの別の NUMA ノードから CPU を選択する場合は、以下を指定できます。isolated_cores=0,4これにより、ユーザー空間スレッドが CPU 0 および 4 に割り当てられるのを防ぎます。 - tuned-adm ユーティリティーを使用して、
調整されたプロファイルをアクティブ化し、再起動します。~]# tuned-adm profile realtime ~]# reboot - 再起動後、ブートコマンドラインで
isolcpusパラメーターを検索して、選択した CPU が分離されていることを確認します。~]$ cat /proc/cmdline | grep isolcpus BOOT_IMAGE=/vmlinuz-3.10.0-394.rt56.276.el7.x86_64 root=/dev/mapper/rhel_foo-root ro crashkernel=auto rd.lvm.lv=rhel_foo/root rd.lvm.lv=rhel_foo/swap console=ttyS0,115200n81 isolcpus=0,4
nohz および nohz_full パラメーターを使用して CPU を分離する
nohz および nohz_full カーネルブートパラメーターを有効にするには、realtime-virtual-host、realtime-virtual-guest、または cpu-partitioning の いずれかのプロファイルを使用する必要があります。
- nohz=on
- 特定の CPU セットのタイマーアクティビティーを減らすために使用できます。
nohzパラメーターは主に、アイドル状態の CPU で発生するタイマー割り込みを減らすために使用されます。これにより、アイドル状態の CPU を低電力モードで実行させることにより、バッテリーのライフサイクルが容易になります。nohzパラメーターはリアルタイム応答時間には直接役立ちませんが、リアルタイム応答時間に直接悪影響を与えることはなく、リアルタイムパフォーマンスにプラスの影響を与える次のパラメーターをアクティブ化するために必要です。 - nohz_full= プロセッサー
nohz_fullパラメーターは、タイマーティックに関して CPU のリストを異なる方法で処理するために使用されます。CPU が nohz_full CPU としてリスト表示され、CPU に実行可能なタスクが 1 つしかない場合、カーネルはその CPU へのタイマーティックの送信を停止するため、アプリケーションの実行に費やす時間が少なくなり、割り込みとコンテキストの切り替えに費やされた時間が短縮されます。
これらのパラメーターの詳細は、Configuring kernel tick time を参照してください。