#author("2017-08-12T14:01:34+09:00","default:afuruta","afuruta")
#author("2017-08-12T16:39:15+09:00","default:afuruta","afuruta")
* softirq 処理はいつ行われるのか [#i85da92c]
** ksoftirqd はいつ働く [#hf00b1ba]
softirq 処理のために ksoftirqd thread が用意されています。&ogrefs(ksoftirqd,ksoftirqd,softirq.c);, &ogdefs(softirq_threads); 変数で状態を保持しています。&span(ConsoleIn){ps uaxww}; コマンドでプロセスリストを表示すると ksoftirqd/0, ksoftirqd/1, ... のような名前で CPU の数と同じ数だけ並ぶ kernel thread です。
#code(c,/softirq_threads/../^};$/,ogfileone:/kernel/softirq.c);
softirq 処理が ksoftirqd で行われるのは &ogdefs(threadirqs,setup_forced_irqthreads); kernel parameter 未指定で低負荷状態では稀です。ksoftirqd が使われる条件は &ogdefs(__do_softirq()); に実装されています。
#code(c,/restart:/../wakeup_softirqd()/,end+=1,ogfileone:/kernel/softirq.c);
|イベント・タイミング|処理が行われる所|>|>|h
|~|呼び出し元|irq 処理の最後|ksoftirqd|h
|割り込み発生&br;(&ogdefs(irq_exit());)|CENTER:|CENTER:○|CENTER:○|
|&ogdefs(do_softirq());|CENTER:○ (!&ogdefs(in_interrupt());)|CENTER:|CENTER:○|
|&ogdefs(raise_softirq());&br;&ogdefs(raise_softirq_irqoff());|CENTER:|CENTER:|CENTER:○ (!&ogdefs(in_interrupt());)|


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS