当在Linux x86_64内核3.16上处理网络数据包时,可以在不同的CPU内核上执行相同网络数据包的Hard和Soft-IRQ吗?
Hard-IRQ引发Soft-IRQ :http://she-devel.com/Chaiken_ELCE2016.pdf
软IRQ可以在提升它们的硬IRQ之后直接运行,或者在 以后在ksoftirqd。
RSS在与Hard-IRQ相同的CPU核心上引发 Soft-IRQ :http://balodeamit.blogspot.ru/2013/10/receive-side-scaling-and-receive-packet.html
如果是多队列(RSS),硬件中断将进行匹配 CPU处理器和那个处理器也将负责softIRQ 处理
如果没有RPS,Soft-IRQ在与Hard-IRQ相同的CPU-Core上进行处理,但使用RPS,Soft-IRQ在另一个CPU-Core上处理而不是Hard-IRQ < / strong>:http://balodeamit.blogspot.ru/2013/10/receive-side-scaling-and-receive-packet.html
在单声道的情况下,产生的硬件中断来自单个 队列和相同的CPU也可以处理softIRQ。如果是RPS 在单声道队列上启用,传入的数据包被散列,负载是 分布在多个CPU处理器上。
RPS在另一个CPU核心上引发Soft-IRQ而不是Hard-IRQ ,它增加了处理器间中断(IPI)的速率:https://en.wikipedia.org/wiki/Interrupt#Performance_issues
作为缺点,RPS增加了处理器间中断的速率 (的IPI)。
这是否意味着:
使用NIC-DMA将以太网适配器(NIC)复制数据包复制到套接字缓冲区(mbuf),然后在CPU Core-N上调用 Hard-IRQ
然后,这个Hard-IRQ的代码只是通过使用RPS调用 Soft-IRQ在不同的CPU Core-M上
在这个CPU Core-M上,Soft-IRQ使用内核空间中的TCP / IP堆栈处理此数据包
然后我们的应用程序使用read(,buf,)
从socket-buffer(mbuf)获取数据到 CPU Core-K 上的用户空间中的缓冲区
这是对的吗?
使用RPS时,同一网络数据包的Hard和Soft-IRQ可以在不同的核心上执行吗?