- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
是什么让 softirq 如此特别,以至于我们将它用于高频用途,例如网络驱动程序和 block 驱动程序。
最佳答案
SoftIrqs 通常用于完成已处理中断的排队工作,因为它们非常适合这种需要——它们以第二高的优先级运行,但仍然在启用硬件中断的情况下运行。
处理硬件中断是重中之重,因为如果不快速处理它们,就会引入过高的延迟并影响用户体验,或者硬件缓冲区会在中断服务设备之前填满,从而导致数据丢失.服务网络适配器的速度不够快?它会覆盖 fifo 中的数据,你会丢失数据包。维修硬盘的速度不够快?硬盘驱动器停止排队读取请求,因为它无处放置结果。
SoftIrqs 允许服务硬件中断的关键部分尽可能短;不必当场处理整个硬件中断,而是将重要数据从设备读取到 RAM 或其他地方,然后启动 SoftIrq 来完成工作。这样可以在最短时间内禁用硬件中断,同时仍然以高优先级完成工作。
这篇文章是对此事的一个不错的引用: https://lwn.net/Articles/520076/
问题编辑:
SoftIrq 是可重入的——它们可以在任何 CPU 上处理。从我链接的文章中:
There are two places where software interrupts can "fire" and preempt the current thread. One of them is at the end of the processing for a hardware interrupt; it is common for interrupt handlers to raise softirqs, so it makes sense (for latency and optimal cache use) to process them as soon as hardware interrupts can be re-enabled
添加了强调。它们可以内联处理——我相信这意味着它们可以在不引起上下文切换的情况下进行处理,这意味着一旦启用了硬件中断,我们就可以直接跳转到 SoftIrq,尽可能少地滥用 CPU 缓存。所有这些都有助于 SoftIrq 轻巧而灵活,这使它们成为高频处理的理想选择。
关于linux - 为什么 softirq 用于高度线程化和高频使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20887918/
我是一名优秀的程序员,十分优秀!