NIC 패킷을 host memory에 복사한 뒤 다시 GPU로 옮기는 ML 네트워크 경로의 낭비를 줄이기 위해, Linux kernel stack을 유지하면서 device memory TCP를 구현한 과정을 설명한다. host round trip이 CPU·메모리 대역폭 병목이 되는 지점에서 출발한다.
핵심 포인트- 일반 zero-copy는 user-kernel copy만 줄일 뿐 NIC가 패킷을 host buffer로 옮기는 DMA는 남고, NIC 메모리는 CPU가 바로 접근 못 하고 ownership·lifetime 관리도 필요해 단순 pointer 전달로 끝나지 않음
- DPDK·RDMA 같은 kernel bypass는 성능은 높지만 application이 L2-L4 protocol·재전송을 책임지고 traffic control·firewall·observability를 잃어, 목표를 'kernel TCP 기능은 유지하며 payload만 GPU로 직접 받기'로 설정
- Linux driver가 SKB로 메타데이터·fragment를 구성하고 page pool로 buffer를 재사용하는 흐름에서, fragment가 host page 대신 GPU DMA buffer를 가리키게 하고 header·protocol은 kernel이 처리하며 buffer recycle이 GPU 메모리 lifetime을 침범 않도록 ownership 연결
- application은 recvmsg control message에서 GPU buffer offset·length를 읽어 copy 없이 device memory를 사용하고, GPU virtual address와 NIC DMA address mapping·IOMMU·error path는 driver가 처리 — UDP 지원과 하드웨어 호환성이 후속 과제
왜 읽나kernel bypass의 기능 손실 없이 NIC-GPU 데이터 경로의 copy를 없애려는, Linux 네트워크 스택과 GPU DMA를 다루는 커널·인프라 엔지니어에게.