DPDK 25.11 · RX QUEUE · MBUF · NUMA

DPDK NUMA: NIC·수신 큐·패킷 풀·실행 코어를 맞춥니다

RX ring의 배치만 바꿔서는 패킷 버퍼와 처리 스레드가 함께 이동하지 않습니다.

네 가지 위치를 따로 확인합니다

DPDK 25.11 문서를 기준으로 NIC의 NUMA 위치, RX descriptor ring, mbuf pool, 패킷을 처리하는 lcore를 나눕니다. rte_eth_dev_socket_id의 -1은 위치 미확인 또는 잘못된 port를 나타낼 수 있습니다. rte_errno와 장치 정보를 확인해야 하며 -1을 node 0으로 읽지 않습니다.

25.11 ethdev API

큐 설정은 기존 패킷 풀을 옮기지 않습니다

단일 풀 수신 구성의 rte_eth_rx_queue_setup에서 socket_id는 RX descriptor 메모리의 배치 조건입니다. mb_pool은 별도로 만든 패킷 버퍼 풀입니다. rte_pktmbuf_pool_create의 socket_id로 풀의 메모리 배치를 정합니다. BUFFER_SPLIT을 쓰는 다중 segment 구성은 별도 rx_seg 조건을 확인해야 하므로 단일 풀 그림에 섞지 않습니다.

분기와 관측 지점을 나눈 자체 개념도
  1. 장치: NIC가 연결된 NUMA node 확인

  2. 메모리: RX descriptor의 socket_id와 mbuf pool의 socket_id를 각각 확인

  3. 실행: 큐를 poll하는 lcore의 CPU affinity와 node 확인

25.11 mbuf pool 생성

lcore 번호와 OS CPU 번호도 구분합니다

rte_lcore_to_socket_id는 lcore와 socket의 관계를 제공합니다. EAL의 lcore 매핑과 스레드 affinity도 함께 확인합니다. 한 큐를 여러 코어가 무조건 안전하게 poll한다고 가정하지 말고 PMD의 큐 소유·동시 접근 조건을 따릅니다. 다른 node로 패킷을 넘기는 pipeline이라면 다음 소비자의 접근도 포함해야 합니다.

25.11 lcore와 socket

PMD 처리 모델과 NUMA

배치를 맞췄다고 성능이 검증된 것은 아닙니다

같은 NIC·PMD·패킷 크기·큐 수·burst·offload 조건에서 처리량, drop, 지연 분포를 비교합니다. 원격 배치가 성능에 영향을 줄 수 있지만 모든 패킷이 매번 원격 DRAM을 읽는다는 뜻은 아닙니다. CPU cache와 실제 데이터 경로를 확인해야 합니다. 이 글은 실기 DPDK 시험 결과나 고정 배수의 향상 보장이 아닙니다.

주제 출발점: Branimir Rajtar의 NUMA 글