是什么让softirq如此特殊,以至于我们将其用于高频应用,比如在网络驱动程序和块驱动程序中。
发布于 2014-01-03 01:23:43
SoftIrqs通常用于完成已处理中断中的排队工作,因为它们非常适合需要-它们以第二高优先级运行,但仍在启用硬件中断的情况下运行。
处理hw中断是最高优先级,因为如果不能快速处理它们,那么将引入过高的延迟并影响用户体验,或者在中断服务于设备之前硬件缓冲器将被填满,并且数据丢失。维修网络适配器的速度还不够快?它将覆盖fifo中的数据,您将丢失数据包。维修硬盘还不够快吗?硬盘停止排队的读请求,因为它没有地方放置结果。
SoftIrqs允许服务硬件中断的关键部分尽可能短;不需要在现场处理整个硬件中断,而是将重要数据从器件读入随机存取存储器或其他方式,然后启动SoftIrq以完成工作。这样可以在最短的时间内禁用硬件中断,同时仍能以高优先级完成工作。
这篇文章是关于这个问题的一个很好的参考:https://lwn.net/Articles/520076/
问题编辑:
SoftIrqs是可重入的--它们可以在任何cpu上处理。来自我链接的文章:
在两个地方,软件中断可以“触发”并抢占当前线程。其中之一是在硬件中断的处理结束时;中断处理程序通常会引发软中断,因此在可以重新启用硬件中断时立即处理它们(对于延迟和最佳缓存使用)是有意义的。
增加了重点。它们可以被内联处理-我相信这意味着它们可以在不引起上下文切换的情况下被处理,这意味着一旦启用了硬件中断,我们就可以直接跳到SoftIrq上,尽可能少地滥用CPU缓存。所有这些都有助于SoftIrqs变得轻量级但灵活,这使它们成为高频处理的理想选择。
如果需要,可以将它们推送到另一个CPU,这提高了throughput.
https://stackoverflow.com/questions/20887918
复制相似问题