핵심 인사이트 (3줄 요약)
- 리눅스 커널(OS)의 TCP/IP 스택은 인터럽트(Interrupt)와 컨텍스트 스위칭(Context Switching)이라는 무거운 과정을 거치기 때문에, 100Gbps 시대의 초당 수천만 개 패킷을 감당하면 CPU가 터져버린다.
- 인텔이 만든 DPDK는 이 병목을 피하기 위해 **커널 우회(Kernel Bypass)**라는 과격한 방식을 쓴다. 랜카드로 들어온 패킷을 OS 커널에 주지 않고, 사용자(유저 모드) 프로그램이 메모리에서 직접 낚아채게(Polling) 만든다.
- 이를 통해 인터럽트와 상자 포장(sk_buff) 오버헤드가 '0'이 되어, 일반 x86 서버도 수억 원짜리 전용 하드웨어 라우터 부럽지 않은 극강의 패킷 처리량(Throughput)을 자랑하게 된다.
Ⅰ. 인터럽트(Interrupt) 지옥의 굴레
이더넷 케이블로 패킷이 들어올 때 전통적인 리눅스는 이렇게 반응합니다.
- 랜카드가 패킷을 받으면 CPU에 **인터럽트(찌릿!)**를 겁니다.
- CPU는 하던 연산을 멈추고, 커널 모드로 전환(Context Switch)하여 패킷을 메모리에 복사(sk_buff)합니다.
패킷이 초당 1,000만 개가 들어온다면? CPU는 1초에 1,000만 번 인터럽트를 맞고 기절합니다(Interrupt Storm). 이로 인해 리눅스는 10Gbps 대역폭도 온전히 처리하지 못하고 벌벌 기게 됩니다.
📢 섹션 요약 비유: 우편함에 편지가 올 때마다 우체부(랜카드)가 초인종(인터럽트)을 누릅니다. 주인이 하던 일 멈추고 현관문에 나가서 편지를 받아옵니다. 1초에 초인종이 1,000번 울리면 주인은 문 앞을 떠나지 못하고 아무 일도 못 합니다.
Ⅱ. DPDK의 마법: 커널 버리기와 폴링(Polling)
인텔은 "리눅스 커널은 네트워크에 소질이 없다. 싹 다 무시하자!"며 **DPDK (Data Plane Development Kit)**를 내놓았습니다. 앞 장에서 배운 UIO/VFIO(장치 직결 기술)와 거대 페이지(Huge Page) 기술을 영혼까지 끌어모은 프레임워크입니다.
DPDK의 3대 핵심 무기
- 커널 바이패스 (Kernel Bypass)
- 랜카드를 리눅스 커널에서 강제로 분리(Unbind)하여 유저 공간(User Space)의 내 프로그램과 다이렉트로 연결합니다. 패킷은 커널(OS)을 거치지 않고 내 프로그램의 메모리 버퍼(Huge Page)로 곧장 꽂힙니다.
- 폴링 모드 드라이버 (PMD, Polling Mode Driver)
- 초인종(인터럽트)을 뜯어버립니다. 대신 내 프로그램이 무한 루프(
while(true))를 돌며 우편함을 1나노초마다 들여다봅니다(Polling). 편지가 있으면 즉시 꺼내 옵니다. CPU 코어 1개를 100% 낭비하는 대가로, 응답 지연을 0에 가깝게 만듭니다.
- 초인종(인터럽트)을 뜯어버립니다. 대신 내 프로그램이 무한 루프(
- Zero-Copy (무복사) 및 거대 페이지(Huge Page)
- 커널 $\rightarrow$ 유저로 데이터를 복사(Copy)하는 짓을 안 합니다. 랜카드가 DMA로 쏜 메모리 주소를 내 프로그램이 바로 읽습니다.
처리 파이프라인 (ASCII)
[ 전통적 리눅스 네트워크 ] [ DPDK 네트워크 (커널 바이패스) ]
┌─ 유저 앱 ─────┐ ┌─ 유저 앱 (DPDK 포함) ────────┐
│ (느린 수신) │ ◀─복사─┐ │ 무한 루프 핑핑 돌며(Polling) │
└─────────────┘ │ │ 수신함 메모리 직접 감시 중! │
╔════════════════════════│═╗ └─▲──────────────────────────────┘
║ 리눅스 커널 (OS) │ ║ │ (직통 통신, Zero-copy)
║ [TCP/IP 스택] ──▶ [sk_buff]║ │
║ ▲ (인터럽트로 CPU 깨움) ║ │ (커널은 철저히 무시됨)
╚══│═══════════════════════╝ ══│══════════════════════════
│ │
[ 물리 랜카드 (NIC) ] [ 물리 랜카드 (NIC) ]
📢 섹션 요약 비유: 초인종을 없애고, 알바생 한 명(CPU 코어 1개)을 고용해서 우편함 문을 열어둔 채 눈 한 번 안 깜빡이고 우편함만 쳐다보게(Polling) 시켰습니다. 편지가 우편함에 닿기도 전에 낚아채서 처리하므로 빛의 속도를 냅니다.
Ⅲ. DPDK의 부작용과 위상
단점 (트레이드오프):
- CPU 100% 고정: 패킷이 오든 안 오든, 알바생은 우편함을 쳐다보느라 CPU 코어 하나를 항상 100% 점유합니다.
- TCP/IP 스택 부재: 커널을 버렸기 때문에 기본 제공되는 TCP/IP나 방화벽 기능이 없습니다. 개발자가 이 무거운 코드를 유저 모드에서 직접 다 짜거나 남이 만든 걸 얹어 써야 합니다(예: mTCP).
어디에 쓰는가? 이런 불편함에도 불구하고, 초당 수억 개의 패킷을 라우팅해야 하는 통신사 5G 기지국(NFV/VNF 인프라)이나 클라우드 데이터센터의 코어 라우터 장비들은 비싼 시스코 장비를 버리고 x86 서버 + DPDK 조합으로 천하를 통일했습니다. 극단의 스피드가 필요한 곳의 절대 반지입니다.