19

tick_periodicGentooをゲストとして仮想マシンを実行すると、関数からかなりのオーバーヘッドが発生することがわかりました。(これは、タイマー割り込みごとに実行される関数です。)この関数は、オーバーヘッドにつながるグローバルjiffy使用を更新します。write_seqlocks

HZこれが私のカーネル設定ファイルのgrepと関連するものです。

sharan013@sitmac4:~$ cat /boot/config | egrep 'HZ|TIME'

# CONFIG_RCU_FAST_NO_HZ is not set
CONFIG_NO_HZ=y
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
CONFIG_HZ_1000=y
CONFIG_HZ=1000
# CONFIG_MACHZ_WDT is not set
CONFIG_TIMERFD=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_X86_CYCLONE_TIMER=y
CONFIG_HPET_TIMER=y

明らかに構成が1000に設定されていますが、設定するとsysconf(_SC_CLK_TCK)、タイマー周波数として100が取得されます。それで、私のシステムのタイマー周波数は何ですか?

私がやりたいのは、周波数を100に下げ、可能であればさらに低くすることです。poll/およびスケジューラのタイムスライスの対話性と精度に影響を与える可能性がありますがselect、VMを高速化するため、タイマー割り込みを減らすためにこれらを犠牲にする準備ができています。

何をしなければならないかを見つけようとしたとき、構成ファイルを変更することでそれができる場所を読みました。それ以外の場合は、bootパラメーターにdivider = 10を追加すると機能することを読みました。それ以外の場合は、それを読みました。CONFIG_HIGH_RES_TIMERSタイマーの頻度を上げなくても、低遅延タイマーを実現するように設定できれば、それは必要ありません。ティックレスシステムでも同じことが可能ですCONFIG_NO_HZ

私は正しいアプローチが何であるかについて非常に混乱しています。

私が欲しいのは、タイマー割り込みを可能な限り低くすることです。

これを行う正しい方法を知ることができますか?

4

1 に答える 1

24

心配しないで!あなたの混乱は予想されたものに他なりません。Linuxのタイマー割り込みは非常に紛らわしく、長くて非常にエキサイティングな歴史があります。

CLK_TCK

Linuxにはsysconfシステムコールがなく、glibcは定数値100を返しているだけです。申し訳ありません。

HZ <-おそらくあなたが望むもの

カーネルを構成するとき、100Hz、250Hz、300Hz、または1000Hzのいずれかのタイマー周波数を選択できます。これらはすべてサポートされており、1000Hzがデフォルトですが、常に最適であるとは限りません。

一般に、レイテンシー(デスクトップまたはWebサーバー)を重視する場合は高い値を選択し、スループット(HPC)を重視する場合は低い値を選択します。

CONFIG_HIGH_RES_TIMERS

これはタイマー割り込みとは何の関係もありません。これは、より高い解像度のタイマーを使用できるようにするメカニズムにすぎません。これは基本的に、のような呼び出しのタイムアウトselectが1/HZ秒よりも正確になる可能性があることを意味します。

仕切り

このコマンドラインオプションは、RedHatが提供するパッチです。おそらくこれを使用できますが(Red HatまたはCentOSを使用している場合)、注意が必要です。これは多くのバグを引き起こしているので、おそらく別のHz値で再コンパイルする必要があります。

CONFIG_NO_HZ

これは実際にはあまり効果がありません。これは省電力のためであり、何も実行されていないときにティックが停止する(または少なくとも頻度が低くなる)ことを意味します。これはおそらくカーネルですでに有効になっています。少なくとも1つのタスクが実行可能である場合、違いはありません。

Frederic Weisbeckerには、実際には保留中のパッチがあり、これを1つのタスクのみが実行されている場合に一般化していますが、まだ少し離れています。

于 2013-02-18T20:52:41.343 に答える