A palavra-chave que você está procurando é XPS: Transmit Packet Steering . Bem documentado, isso deve responder às suas perguntas.
Vamos supor o seguinte fluxo (muito simplificado do e-mail tcp):
-->[app (nginx)]
-->[send_buffer(tcp_wmem)]
-->(qdisc txqueuelen)
-->[ring buffer(tx_rx)]
-->(dma)
-->[nic]
Para o tx ring buffer , posso usar o script de driver para garantir que a afinidade e suas várias filas sejam divididas por cpu / core.
Para o egresso qdisc , posso usar o fq_codel
e, para , um aplicativo (como o nginx) também tenho algumas formas (exemplo: cpu_worker_affinity). p>
Mas como eu posso ter certeza de que um aplicativo rodando em uma CPU / core 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 . Bem documentado, isso deve responder às suas perguntas.
Tags networking tcp linux-kernel