gpt4 book ai didi

linux - 为什么 softirq 用于高度线程化和高频使用?

转载 作者:IT王子 更新时间:2023-10-29 00:42:42 30 4
gpt4 key购买 nike

是什么让 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 轻巧而灵活,这使它们成为高频处理的理想选择。

  • 如果需要,可以将它们推送到另一个 CPU,从而提高吞吐量。
  • 它们可以在当前上下文中启用 hwints 后立即处理,尽可能保留处理器状态,改善延迟
  • 它们允许硬件中断继续处理,因为这是我们最重要的目标
  • 如果负载过高并且我们需要从正常用户进程中抽出时间,它们可以重新安排到 ksoftirqd 进程。

关于linux - 为什么 softirq 用于高度线程化和高频使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20887918/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com