让我们假设以下(非常简化的出口 tcp 排队)流程:
-->[app (nginx)]
-->[send_buffer(tcp_wmem)]
-->(qdisc txqueuelen)
-->[ring buffer(tx_rx)]
-->(dma)
-->[nic]
对于tx 环形缓冲区,我可以使用驱动程序脚本来确保关联性及其多个队列由 cpu/core 拆分。
对于出口 qdisc,我可以将fq_codel
and 用于应用程序(如 nginx),我也有一些方法(即:cpu_worker_affinity)。
但是我如何确保在CPU/core X上运行的应用程序与其网络流(send_buffer)运行在同一个 CPU/core 中?
总而言之,应用程序是否总是在与其 tcp 发送缓冲区相同的 CPU/内核中运行(当 pined 时)?(如果是,linux是如何做到的?)
谢谢
您要查找的关键字是XPS:Transmit Packet Steering。上游有据可查,这应该可以回答您的问题。