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

标签 linux networking linux-kernel x86 interrupt

在 Linux x86_64 内核 3.16 上处理网络数据包时,可以在不同的 CPU 内核上执行相同网络数据包的硬和软 IRQ 吗?

  • 硬 IRQ 引发软 IRQ :http://she-devel.com/Chaiken_ELCE2016.pdf

    Soft IRQs may run directly after the hard IRQ that raises them, or at a later time in ksoftirqd.


  • RSS 提现 在与硬 IRQ 相同的 CPU 内核上的软 IRQ :http://balodeamit.blogspot.ru/2013/10/receive-side-scaling-and-receive-packet.html

    In case of multi queues (RSS), hardware interrupt will go to matching CPU processor, and that processor will also be responsible for softIRQ processing.


  • 在单队列的情况下,没有 RPS,软 IRQ 在与硬 IRQ 相同的 CPU 核心上处理,但是 使用 RPS,软 IRQ 在另一个 CPU 核心上处理而不是硬 IRQ :http://balodeamit.blogspot.ru/2013/10/receive-side-scaling-and-receive-packet.html

    In case of monoqueues, the hardware interrupt generated is from single queue and same CPU is also responisble for processing softIRQ. If RPS is enabled on mono queue, the incoming packets are hashed, load is distributed across multiple CPU processors.


  • RPS 在其他 CPU 核心上引发 Soft-IRQ 而不是 Hard-IRQ 它增加了处理器间中断 (IPI) 的速率:https://en.wikipedia.org/wiki/Interrupt#Performance_issues

    As a downside, RPS increases the rate of inter-processor interrupts (IPIs).



  • 是否意味着:
  • 以太网适配器 (NIC) 使用 NIC-DMA 将数据包复制到套接字缓冲区 (mbuf),然后 NIC 调用 CPU Core-N 上的硬 IRQ
  • 然后这个 Hard-IRQ 的代码无非是调用 不同 CPU Core-M 上的 Soft-IRQ 通过使用 RPS
  • 在此 CPU Core-M 上,Soft-IRQ 使用内核空间中的 TCP/IP 堆栈处理此数据包
  • 然后我们的应用程序使用 read(,buf,) 上将数据从套接字缓冲区 (mbuf) 获取到用户空间中的缓冲区CPU Core-K

  • 那是对的吗?
    使用 RPS 时,可以在不同的内核上执行相同网络数据包的硬和软 IRQ 吗?

    最佳答案

    我试着解释我的理解,但是,可能不正确。请帮助纠正我的答案。
    首先,RPS 和 RSS 的工作原理是一样的,即通过哈希将 irq/packet 映射到特定的 CPU 内核,例如 4 元组、V(X)LAN 标签等。不同之处在于 RPS 是在软件上实现的,而RSS 是在硬件上实现的,即网卡。
    所以这个博客( http://balodeamit.blogspot.ru/2013/10/receive-side-scaling-and-receive-packet.html )中的 claim 可能是与自身的契约。
    其次,RFS 和 aRFS 也执行 CPU 控制。它们将 irq/packet 映射到与上层应用程序相同的核心以实现亲和性,例如,由相同的 NUMA 节点处理。 aRFS 是 RFS 的硬件版本。你可以引用这篇论文( https://dl.acm.org/doi/abs/10.1145/3452296.3472888 )了解更多细节。
    最后,硬和软 irq 可以映射到相同的 CPU 内核,但是具有不同的控制机制,例如 RPS/RSS 和 RFS/aRFS。

    关于linux - 可以在不同的 CPU 内核上执行相同网络数据包的硬和软 IRQ 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45066524/

    相关文章:

    python - ImportError :/lib64/libc. so.6:导入tensorflow后找不到版本 `GLIBC_2.15'

    linux - 我怎么知道哪些文件被 linux 机器中的特定进程修改了?

    Ruby 3.0.0 似乎不使用 jemalloc

    python - 我的 pygame 游戏中出现 "TypeError: integer argument expected, got float"的原因是什么?

    android - 在 Android 中使用 3G 和 Wifi 检查互联网连接

    android - 更改网络时接收 NETWORK_STATE_CHANGED_ACTION 已连接

    linux-kernel - 如何从内核向用户空间发送信号

    c - 从用户空间到内核空间的指针为空

    android - 是否可以在我的设备和桌面之间模拟网络?

    linux-kernel - 如何在Ubuntu 20.04上编译BCC?