2.13. システムのパーティション設定
リアルタイムチューニングの主要な手法の 1 つが、システムの分割です。つまり、システムで実行している 1 つまたは複数のリアルタイムアプリケーションを排他的に使用するために、CPU コアのグループを分離します。最善の結果を得るには、CPU トポロジーを考慮して、2 次キャッシュと 3 次キャッシュの共有を最大化するために、同じ非均一メモリーアクセス (NUMA) ノードに含まれるコアに配置されるようにする必要があります。
lscpu
および tuna
ユーティリティーは、システム CPU トポロジーを決定するために使用されます。Tuna GUI を使用すると、CPU を動的に分離し、スレッドをある CPU から別の CPU に移動して、パフォーマンスへの影響を測定することができます。
パーティション設定がシステムのレイアウトとアプリケーションの構造に基づいて判断されたら、起動時に自動的にパーティションを設定する手順を説明します。そのためには、tuned-profiles-realtime パッケージによって提供されるユーティリティーを使用します。RedHat EnterpriseLinux for Real Time パッケージがインストールされると、このパッケージがデフォルトでインストールされます。tuned-profiles-realtime を手動でインストールするには、root として次のコマンドを実行します。
yum install tuned-profiles-realtime
~]# yum install tuned-profiles-realtime
tuned-profiles-realtime パッケージは、追加のユーザー入力を必要とせずにブート時にパーティショニングやその他のチューニングを可能にする、
tuned
リアルタイムプロファイルを提供します。2 つの設定ファイルにより、プロファイルの動作が制御されます。
/etc/tuned/リアルタイム変数.conf
/usr/lib/tuned/realtime/tuned.conf
realtime-variables.conf
ファイルは、分離する CPU コアのグループを指定します。CPU コアのグループをシステムから分離するには、次の例のように、isolated_cores
オプションを使用します。
上記の例では、プロファイルは CPU 1、2、3、5、9、10、11、12、13、および 14 を分離 CPU カテゴリーに配置します。これらの CPU のスレッドのみが、コアにバインドされるカーネルスレッドです。これらのカーネルスレッドは、移行スレッドやウォッチドッグスレッドなどの特定の状態が発生する場合にのみ実行されます。
isolated_cores
変数が設定されたら、tuned-adm コマンドでプロファイルをアクティブ化します。
tuned-adm profile realtime
~]# tuned-adm profile realtime
プロファイルは
ブートローダー
プラグインを使用します。このプラグインを有効にすると、Linux カーネルコマンドラインに以下のブートパラメーターが追加されます。
- isolcpus
realtime-variables.conf
ファイルにリストされている CPU を指定します- nohz
- アイドル状態の CPU のタイマーティックをオフにします。デフォルトでは
オフ
に設定されています。 - nohz_full
- CPU 上に実行可能なタスクが 1 つしかない場合に、CPU のタイマーティックをオフにします。nohz
を
オン
に設定する必要があります。 - intel_pstate=disable
- Intel のアイドルドライバーが電源状態および CPU 周波数を管理しないようにする
- nosoftlockup
- カーネルがユーザースレッドのソフトロックアップを検出しないようにする
上記の例では、カーネルブートコマンドラインパラメーターは以下のようになります。
isolcpus=1-3,5,9-14 nohz=on nohz_full=1-3,5,9-14 intel_pstate=disable nosoftlockup
isolcpus=1-3,5,9-14 nohz=on nohz_full=1-3,5,9-14 intel_pstate=disable nosoftlockup
プロファイルは、
tuned.conf
の [script]
セクションで指定された script.sh
シェルスクリプトを実行します。このスクリプトは、sysfs
仮想ファイルシステムの次のエントリーを調整します。
/sys/bus/workqueue/devices/writeback/cpumask
/sys/devices/system/machinecheck/machinecheck*/ignore_ce
上記の
ワークキュー
エントリーは分離された CPU マスクの逆に設定され、2 番目のエントリーはマシンチェック例外をオフにします。
このスクリプトは
、/etc/
sysctl.conf ファイルに次の変数も設定します。
kernel.hung_task_timeout_secs = 600 kernel.nmi_watchdog = 0 kernel.sched_rt_runtime_us = 1000000 vm.stat_interval = 10
kernel.hung_task_timeout_secs = 600
kernel.nmi_watchdog = 0
kernel.sched_rt_runtime_us = 1000000
vm.stat_interval = 10
このスクリプトは、
Tuna
インターフェイスを使用して、分離された CPU 番号上の非バインドスレッドを分離された CPU から移動します。
さらに調整するには、デフォルトの
/usr/lib/tuned/realtime/script.sh
をコピーして変更し、tuned.conf
JSON ファイルを変更したスクリプトを指すように変更します。