如何确定应用程序与其 TCP 发送流在同一 CPU/核心上运行?

如何确定应用程序与其 TCP 发送流在同一 CPU/核心上运行?

让我们假设以下(非常简化的出口 tcp 队列)流程:

 -->[app (nginx)]
 -->[send_buffer(tcp_wmem)]
 -->(qdisc txqueuelen)
 -->[ring buffer(tx_rx)]
 -->(dma)
 -->[nic]

为了发送环形缓冲区我可以使用驱动程序脚本来确保关联性及其多个队列按 cpu/core 进行分割。

为了出口队列规则我可以使用fq_codel和 for一个应用程序(如 nginx)我也有一些方法(即:cpu_worker_affinity)。

但是我如何确保应用程序运行在CPU/核心X与网络流 (send_buffer) 运行在同一个 CPU/核心中吗?

总而言之,应用程序是否始终在与其 tcp 发送缓冲区相同的 CPU/内核中运行(固定时)? (如果是的话,linux是如何做到这一点的?)

谢谢

答案1

您要查找的关键字是XPS:传输数据包引导。上游有详细记录,这应该可以回答您的问题。

相关内容