Let's suppose the following (very simplified egress tcp queuing) flow:
-->[app (nginx)] -->[send_buffer(tcp_wmem)] -->(qdisc txqueuelen) -->[ring buffer(tx_rx)] -->(dma) -->[nic]
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?)