거대 언어 모델 서빙은 갈수록 컴퓨트의 탈을 쓴 메모리 문제가 되어 간다. 토큰별 어텐션 상태를 저장해 공유 문맥을 한 번만 계산하게 해 주는 KVCache는 문맥 길이에 비례해 자라는데, 논문은 Kimi 같은 서비스에서 5,000만 토큰 문맥의 캐시 적중률을 최대로 끌어올리려면 약 20TB의 DRAM이 필요하다는 관찰로 시작한다. 그만한 메모리를 가진 GPU 서버는 없으므로, Mooncake[2]나 NVIDIA의 Dynamo[4] 같은 프로덕션 시스템은 KVCache를 RDMA로 연결된 메모리 풀에 흘려보낸다. 그리고 바운스 버퍼, 완료 폴링, 지역성 인지 스케줄러라는 공학의 한 층이 통째로, RDMA의 정체(즉, 메모리 버스 흉내를 요구받은 네트워크 프로토콜)를 감추는 데 동원된다.

2025년 11월 25일 arXiv에 공개되고 SIGMOD 2026에 채택된 Alibaba Cloud의 논문은 그 흉내를 그만두면 무슨 일이 생기는지 묻는다[1]. Beluga는 최초로 상용화된 CXL 2.0 스위치로 공유 메모리 풀을 만들고 CPU와 GPU 모두가 순수한 load/store 의미론으로 접근하게 한 뒤, 그 위에 vLLM의 KVCache 경로[3]를 다시 짓는다. 아래는 이 작업을 우리 표현으로 정리하고, 그동안 그려 온 지도 위에 올려놓은 것이다. Meta의 Vistara[7]가 단일 호스트 CXL 확장을 하이퍼스케일에서 증명했고, 원칩 리뷰[8]가 랙 규모 일관성 패브릭을 그렸다면, Beluga는 그 중간 단인 실물 스위치를 통한 멀티 호스트 풀링을 차지한다.

RDMA는 왜 KVCache에 맞지 않는 모양인가

현 상태에 대한 논문의 비판은 수사가 아니라 구체다. vLLM 계열 스택이 쓰는 CPU 주도 모델에서 KVCache 블록은 GPU에서 호스트 바운스 버퍼를 거쳐 원격 풀로, 읽을 때는 그 반대로 이동한다. GPU 주도 대안(GPUDirect RDMA)에서는 전용 커널이 완료 폴링만을 위해 스트리밍 멀티프로세서를 점유하고, 그마저 소비자용 GPU에는 없는 기능이다. 어느 쪽이든 제어 경로가 지배한다. H20에서 16KB 전송은 전체 10.55 µs가 걸리는데 실제 데이터 이동은 2.68 µs다. 시간의 약 75%가 동기화다.

데이터의 모양이 문제를 키운다. GQA(grouped-query attention)를 쓰는 Qwen-32B에서 KVCache 블록 하나는 비연속적인 20KB 조각 128개로 흩어지는 반면, ConnectX-7 NIC의 scatter-gather 리스트는 30개 항목이 상한이라, 논리적으로 한 번인 연산이 여러 요청으로 쪼개진다. 이 오버헤드를 흡수하려고 RDMA 스택은 블록을 256토큰짜리 수퍼블록으로 묶는데, vLLM 본연의 16토큰 단위로 강제로 내리면 Mooncake의 캐시 적중 TTFT는 13.0초에서 76.8초로 불어나 재계산보다도 나빠진다. 마지막으로 원격 접근이 로컬보다 훨씬 느리다보니 스케줄러는 필요한 블록을 이미 가진 노드로 요청을 보내야 하고, 이 지역성 장부 관리가 쏠림과 부하 불균형, 운영 복잡도를 함께 데려온다.

스위치가 CXL의 의미를 바꾼다

최근까지 현실의 CXL은 단일 호스트 확장 장치를 뜻했고, 그것이 정확히 Vistara의 설계점이다. 판을 바꾸는 것은 XConn XC50256[5]이다. 이 스위치 칩은 256개의 PCIe 5.0 레인 위에서 CXL.mem을 포워딩하며, 칩당 2TB/s의 스위칭 용량과 64바이트 접근 기준 약 750 ns의 최소 지연을 제공한다. Beluga의 풀은 이런 칩 두 개를 스위치 노드 하나에 담아, 최대 16대의 서버가 총대역폭 1TB/s로 8TB 메모리 박스를 공유하게 한다. 평가 클러스터는 8×H20 GPU 서버 두 대를 이 풀에 붙였고, 각 CPU 소켓은 PCIe 5.0 x16 CXL 어댑터로 스위치에 닿는다.

소프트웨어가 보는 그림은 신선할 만큼 심심하다. BIOS가 풀을 위한 연속 물리 주소 구간을 예약하면, 각 호스트는 이를 DAX 모드로 온라인하고, 프로세스는 mmap()으로 그 구간을 자기 주소 공간에 바로 얹는다. 분할은 오프셋 약속이고, 공유는 같은 구간을 두 번 매핑하는 일이다. 여기에 더해 경제성도 스위치 편이다. 호스트 어댑터는 210달러인데 듀얼 200Gbps NIC는 1,745달러이고, 연결성 64GB/s당으로 정규화하면 CXL 경로는 218.75달러, RDMA 경로는 800달러다(스위치 가격은 B1 샘플 기준).

네트워크 의미론에서 메모리 의미론으로. a, RDMA 풀은 KVCache를 호스트 바운스 버퍼와 완료 폴링에 통과시키며, 16KB 전송에서 동기화가 전체 10.55 µs의 약 75%를 차지한다. b, Beluga는 CXL 2.0 스위치(XC50256 칩 2개, 64B 접근당 약 750 ns)로 최대 16대의 서버에 8TB 메모리 박스를 연결하고, GPU는 복사 커널 하나의 load/store로 접근한다. 이 글을 위해 새로 만든 도판.

일관성은 소프트웨어의 일이 된다

이 논문의 정직한 핵심은, CXL 2.0이 주소 공간은 주지만 일관성은 주지 않는다는 점이다. 스위치는 모든 호스트에 하나의 논리적 메모리를 보여 주지만 각 호스트의 캐시 계층은 서로 고립되어 동작하므로, 한 CPU의 캐시에 머무는 쓰기는 이웃에게 보이지 않는다. Beluga는 이를 감추지 않는다. KVCache가 실제로 요구하는 패턴(쓰기는 하나의 작성자가 블록을 넣고, 여러 독자가 소비한다)으로 문제를 좁힌 뒤, 양쪽에서 명시적 캐시 관리로 일관성을 강제한다.

측정된 레시피는 기록해 둘 가치가 있다. CPU 쓰기의 경우 캐시를 우회하는 비시간적 저장(ntstore)은 16KB에 2.41 µs가 걸리는 반면, 구간을 언캐시어블로 지정하면 일반 store가 281.56 µs까지 치솟는다. 모든 store가 CXL 왕복을 기다리며 파이프라인을 세우기 때문이다. CPU 읽기는 load 전에 CLFLUSH를 실행하면 5.98 µs로, 언캐시어블 load의 166.49 µs와 대비된다. Intel의 DSA 복사 엔진은 1.69에서 2.12 µs로 전 항목에서 가장 빠르고 언캐시어블 여부에 무심하며, GPU 전송은 구간을 언캐시어블로 두고 DDIO를 꺼서 유입 쓰기가 CPU의 LLC를 우회하게 할 때 가장 좋다. 주의할 점은 이것들이 일회성 설정과 플러시 명령 정도라는 것이다. RDMA의 큐 페어 순서와 비동기 완료 관리에 비하면 유리한 거래다.

마이크로벤치마크가 가르치는 것

세 가지 지연 교훈은 이 시스템 밖에서도 통한다. 첫째, CPU가 직접 load/store를 쓰는 것은 4KB 아래에서만 유리하고, 그보다 크면 DSA 엔진의 준비 비용이 회수되어 16KB에서는 역전이 끝난다. 둘째, GPU의 문제는 전선이 아니라 발사대다. 작은 전송에서는 커널 런치 오버헤드가 지배하므로, Beluga는 cudaMemcpy를 반복 호출하는 대신 흩어진 복사 다수를 커스텀 CUDA 커널 하나로 묶는다. 셋째, 진짜 함정이 하나 있다. 언캐시어블 호스트 메모리에서의 cudaMemcpy는 24KB 미만 전송에서 약 1.23 ms로 무너지는데, CUDA 런타임이 작은 복사를 CPU 명령으로 최적화하는 전략이 언캐시어블 메모리에서 역효과를 내는 것으로 보인다. 커스텀 커널은 이 함정을 비켜 간다. 이런 손질을 거치면 64KB 풀-GPU 복사는 11.73 µs로, 로컬 호스트 메모리에서의 10.32 µs에 붙는다. 논문이 이 풀을 근사 로컬(near-local)이라 부르는 근거다.

대역폭에는 개입이 두 번 더 필요했다. 어댑터 하나면 PCIe 5.0 x16 속도가 나와야 하지만 GPU 접근은 처음에 26 GB/s에 그쳤다. 저자들은 이 천장이 CXL이 아니라 CPU 루트 컴플렉스의 피어 투 피어 포워딩에 있음을 지목하고, 순수 GPU-NIC 경로에서 같은 한계를 재현해 검증한다. 우회로는 병렬성이다. 서버당 어댑터를 늘리고, 풀의 메모리 장치들에 데이터를 2MB 단위로 소프트웨어 인터리브한다(장치 하나의 상한은 22.5 GB/s다). 인터리빙만으로 엔드투엔드 서빙 처리량이 33.2% 오른다. 근본 해법인 GPU의 CXL 스위치 직결은 미래 아키텍처로 남겨 둔다.

비일관성 풀의 운용 규칙. a, 개시 주체별 쓰기·읽기 레시피: CPU는 비시간적 저장과 읽기 전 플러시, DSA는 언캐시어블 모드, GPU 복사는 언캐시어블에 DDIO 해제를 쓴다. 잘못 짝지으면 지연이 최대 117×까지 벌어진다. b, 루트 컴플렉스가 GPU와 풀 사이 대역폭을 묶으므로, Beluga는 어댑터 추가와 메모리 장치 간 2MB 인터리빙으로 확장한다. 이 글을 위해 새로 만든 도판.

KVCache 경로를 load/store 위에 다시 짓다

풀이 준비되자 Beluga-KVCache는 RDMA 시대의 메커니즘 세 개를 교체한다. 데이터 이동은 CUDA 커널 하나 안에서 처리하는 모아 쓰기(gather write)와 흩어 읽기(scatter read) 문제가 되고, scatter-gather 리스트의 제한도 사라진다. 이것만으로 밀집 KVCache의 쓰기와 읽기 지연이 각각 36.2%와 38.7% 줄어든다. 서빙이 희소성을 활용하면 격차는 극적으로 벌어진다. 헤드와 레이어마다 상위 256개 토큰만 고르면 읽기 하나가 160바이트 조각 1,024개로 변하는데(Qwen-32B에서 선택된 토큰의 74% 이상이 비연속이다), 이런 토큰 16개를 가져오는 데 CXL은 211 µs, RDMA는 5,260 µs가 걸린다. 95.9%의 감소다.

메타데이터 트래픽도 풀 위로 옮긴다. Beluga는 RPC를 상태 플래그가 달린 공유 메모리 슬롯으로 구현해 전부 사용자 공간에서 폴링한다. 64바이트 왕복이 2.11 µs로 RDMA reliable-connection RPC의 8.39 µs와 대비되고, 서버 스레드 하나가 큐 깊이 128에서 12.13 Mops를 지속해 RDMA의 2.7×다. 이제 모든 노드가 균일한 접근 지연을 보므로 스케줄러는 블록의 위치를 아예 신경 쓰지 않는다. 요청은 평범한 부하 분산으로 뿌려지고, 노드는 캐시 파티션 재조정 없이 들어오고 나간다.

엔드투엔드 수치

평가는 8-GPU 서버 두 대에서 vLLM 인스턴스 16개를 돌리며, 입력이 15K 토큰을 넘는 장문 QA 트레이스(LV-Eval)로 Mooncake, Dynamo와 비교한다. 공정성을 위해 풀 용량은 모든 시스템에서 2TB로 고정했다. 캐시를 채우는 첫 실행에서 Beluga-KVCache는 평균 TTFT에서 12.4%, 처리량에서 21.5%만큼 Mooncake를 앞선다. 모든 요청이 캐시에 적중하는 두 번째 실행에서 격차는 범주가 달라진다. 평균 TTFT는 13.0초에서 1.36초로 떨어지고(89.6% 감소), 처리량은 초당 1.54에서 11.32 질의로 올라 7.35×의 이득이다. 프리필-디코드 분리 배치에서는 이점이 3.41×에서 9.47×에 이르고, 캐시 이동이 전체 시간에서 차지하는 몫이 커지는 긴 문맥일수록 격차도 커진다.

메모리 의미론이 사 주는 것. a, LV-Eval 캐시 적중 서빙: 같은 풀 용량에서 평균 TTFT가 13.0초에서 1.36초로 떨어지고 QPS는 RDMA 기준선 대비 7.35× 오른다. b, 이득의 출처: 희소 16토큰 읽기 25×, 메타데이터 RPC 4.0×, 밀집 전송 3분의 1 이상 가속, 그리고 작은 전송의 75%를 차지하던 동기화 몫이 사라진다. 이 글을 위해 새로 만든 도판.

솔직하게 짚어야 할 한계

범위는 랙 하나다. 스위치 도메인 하나가 16대 서버와 8TB에 닿을 뿐, 스위치를 가로지르는 풀링이나 일관성은 여기서 다루지 않는다. 측정된 배치는 서버 두 대이므로 16호스트 범위는 실증이 아니라 구조적 상한이다. 일관성 프로토콜은 단일 작성자, 다수 독자 데이터에 맞춰 수작업으로 지은 것이라, 경합하는 공유 상태로 일반화하려면 장치가 더 필요하다. CXL 기반 RPC는 RDMA 전송 계층의 신뢰성 보장을 명시적으로 포기하고 상위 계층에 기댄다. GPU와 풀 사이 대역폭은 GPU가 패브릭에 직결되기 전까지 경로당 26 GB/s의 루트 컴플렉스 한계에 묶여 있다. 마지막으로 엔드투엔드 격차의 일부는 RDMA 기준선들의 소프트웨어 성숙도를 반영하며(저자들 스스로 인정한다), 스위치 가격도 양산가가 아니라 샘플 견적이다.

우리가 읽은 결론

의미 있는 결과는 7.35×라는 숫자가 아니라 그 승리의 출처를 무엇으로 지목하는가라고 본다. RDMA가 LLM 서빙에 물리던 세금은 대역폭이 아니었다. 작은 전송의 75%를 조율에 쓰게 만드는 제어 경로, 그리고 어텐션 상태 레이아웃의 파편화가 그 세금이었고, Beluga는 메모리 의미론이 그 비용의 범주 자체를 지운다는 것을 보여 준다. 이 논문은 풀링 논쟁의 균형도 조용히 다시 잡는다. CXL 풀링 반대론[6]은 측정할 멀티 호스트 스위치가 없던 시절의 논증이었는데, 첫 상용 스위치는 LLM 서빙이 만들어 내는 읽기 위주, 블록 단위 워크로드에 대해 로컬 DRAM에 근접한 지연을 낸다. 한 단 아래의 Vistara[7], 한 단 위의 원칩 패브릭 비전[8]과 함께 놓으면, CXL 사다리는 이제 측정된 중간 단을 갖게 됐다. 남은 질문은 공유 패턴이 풍부해져도 소프트웨어 관리 일관성이 감당할 만한 가격으로 남을지, 아니면 그 부담이 결국 CXL 3.x가 약속하는 하드웨어 일관성을 강제할지다.

출처와 저작권 안내

이 글은 Silicon and Systems가 작성한 편집 요약이다. 아래에 인용한 논문의 논지를 우리 표현으로 다시 서술했으며, 원문의 문장과 도판, 표는 어느 것도 이 페이지에 복제하지 않았다. 본문의 도판은 이 요약을 위해 새로 만든 자체 제작물이다. 이 요약은 arXiv 프리프린트(v1 2025년 11월 25일, v2 11월 27일 공개)를 바탕으로 했고, 원문은 arXiv:2511.20172에서 볼 수 있다. 논문은 SIGMOD 2026에 채택되었으며 최종본은 DOI 10.1145/3786627로 게재된다. 게재본의 저작권은 저자들에게 있고 출판권은 ACM에 허여되었다. (c) 2026.