ksoftirqd 是 Linux 内核中的 内核线程 (kernel thread),它的主要作用是 在软中断(softirq)压力过大时,将软中断处理从硬中断上下文转移到内核线程上下文中执行,从而避免中断处理"长时间占用 CPU",影响系统响应。
Linux 的中断处理通常分为两部分:
do_softirq() 来调度。但是,如果软中断工作量非常大,硬中断上下文里执行 do_softirq() 就可能占用太久 CPU(饿死普通进程),这时就需要 ksoftirqd.
ksoftirqd 的作用ksoftirqd/<CPU> 线程(例如 ksoftirqd/0, ksoftirqd/1).ksoftirqd,在 进程上下文(内核线程)中继续处理。ksoftirqd 是普通内核线程,可以被调度和抢占).ksoftirqd 线程是 普通内核线程(nice=0),优先级并不高。ksoftirqd,只处理该 CPU 上挂起的软中断。ksoftirqd 的主要作用可以总结为:
要不要我帮你画一张 中断处理流程图(从硬中断到软中断,再到 ksoftirqd)?这样可能更直观。