是什么使得softirq如此特别,以至于我们将它用于高频率使用,就像networking驱动程序和块驱动程序一样。
SoftIrqs通常用于完成已处理中断的排队工作,因为它们非常适合这种需求 – 它们以第二高的优先级运行,但仍然在启用硬件中断的情况下运行。
处理hw中断是最重要的,因为如果处理不快,则会引入过高的延迟,并且用户体验受到影响,或者在中断服务设备之前硬件缓冲区将填满,数据丢失。 不要服务一个网络适配器足够快? 它会覆盖FIFO中的数据,你会丢失数据包。 不要足够快地服务硬盘? 硬盘驱动器阻止排队的读取请求,因为它没有任何结果。
SoftIrqs允许服务硬件中断的关键部分尽可能短; 而不必现场处理整个hw中断,重要的数据从设备读取到RAM或其他,然后一个SoftIrq开始完成工作。 这使硬件中断在最短的时间内被禁止,同时仍然以高优先级完成工作。
这篇文章是关于这个问题的一个体面的参考: https : //lwn.net/Articles/520076/
编辑问题:
SoftIrqs是可重入的 – 它们可以在任何CPU上处理。 从我链接的文章:
软件中断有两个地方可以“触发”并抢占当前线程。 其中之一是处理硬件中断的最后阶段; 中断处理程序通常会调用softirqs,因此, 只要硬件中断可以重新启用 ,就有必要对其进行处理(对于延迟和最佳缓存使用)
重点补充。 它们可以在线处理 – 我相信这意味着它们可以在不引起上下文切换的情况下进行处理,这意味着一旦启用了硬件中断,我们就可以直接跳到SoftIrq右侧,尽可能少地滥用CPU缓存。 所有这些都有助于SoftIrqs轻巧但灵活,这使得它们成为高频处理的理想选择。