Let's suppose the following (very simplified egress tcp queuing) flow:

 -->[app (nginx)]
 -->(qdisc txqueuelen)
 -->[ring buffer(tx_rx)]

For the tx ring buffer I can use the driver script to ensure that the affinity and its multiple queues are split by cpu/core.

For the egress qdisc I can use the fq_codel and for an application (like nginx) I do have some ways too (ie: cpu_worker_affinity).

But how I can make sure that an application running on a CPU/core X is in the same CPU/core that its network flow (send_buffer) is running?

To sum up, does an application always run (when pined) in the same CPU/core as its tcp send buffer is? (if yes, how does the linux does this?)



The keyword you're looking for is XPS: Transmit Packet Steering. Well documented upstream, this should answer your questions.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.