다음(매우 단순화된 송신 TCP 큐) 흐름을 가정해 보겠습니다.
-->[app (nginx)]
-->[send_buffer(tcp_wmem)]
-->(qdisc txqueuelen)
-->[ring buffer(tx_rx)]
-->(dma)
-->[nic]
~을 위한링 버퍼 보내기드라이버 스크립트를 사용하여 선호도와 해당 대기열이 CPU/코어별로 분할되도록 할 수 있습니다.
~을 위한송신 대기열 규율나는 사용할 수 fq_codel
있습니다애플리케이션(예: nginx)또한 몇 가지 방법(예: cpu_worker_affinity)도 있습니다.
하지만 애플리케이션이 다음에서 실행되는지 어떻게 확인하나요?CPU/코어X네트워크 스트림(send_buffer)과 동일한 CPU/코어에서 실행됩니까?
요약하자면, 애플리케이션은 항상 TCP 전송 버퍼(고정된 경우)와 동일한 CPU/코어에서 실행됩니까? (그렇다면 리눅스는 어떻게 이것을 하는가?)
감사해요
답변1
고객님께서 찾으시는 키워드는XPS: 전송 패킷 부팅. 귀하의 질문에 답할 수 있도록 업스트림에 잘 문서화되어 있습니다.