softirq 処理のために ksoftirqd thread が用意されています。ksoftirqd, softirq_threads 変数で状態を保持しています。ps uaxww コマンドでプロセスリストを表示すると ksoftirqd/0, ksoftirqd/1, ... のような名前で CPU の数と同じ数だけ並ぶ kernel thread です。
747
748
749
750
751
752
| - | | | | ! |
|
softirq 処理が ksoftirqd で行われるのは threadirqs kernel parameter 未指定で低負荷状態では稀です。ksoftirqd が使われる条件は __do_softirq() に実装されています。
253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 | - | | | | | | | | | | | | | - | | | | ! | | ! - | | | | | ! |
|
イベント・タイミング | 処理が行われる所 | ||
呼び出し元 | irq 処理の最後 | ksoftirqd | |
割り込み発生 (irq_exit()) | ○ | ○ | |
do_softirq() | ○ (!in_interrupt()) | ○ | |
raise_softirq() raise_softirq_irqoff() | ○ (!in_interrupt()) |