首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不同的CPU核心上可以执行相同网络数据包的硬和软IRQ吗?

在不同的CPU核心上可以执行相同网络数据包的硬和软IRQ吗?
EN

Stack Overflow用户
提问于 2017-07-12 19:59:54
回答 1查看 1.6K关注 0票数 6

当网络数据包在Linux x86_64内核3.16上被处理时,同一网络包是否可以在不同的CPU核心上执行硬的和软的IRQ?

  • 硬IRQ提出软IRQELCE2016.pdf 软IRQ可以在硬IRQ之后直接运行,也可以在稍后的ksoftirqd中运行。
  • RSS在与硬IRQ:http://balodeamit.blogspot.ru/2013/10/receive-side-scaling-and-receive-packet.html相同的CPU核上提出软IRQ。 在出现多队列(RSS)的情况下,硬件中断将转到匹配的CPU处理器,并且该处理器还将负责softIRQ处理。
  • 在单队列情况下,在没有RPS的情况下,软IRQ处理在与硬IRQ相同的CPU-Core上,但是与RPS一起处理的软IRQ处理在另一个CPU-Core上,而不是硬IRQ:http://balodeamit.blogspot.ru/2013/10/receive-side-scaling-and-receive-packet.html 在单队列情况下,硬件中断是从单个队列产生的,同样的CPU也响应于softIRQ的处理。如果在单队列上启用RPS,则对传入的数据包进行散列处理,在多个CPU处理器之间分配负载。
  • RPS在另一个CPU核上比硬IRQ提高软IRQ,并且它提高了处理器间中断(IPIs):issues的速率。 作为一个缺点,RPS增加了处理器间中断(IPI)的速率.

这是否意味着:

  • 以太网适配器(网卡)使用NIC-DMA将数据包复制到套接字缓冲区(mbuf),然后网卡在CPU核心-N上调用硬-IRQ。
  • 然后,这个硬IRQ的代码只会使用RPS在不同的CPU核心-m上调用软IRQ。
  • 在此CPU核心-m上,软IRQ在内核空间中使用TCP/IP堆栈处理该数据包。
  • 然后,我们的应用程序通过使用read(,buf,)将数据从套接字缓冲区(mbuf)获取到CPU核心-K上的用户空间中的缓冲区。

对吗?

当使用RPS时,可以在不同的核心上执行相同网络数据包的硬和软IRQ吗?

EN

回答 1

Stack Overflow用户

发布于 2021-09-24 08:36:14

我试着解释我的理解,然而,也许不正确。请帮助纠正我的答案。

首先,RPS和RSS一样工作,即通过散列将irq/packet映射到特定的CPU核心,例如4元组、V(X)LAN标记等,区别在于RPS是在软件上实现的,而RSS是在硬件上实现的,即NIC。因此,这个博客(http://balodeamit.blogspot.ru/2013/10/receive-side-scaling-and-receive-packet.html)中的声明可能是与自己签订的合同。

其次,RFS和aRFS还执行CPU指导。它们将irq/数据包映射到与上层应用程序相同的核心,以实现亲和力,例如,由同一个NUMA节点处理。aRFS是射频识别系统的硬件版本。有关更多细节,您可以参考本文(https://dl.acm.org/doi/abs/10.1145/3452296.3472888)。

在让步中,硬和软irq可以映射到相同的CPU核心,但是,具有不同的指导机制,例如RPS/RSS和RFS/aRFS。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45066524

复制
相关文章

相似问题

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