Linuxカーネルについては2つの質問があります。具体的には、タイマー割り込みでLinuxが何をしているのかを正確に知っている人はいますか?これに関する文書はありますか?カーネルをビルドするときにCONFIG_HZ設定を変更すると、どのような影響がありますか?
よろしくお願いします!
ベストアンサー1
Linuxタイマー割り込みハンドラはそれほど多くのことをしません。まっすぐ。 x86の場合、デフォルトのPIT / HPETタイマー割り込みハンドラを見つけることができます。存在するarch/x86/kernel/time.c
:
static irqreturn_t timer_interrupt(int irq, void *dev_id)
{
global_clock_event->event_handler(global_clock_event);
return IRQ_HANDLED;
}
これにより、グローバルクロックイベントのイベントハンドラが呼び出されます。tick_handler_periodic
基本的に、ジッピーカウンターアップデート、グローバル負荷を計算し、時間が追跡される別の場所を更新します。
割り込み発生の副作用として、__schedule
最終的に呼び出される可能性があるため、タイマー割り込みによってジョブの切り替えが発生する可能性があります(他の割り込みと同様)。
変化構成_HZタイマー割り込み周期を変更します。増加はHZ
より頻繁に発生するため、タイマーに関連するオーバーヘッドが増えますが、ジョブのスケジュールがしばらく待つ機会が少ないことを意味します(したがって相互作用が向上します)。減少はHZ
あまり頻繁に発生しないため、関連するオーバーヘッドが少ないことを意味します。タイマーの使用タイマーに関連するオーバーヘッドは少なくなりますが、ジョブがスケジュールされるのを待つリスクが高くなります(したがって、インタラクティブな応答性を犠牲にしてスループットが向上します)。いつものように、最良のトレードオフは特定のワークロードによって異なります。とにかく、CONFIG_HZ
今はある意味では関連性が低くなります。LinuxのCPUスケジューラで使用されるタイムスライスの長さを変更するには?
また、見ることができますLinuxで割り込みを処理する方法は?