RDMA로 이해하는 원격 메모리 직접 접근과 네트워크 I/O
RDMA의 제로 카피와 커널 바이패스 구조, 동작 모드와 InfiniBand·RoCE·iWARP 프로토콜, 운영상 제약을 정리한다.
2026-08-14 · 최초 발행 2026-01-06
소켓 I/O 경로를 줄이는 RDMA
RDMA(Remote Direct Memory Access)는 원격 컴퓨터의 메모리에 CPU와 운영체제의 개입 없이 직접 접근하는 네트워크 통신 기술이다. 전통적인 소켓 통신에서 발생하는 다중 복사와 커널 개입을 줄여 마이크로초 단위의 초저지연과 높은 대역폭을 제공한다. 데이터센터와 고성능 컴퓨팅 환경에서 이 기술이 기반 인프라로 쓰이는 이유도 여기에 있다.
핵심은 데이터 경로에 있다. 커널 버퍼를 거치지 않는 제로 카피, 운영체제를 우회하는 커널 바이패스, 전송 처리에서 CPU를 덜 쓰도록 하는 오프로드가 함께 작동한다. RDMA의 레이턴시는 1-2 마이크로초 수준이다.
일반적인 TCP/IP 소켓 통신은 다음과 같은 복사 단계를 거친다.
TCP/IP 소켓 통신:
(1) 애플리케이션 버퍼 → 커널 소켓 버퍼 (복사 1)
(2) 소켓 버퍼 → NIC 버퍼 (복사 2)
(3) 수신 측: NIC → 커널 버퍼 → 애플리케이션 (복사 3, 4)
문제:
- 다중 데이터 복사 오버헤드
- 시스템 콜 및 컨텍스트 스위칭
- CPU 사이클 낭비
- 높은 지연 시간 (수십~수백 μs)
RDMA는 애플리케이션 메모리와 RDMA NIC 사이의 직접 경로를 사용해 이 과정을 바꾼다.
메모리 등록과 Queue Pair가 만드는 실행 경로
RDMA를 쓰려면 먼저 DMA가 가능한 물리 메모리를 고정해야 한다. 이 등록된 영역은 MR(Memory Region)이며, 원격 접근 권한을 관리하는 키가 생성된다. 페이지를 고정하는 이유는 스와핑을 막기 위해서다.
작업은 Queue Pair(QP)를 중심으로 처리한다. 송신 큐는 송신 작업 요청인 WQE를 저장하고, 수신 큐는 수신 버퍼를 준비한다. 완료 큐는 작업 완료를 통지하며, 연결마다 독립적인 QP가 구성된다.
애플리케이션은 WQE를 만들고 QP에 게시한다. RDMA NIC가 이를 처리해 원격 메모리를 직접 읽거나 쓴 뒤, CQE를 생성한다. 애플리케이션은 폴링 또는 이벤트 방식으로 완료를 확인한다.
원격 메모리에 접근하는 방식
RDMA Write는 로컬 메모리에서 원격 메모리로 데이터를 단방향 전송한다. 수신 측 CPU와 운영체제가 개입하지 않으며, 가장 빠른 RDMA 연산으로 데이터 푸시, 로깅, 복제에 사용된다.
RDMA Read는 원격 메모리에서 로컬 메모리로 데이터를 가져오는 풀 방식이다. 필요한 시점에 원격 데이터를 가져오며, 원격 CPU는 이 동작에 관여하지 않는다. 분산 공유 메모리와 캐시 페칭이 대표적인 용도다.
Send/Recv는 송신과 수신 양쪽이 버퍼를 준비하는 방식이다. 수신 측은 Receive WQE를 미리 준비해야 하고, 명시적인 메시지 교환이 필요할 때 적합하다. RPC와 제어 메시지가 여기에 해당한다.
Atomic은 Compare-and-Swap, Fetch-and-Add 같은 원자적 연산을 네트워크에서 보장한다. 분산 락과 카운터, 분산 자료구조 및 동기화 프리미티브에 쓰인다.
패브릭과 이더넷에서 선택하는 RDMA 프로토콜
InfiniBand는 처음부터 RDMA를 목적으로 설계된 전용 네트워크다. 100-200 Gbps 대역폭과 <1 μs 레이턴시를 제공하며, QoS, 멀티캐스트, 서브넷 관리 기능을 갖춘다. HPC와 AI 클러스터에 적용된다.
RoCE(RDMA over Converged Ethernet)는 기존 이더넷 인프라를 활용한다. RoCEv1은 같은 서브넷에서 동작하는 링크 레벨 프로토콜이고, RoCEv2는 IP 기반이라 라우팅할 수 있다. 표준 이더넷 스위치를 쓸 수 있어 데이터센터와 스토리지 네트워크에서 비용 효율적인 선택지가 된다.
iWARP(Internet Wide Area RDMA Protocol)는 TCP/IP 스택을 기반으로 하며, 라우팅과 방화벽 통과를 지원한다. 기존 TCP/IP 인프라와 호환되지만 RoCE와 InfiniBand보다 지연이 약간 높다. 지리적으로 분산된 시스템에 적용할 수 있다.
특성 InfiniBand RoCEv2 iWARP
------------------------------------------------------------
레이어 전용 UDP/IP TCP/IP
지연 최저 (<1μs) 낮음 (~2μs) 중간 (~5μs)
대역폭 최고 높음 높음
라우팅 서브넷 IP 라우팅 IP 라우팅
호환성 전용 이더넷 TCP/IP
비용 높음 중간 중간
적용 HPC 데이터센터 WAN
Verbs API와 상위 라이브러리
Verbs API는 OpenFabrics Alliance가 정의한 표준 인터페이스다. ibv_post_send, ibv_post_recv, ibv_poll_cq 같은 함수를 통해 하드웨어를 직접 다루며, 최소 오버헤드를 중시하는 저수준 API다.
일반적인 Verbs 프로그래밍은 디바이스와 Protection Domain을 만들고, 메모리와 Completion Queue, Queue Pair를 차례로 준비한 뒤 QP 상태를 전이시키는 순서로 진행된다.
(1) 디바이스 열기: ibv_open_device()
(2) Protection Domain 생성: ibv_alloc_pd()
(3) 메모리 등록: ibv_reg_mr()
(4) Completion Queue 생성: ibv_create_cq()
(5) Queue Pair 생성: ibv_create_qp()
(6) QP 상태 전이: ibv_modify_qp() (RESET → INIT → RTR → RTS)
(7) 작업 포스트: ibv_post_send/recv()
(8) 완료 폴링: ibv_poll_cq()
직접적인 Verbs 제어가 부담스러운 환경에서는 libfabric, UCX(Unified Communication X), gRPC-RDMA, NCCL 같은 상위 라이브러리를 사용할 수 있다. libfabric은 통합 패브릭 인터페이스를 제공하고, UCX는 MPI 백엔드로 쓰인다. gRPC-RDMA는 RPC 프레임워크의 RDMA 지원에, NCCL은 NVIDIA 집합 통신에 사용된다.
지연과 처리량을 조정하는 방법
작은 메시지는 인라인 데이터로 WQE 내부에 직접 넣을 수 있다. DMA를 위한 메모리 접근을 없애 수백 나노초를 절약하지만, 일반적으로 64-128 바이트 크기 제한이 있다.
Doorbell Batching은 여러 WQE를 한 번에 NIC에 통지하는 방식이다. PCIe 트래픽과 Doorbell 횟수를 줄여 벌크 전송의 처리량을 높일 수 있지만, 약간의 지연 증가는 감수해야 한다.
Selective Signaling은 모든 WQE 대신 일부 작업에만 CQE를 만들도록 한다. CQ 오버헤드와 폴링 빈도를 낮추며, 예를 들어 100개 중 1개만 시그널링할 수 있다. Unsignaled WQE도 전송은 보장된다.
메모리 등록은 핫 패스에서 반복하지 않는 편이 낫다. 자주 쓰는 메모리를 미리 등록하고 등록된 버퍼를 메모리 풀로 재사용하면 등록 오버헤드를 피할 수 있다.
분산 시스템에서 RDMA가 쓰이는 곳
분산 스토리지에서는 NVMe-oF(NVMe over Fabrics)를 통한 원격 블록 접근, Lustre와 BeeGFS의 RDMA 백엔드, Ceph BlueStore의 RDMA 지원이 활용된다. HDD 지연을 SSD 수준으로 단축하는 성능 효과도 있다.
FaRM, HERD, Pilaf 같은 키-밸류 스토어와 RAMCloud, NAM-DB 같은 인메모리 데이터베이스는 RDMA 기반 분산 메모리 시스템의 사례다. GAM(Global Address Space)처럼 공유 메모리 모델에도 적용되며, 나노초 단위 메모리 접근이 특징이다.
분산 학습에서는 Horovod와 PyTorch Distributed가 쓰이고, RDMA 기반 파라미터 서버는 그래디언트를 교환한다. NCCL의 RDMA 백엔드는 올리듀스에 쓰이며, GPUDirect는 GPU-to-GPU 직접 전송을 지원한다.
HPC에서는 Open MPI와 MVAPICH가 RDMA를 지원한다. 분자 동역학, 기후 모델링, Hadoop과 Spark의 RDMA shuffle 같은 워크로드에서 통신 오버헤드를 90% 감소시킬 수 있다.
성능 이면의 운영 부담
Verbs는 저수준 API라 학습 곡선이 높고, 메모리 등록과 해제를 명시적으로 관리해야 한다. 네트워크 장애가 발생했을 때 복구도 복잡하다. 고수준 라이브러리는 이 부담을 완화하는 방법이 될 수 있다.
커널 바이패스는 전통적인 방화벽을 우회할 수 있다. MR을 잘못 등록하면 메모리 노출로 이어질 수 있으므로, 연결 설정에서 강한 인증을 사용하고 멀티테넌트 환경에서는 격리를 보장해야 한다.
하드웨어별 최적화가 필요하고 InfiniBand, RoCE, iWARP 사이의 호환성도 제한적이다. 기존 TCP/IP 애플리케이션은 수정이 필요할 수 있다. libfabric 같은 통합 인터페이스가 발전하고 있지만, 벤더 종속과 프로토콜 파편화는 여전히 고려 대상이다.
RDMA 지원 NIC는 수백 달러가 들며, 무손실 이더넷에서는 DCB가 필요한 스위치와 QoS, PFC, ECN 설정이 요구된다. 초기 인프라 비용과 구성 복잡도가 도입 장벽이 된다.
Smart NIC, CXL, 클라우드로 넓어지는 경로
Smart NIC와 DPU는 RDMA 오프로드의 범위를 넓힌다. ARM 코어와 FPGA를 통합한 프로그래머블 NIC는 암호화, 압축, 네트워크 기능을 오프로드할 수 있다. NVIDIA의 BlueField DPU는 클라우드 인프라, SDN, 보안에 적용된다.
CXL(Compute Express Link)은 RDMA를 넘어 일관성 있는 메모리 공유를 지향한다. 하드웨어 수준의 캐시 일관성 프로토콜과 노드 간 동적 메모리 풀링을 제공하며, RDMA와 CXL의 융합이 전망된다.
퍼블릭 클라우드에서는 AWS EFA, Azure AccelNet, GCP RDMA가 제공된다. SR-IOV를 통해 VM이 직접 접근하고, 하드웨어 가상화로 테넌트를 분리한다. 클라우드 네이티브 RDMA 애플리케이션도 확산되고 있다.
Persistent Memory 통합에서는 Intel Optane을 RDMA로 원격 접근할 수 있다. 블록이 아닌 바이트 단위 접근과 네트워크를 통한 영구 저장이 가능해지며, 분산 인메모리 데이터베이스에 쓰인다.