Vamos supor o seguinte fluxo (enfileiramento tcp de saída muito simplificado):
-->[app (nginx)]
-->[send_buffer(tcp_wmem)]
-->(qdisc txqueuelen)
-->[ring buffer(tx_rx)]
-->(dma)
-->[nic]
Para o tx ring buffer , posso usar o script do driver para garantir que a afinidade e suas várias filas sejam divididas por cpu/core.
Para o qdisc de saída , posso usar o fq_codel
e para um aplicativo (como o nginx) , também tenho algumas maneiras (por exemplo: cpu_worker_affinity).
Mas como posso ter certeza de que uma aplicação rodando em uma CPU/núcleo X está na mesma CPU/núcleo que seu fluxo de rede (send_buffer) está rodando?
Para resumir, um aplicativo sempre é executado (quando pinado) na mesma CPU/núcleo que seu buffer de envio tcp? (se sim, como o linux faz isso?)
Obrigado
A palavra-chave que você está procurando é XPS: Transmit Packet Steering . Upstream bem documentado, isso deve responder às suas perguntas.