首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么softirq用于高线程和高频率的使用?

为什么softirq用于高线程和高频率的使用?
EN

Stack Overflow用户
提问于 2014-01-03 01:07:45
回答 1查看 23.6K关注 0票数 14

是什么让softirq如此特殊,以至于我们将其用于高频应用,比如在网络驱动程序和块驱动程序中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-03 01:23:43

SoftIrqs通常用于完成已处理中断中的排队工作,因为它们非常适合需要-它们以第二高优先级运行,但仍在启用硬件中断的情况下运行。

处理hw中断是最高优先级,因为如果不能快速处理它们,那么将引入过高的延迟并影响用户体验,或者在中断服务于设备之前硬件缓冲器将被填满,并且数据丢失。维修网络适配器的速度还不够快?它将覆盖fifo中的数据,您将丢失数据包。维修硬盘还不够快吗?硬盘停止排队的读请求,因为它没有地方放置结果。

SoftIrqs允许服务硬件中断的关键部分尽可能短;不需要在现场处理整个硬件中断,而是将重要数据从器件读入随机存取存储器或其他方式,然后启动SoftIrq以完成工作。这样可以在最短的时间内禁用硬件中断,同时仍能以高优先级完成工作。

这篇文章是关于这个问题的一个很好的参考:https://lwn.net/Articles/520076/

问题编辑:

SoftIrqs是可重入的--它们可以在任何cpu上处理。来自我链接的文章:

在两个地方,软件中断可以“触发”并抢占当前线程。其中之一是在硬件中断的处理结束时;中断处理程序通常会引发软中断,因此在可以重新启用硬件中断时立即处理它们(对于延迟和最佳缓存使用)是有意义的。

增加了重点。它们可以被内联处理-我相信这意味着它们可以在不引起上下文切换的情况下被处理,这意味着一旦启用了硬件中断,我们就可以直接跳到SoftIrq上,尽可能少地滥用CPU缓存。所有这些都有助于SoftIrqs变得轻量级但灵活,这使它们成为高频处理的理想选择。

如果需要,可以将它们推送到另一个CPU,这提高了throughput.

  • They可以在当前上下文中启用hwint后立即处理,尽可能地保留处理器状态,改善延迟

  • 它们允许硬件中断继续处理,因为这些是我们最重要的目标

  • 如果负载太高,我们需要从正常用户进程中占用时间,则可以将它们重新调度到ksoftirqd进程。
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20887918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档