2012-03-19 3 views
16

簡単な実験では、NOHZ=OFFを設定し、printkを使用してdo_timer関数が呼び出される頻度を出力しました。私のマシンで10ミリ秒ごとに呼び出されます。NOHZ = OnがLinuxカーネルのdo_timerにどのように影響するか

しかし、NOHZ=ONの場合、do_timerが呼び出されるとジッタが大きくなります。ほとんどの場合、10ミリ秒ごとに呼び出されますが、期限が完全に間に合わないことがあります。

私はdo_timerとNOHZの両方について調査しました。 do_timerは、jiffiesの値を更新する機能であり、プロセスのラウンドロビンスケジューリングも担当します。

NOHZ機能は、システムの高解像度タイマをオフに切り替えます。

私が理解できないことは、高齢者のタイマーがdo_timerにどのように影響するのでしょうか?高解像度ハードウェアがスリープ状態にあっても、持続クロックは、do_timerを10ミリ秒ごとに実行する能力以上です。第二に、do_timerが実行する必要があるときに実行されていない場合、理想的にはそれを取得しなければならないときに、プロセスによってはタイムシェアが得られないということです。たくさんのグーグルが、多くの人々にとって、NOHZ=OFFの場合、多くのアプリケーションがはるかに優れた作業を開始することを示しています。

短いストーリーを作るには、NOHZ=ONはどのようにdo_timerに影響しますか?
do_timerは期限が間に合わないのはなぜですか?

答えて

30
まず tickless kernelNOHZ=Onまたは CONFIG_NO_HZセット)で、 http://www.lesswatts.org/projects/tickless/index.phpから 2.6.17

からLinuxカーネルにそれを導入する動機は何だったのかを理解することができます

伝統的に、Linuxカーネルを使用します各CPUの定期タイマー。 このタイマーは、プロセスアカウンティング、 スケジューラーの負荷分散、およびCPU単位のタイマーイベントの維持など、さまざまなことを行いました。以前のカーネルでは250Hz (250イベント/秒または1イベント/ 4ミリ秒)または1000Hz(1000イベント/秒)を使用していましたが、Linuxカーネルは100Hzの周波数のタイマーを使用していました( /秒または10ミリ秒ごとに1イベント) 2ミリ秒または1ミリ秒ごとに1つのイベント)。

この定期的なタイマーイベントは、「タイマーティック」と呼ばれることがよくあります。タイマー tickは設計上単純ですが、重大な欠点があります。 タイマーティックは、プロセッサーの状態に関係なく、アイドルでもビジーでも、周期的に発生します。プロセッサがアイドル状態の場合は、1,4-または10ミリ秒ごとに省電力スリープ状態から を起動する必要があります。この はかなりのエネルギーを消費し、ラップトップでバッテリ寿命を消費し、 はサーバーで不要な電力を消費します。

"tickless idle"の場合、Linuxカーネルは、CPUがアイドル状態のときにこの定期的な タイマーティックを削除しました。これにより、CPUは の電力節約状態に長時間留まり、全体的には のシステム消費電力が削減されます。

したがって、消費電力を削減することは、ティックレスカーネルの主な動機の1つでした。しかし、ほとんどの場合、パフォーマンスは電力消費量の減少とヒットします。デスクトップコンピュータの場合、パフォーマンスは最大の懸案事項です。そのため、ほとんどの人にとって、NOHZ=OFFはかなりうまく動作しています。

インゴ・モルナーさん自身の言葉で

ティックレスカーネル機能(CONFIG_NO_HZ)が「オンデマンド」可能タイマー 割り込み:システムがアイドル状態になったときに1.5秒 言うために期限切れにすべきタイマーがない場合システムは、 1.5秒間、完全にアイドル状態のままです。これにより、より低温のCPUと省電力が得られるはずです。当社の(x86)テストボックスでは、実効IRQレートをHZ から1秒あたり1〜2タイマー割り込みまで測定しています。

は今、私は理解することができませんどのような

は、高解像度のタイマーが do_timerにどのように影響するかは、あなたのqueries-答えることを試すことができますか?

システムが高解像度タイマをサポートしている場合、ほとんどのシステムでは通常の10msより頻繁にタイマ割り込みが発生することがあります。すなわち、これらのタイマは、システム能力を活用し、より速く、例えば100usのようにタイマ割り込みを発射することによって、システムをより応答性にするように試みる。 NOHZオプションでだから、これらのタイマーは、ハードウェアが永続的なクロックは10ms毎

をdo_timer実行することが可能なより 以上であるスリープ状態であっても高解像度の場合は冷却し、ひいては do_timer

の下、実行されています

はい、可能です。しかし、NOHZの意図はまったく逆です。頻繁なタイマー割込みを防ぐために!第二に

それはそれは、彼らが理想的 はそれを

を取得しなければならないとき、いくつかの プロセスはcafはコメントで述べたように、NOHZが発生しない彼らのタイムシェアを得ていないことを意味すべきときdo_timerが実行されていない場合CPUがアイドル状態のときにのみ起動するため、つまり、スケジューリング可能なプロセスが存在しないため、スケジューリング頻度が低くなります。プロセス会計のものだけが遅れて実行されます。

なぜdo_timerは期限が間に合わないのですか?

としては、それは私はあなたが出発点としてtick-sched.cカーネルソースを通過示唆NOHZ

の意図した設計で、精緻化。CONFIG_NO_HZを検索し、ここに1つのテストは、私がこの回答に感謝よりも午前Impact of a Tickless Kernel

+0

を測定するために実施されNOHZ機能

のために追加された新機能を理解してみてください。私はNOHZがタイマーを使用するだけなので、do_timerは何らかの影響を受けていないという印象を受けました(do_timerはNOHZスイッチの影響を受けない永続的なクロックによって発生したと思いました)。 –

+5

'NOHZ'は、CPUがアイドル状態のときにのみ起動するため、つまり*スケジューリング可能なプロセスがないときに、プロセスのスケジューリング頻度を低くしません。 – caf

+0

@cafポインタcafに感謝します。あなたのコメントで私の答えを更新しました:) 'NOHZ'がプロセススケジューリングに影響を与えない場合、' NOHZ = OFF'のときにパフォーマンス(システムフリーズなど)が改善するのはなぜですか?私はこれがフォーラムであると不平を言う多くの人々を見てきました。 –

関連する問題