13. 제로카피(zero-copy) I/O: read/write 의 복사 경로와 sendfile·mmap·splice·io_uring

난이도 중 해설 보기 →
문제

문제 13 — 제로카피(zero-copy) I/O: read/write 의 복사 경로와 sendfile·mmap·splice·io_uring

게임 서버가 대용량 데이터(맵 청크·패치 파일·리플레이·대규모 브로드캐스트)를 소켓/디스크로 나를 때, 전통적 read()+write() 경로의 복사·컨텍스트 스위치 비용이 처리량을 깎는다. 다음을 설명하라.

  1. 전통 경로의 복사·스위치 — 파일을 소켓으로 보낼 때 read(file, buf)write(socket, buf) 가 일으키는 데이터 복사 횟수유저↔커널 컨텍스트 스위치 횟수를 단계별로 세어라(디스크 → 페이지 캐시 → 유저 버퍼 → 소켓 버퍼 → NIC). 어디가 낭비인가?

  2. 제로카피의 의미 — "zero-copy" 가 정확히 무엇을 없애는지(유저 공간 왕복 복사, CPU 가 관여하는 복사) 설명하라. sendfile() 이 이 경로를 어떻게 줄이는지, DMA·scatter-gather 로 CPU 복사를 얼마나 제거하는지 논하라.

  3. mmap 기반 전송mmap+write 가 유저 버퍼 복사를 어떻게 페이지 캐시 매핑으로 대체하는지, 그리고 그 대가(페이지 폴트, TLB, 파일이 잘릴 때 SIGBUS, 작은 전송엔 비효율)를 설명하라. mmapsendfile 과 언제 다르게 선택하는가?

  4. splice / vmsplice / io_uringsplice() 가 파이프를 매개로 커널 내부에서 두 FD 사이를 옮기는 원리, 그리고 io_uring시스템콜 자체를 배치·비동기화해 스위치를 줄이는(제출/완료 큐) 접근을 설명하라. 이들이 sendfile 로는 안 되는 무엇을 가능케 하는가(소켓→소켓, 변환 삽입 등)?

  5. 게임 서버에서의 적용과 한계 — (a) 정적 패치/맵 파일 배포 vs (b) 실시간 스냅샷 브로드캐스트에서 제로카피가 이득인 경우와 아닌 경우를 구분하라. 데이터를 암호화(TLS)·압축·직렬화 해야 하면 왜 순수 제로카피가 깨지는지(커널 TLS/kTLS 로 일부 회복), 작은 패킷 다수(틱 패킷)에선 왜 이득이 적은지(고정 오버헤드·Nagle·GSO), 그리고 유저공간 버퍼 풀·writev(scatter-gather)·MSG_ZEROCOPY 로 얻는 절충을 논하라.

답안 작성
내 답안 · 자동 저장

직접 답을 작성한 뒤, 위 해설 보기에서 모범답안과 대조하세요.