是什么使softirq如此特别,以至于我们将其用于高频用途,例如在网络驱动程序和块驱动程序中。
最佳答案
SoftIrq通常用于从已处理的中断中完成排队的工作,因为它们非常适合需要-它们以第二高的优先级运行,但仍在启用了硬件中断的情况下运行。
处理硬件中断是最高优先级,因为如果不快速处理它们,将会引入过高的延迟,并给用户带来痛苦,或者在中断为设备提供服务之前,硬件缓冲区将被填满,并且数据会丢失。服务网络适配器的速度不够快?它将覆盖fifo中的数据,并且您将丢失数据包。服务硬盘的速度不够快?硬盘驱动器使排队的读取请求停顿,因为它无处放置结果。
SoftIrq使服务硬件中断的关键部分尽可能短。不必现场处理整个硬件中断,而是将重要数据从设备读入RAM或其他方式,然后启动SoftIrq完成工作。这样可以使硬件中断在最短的时间内保持禁用状态,同时仍然以较高的优先级完成工作。
本文是对此事的体面引用:
https://lwn.net/Articles/520076/
编辑问题:
SoftIrq是可重入的-可以在任何CPU上对其进行处理。从我链接的文章中:
重点已添加。它们可以内联处理-我相信这意味着可以在不引起上下文切换的情况下对其进行处理,这意味着,一旦启用了硬件中断,我们就可以直接跳到SoftIrq处,从而尽可能减少CPU缓存滥用。所有这些都有助于使SoftIrq轻巧而灵活,使其成为高频处理的理想选择。