2.13. システムのパーティション設定
リアルタイムチューニングの主要な手法の 1 つが、システムの分割です。つまり、システムで実行している 1 つまたは複数のリアルタイムアプリケーションを排他的に使用するために、CPU コアのグループを分離します。最善の結果を得るには、CPU トポロジーを考慮して、2 次キャッシュと 3 次キャッシュの共有を最大化するために、同じ NUMA (Non-Uniform Memory Access) ノードに含まれるコアに配置されるようにする必要があります。
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
tuned-profiles-realtime パッケージは、ユーザーの追加入力なしに、起動時にパーティションやその他のチューニングを可能にする
tuned
real-time プロファイルを提供します。2 つの設定ファイルにより、プロファイルの動作が制御されます。
/etc/tuned/realtime-variables.conf
/usr/lib/tuned/realtime/tuned.conf
この
realtime-variables.conf
ファイルは、分離される CPU コアのグループを指定します。システムから CPU コアのグループを分離するには、以下の例のように isolated_cores
オプションを使用します。
# Examples: # isolated_cores=2,4-7 # isolated_cores=2-23 # isolated_cores=1-3,5,9-14
上記の例では、プロファイルは CPU 1、2、3、5、9、10、11、12、13、および 14 を分離 CPU カテゴリーに配置します。これらの CPU のスレッドのみが、コアにバインドされるカーネルスレッドです。これらのカーネルスレッドは、移行スレッドやウォッチドッグスレッドなどの特定の状態が発生する場合にのみ実行されます。
isolated_cores
変数が設定されたら、tuned-adm
コマンドでプロファイルをアクティベートします。
~]# tuned-adm profile realtime
プロファイルは
bootloader
プラグインを使用します。このプラグインを有効にすると、Linux カーネルコマンドラインに以下のブートパラメーターが追加されます。
- isolcpus
realtime-variables.conf
ファイルに一覧表示される CPU を指定します。- nohz
- アイドル状態の CPU でタイマーティックをオフにし、デフォルトで
off
に設定します。 - nohz_full
- CPU に実行可能なタスクが 1 つしかない場合は、CPU でタイマーティックをオフにします。
nohz
をon
に設定する必要があります。 - 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
プロファイルは、
tuned.conf
の [script]
セクションで指定された script.sh
シェルスクリプトを実行します。スクリプトは、sysfs
仮想ファイルシステムの以下のエントリーを調整します。
/sys/bus/workqueue/devices/writeback/cpumask
/sys/devices/system/machinecheck/machinecheck*/ignore_ce
上記の
workqueue
エントリーは分離された 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
このスクリプトは
tuna
インターフェースを使用して、分離された CPU 番号上の非バインドスレッドを分離された CPU から移行します。
さらに調整を
/usr/lib/tuned/realtime/script.sh
行うには、デフォルトをコピーして変更し、tuned.conf
JSON ファイルを変更したスクリプトを参照します。