Linuxコンテキスト切り替え頻度を変更するには?

Linuxコンテキスト切り替え頻度を変更するには?

Linux(linaro、ubuntu、debian)のコンテキスト切り替え頻度を変更するには?

反応性の低いシステムをより効率的なシステムに交換できます。

編集1:できるだけ早く(毎秒最大クロックサイクル)実行したい基本的なプロセスがあるので、コンテキスト切り替えの頻度を減らすことを検討しました(=時間分割の増加)。問題はどうするか、効果が有意なのかという点だ。コンテキストコンバージョンコストを計算できますか?つまり、時間分割を3倍に増やすことで、関心のある主要なプロセスのパフォーマンス向上がどの程度なるかを予測できますか?

答え1

あなたの使命ただ特定のCPUで要求時間を処理し、タスク間のコンテキスト切り替えはありません:-)ただし、CPUはまだ中断され、カーネルへのコンテキスト切り替えが発生し、その逆に切り替えることができます。考えられる原因の1つは、そのCPUで実行する他のタスクがあるかどうかを確認するプリエンプションタイマーです。

Linuxできる理由なくCPUにプリエンプションタイマ割り込みを発生させないでください。望むよりCONFIG_NO_HZ_FULL。この機能を使用するには、カーネルをビルドするときに有効にする必要があります。そして起動オプションを使用して有効にする必要があります。

デフォルトでは、どのCPUも適応ティックCPUではありません。 "nohz_full="起動パラメータは、適応ティックCPUを指定します。たとえば、「nohz_full = 1,6-8」は、CPU 1、6、7、8が適応拡張CPUであることを意味します。すべてのCPUをAdaptive Beat CPUとして表示することは禁止されています。 [...]

LWN.netは、「Ingo Molnarによると、Adaptive Tick CPUはCPU時間を最大1%まで節約できます」と述べています。カーネル文書には6つの異なる費用があり、「既知の問題」のリストもあると述べています。

この利得は比較的小さい。特に、この回答で説明されているように、複数のタスク間のコンテキスト遷移の頻度を減らすことによる潜在的なスループット利得と比較すると、さらにそうです。LinuxのCPUスケジューラで使用されるタイムスライスの長さを変更するには?

小文字:これらの測定値はSpectre、Meltdown、KPTI、およびx86 ASIDのサポートより前です。特定のカーネルバージョンとハードウェアの変更に応じて...

オリジナルのRFCパッチに対するMolnarの希望は、時間が経つにつれて「ほとんどのLinuxディストリビューションで有効にできる」ことです。 Fedora 28には、ビルドをサポートするデフォルトのカーネルが付属していることがわかりましたNO_HZ_FULL。しかしDebian 9はそうではありません。


最近、Linux v4.17nohz_fullCPU から残りの 1Hz タイマーティックを取り除きます。。スループットに与える影響はかなり小さいと思います。 :-) しかし、NO_HZ_FULLCPUに複数の実行可能なプロセスがある場合、利点の状態を追跡しようとしました。

0 Hzに達すると、nr_running> = 2から定期的なティック仮定を削除し、デフォルトでsched_latency制約で必要なだけ忙しい操作を中止できます(nr_runningに応じて4〜40msごと)。

v2.6.25-rc1では、プリエンプションは別々のより正確なティックを使用し始めたため、これはやや混乱しています。コミット 8f4d37ec073c, "sched: 高解像度プリエンプションが確認済み"。同じLWN.net記事のコメントを通して発見されました。https://lwn.net/Articles/549754/)。

関連情報