CXL.mem 지연·대역폭 실측 — Direct·Switch·Pooled 토폴로지 비교
#한 줄 요약
“CXL.mem의 지연은 디바이스 설계에 크게 좌우됩니다.” 실제 CXL 메모리 디바이스 3종을 잰 연구(Sun et al., MICRO 2023)에서 load 지연이 원격 소켓 DDR5의 1.35배부터 약 3배까지 갈렸습니다. 내 시스템의 값은 mlc·STREAM으로 직접 재야 합니다.
#어떤 문제를 푸는가
Ch 29에서 CXL 프로토콜 세 가지와 디바이스 타입을 봤습니다. 그러나 실제로 데이터센터에 배치할 때는 어느 토폴로지가 어떤 성능을 내는지가 결정의 핵심입니다.
CXL.mem은 DDR DIMM이 아닌 새 메모리 tier입니다. 그렇다면 지연·대역폭이 워크로드에 미치는 영향을 수치로 알아야 합니다. 측정값 없이 “CXL.mem이 쓸 만하다/없다”는 서로 다른 토폴로지를 같은 잣대로 평가하는 흔한 오류입니다.
이 장은 세 가지 대표 토폴로지의 구조, 공개된 실측 결과, 그리고 측정 방법을 정리합니다.
#세 가지 토폴로지
CXL.mem 배치 형태는 세 단계로 나뉩니다.
| 토폴로지 | 구성 | 대표 사례 |
|---|---|---|
| 1. Direct Attach (CXL 1.1/2.0) | Host CPU → CXL link → CXL Type 3 Memory Device | Samsung CMM-D |
| 2. Single Switch (CXL 2.0 pooling) | Host CPU → CXL link → CXL Switch → Memory Device A·B·C | TBD |
| 3. Multi-Host Pool (CXL 2.0 multi-LD / 3.0 fabric) | Host A·B·C → CXL Switch → Memory Device (Multi-Logical Device, 각 Host에 logical slice) | TBD |
각 토폴로지마다 flit이 지나가는 단계 수가 다르고, 그게 지연에 직접 반영됩니다.
#공개된 실측 — 실제 CXL 디바이스 3종
Sun et al.(MICRO 2023)은 Intel Sapphire Rapids 서버에 실제 CXL 메모리 디바이스 3종(CXL-A·B·C, ASIC 기반 hard IP와 FPGA 기반 soft IP)을 붙이고 Intel MLC와 자체 마이크로벤치마크로 쟀습니다. 비교 기준은 원격 NUMA 노드의 DDR5(DDR5-R)입니다.
| 디바이스 | load(ld) 지연, DDR5-R 대비 |
|---|---|
| CXL-A | 약 1.35배 (35% 더 김) |
| CXL-B | 약 2배 |
| CXL-C | 약 3배 |
논문의 결론은 CXL 메모리 지연이 CXL 컨트롤러 설계에 크게 좌우된다는 것입니다. 같은 DDR4를 써도 CXL-C(DDR4-3200)가 CXL-B(DDR4-2400)보다 ld 지연이 67% 길었습니다. 이 측정은 direct attach 디바이스 기준이고, switch·pool 토폴로지의 실측은 이 글의 자료에 없습니다(TBD).
#측정 방법 — mlc
Intel mlc는 NUMA-aware 메모리 벤치마크로, 3.0부터 CPU 없는 메모리 전용 NUMA 노드를 지원합니다. CXL.mem이 NUMA 노드로 등록된 환경에서 그대로 쓸 수 있습니다.
# 1. CXL 노드 확인 (CPU 없는 노드)$ numactl --hardware
# 2. 노드 간 idle 지연 행렬$ ./mlc --latency_matrix
# 3. 부하를 올려 가며 지연·대역폭$ ./mlc --loaded_latency
# 4. 노드 간 대역폭 행렬$ ./mlc --bandwidth_matrix출력 형식과 옵션은 Intel MLC 문서에 있습니다. 숫자는 플랫폼·디바이스마다 다르므로 직접 잰 값으로 판단합니다.
#STREAM으로 본 sustained bandwidth
$ OMP_NUM_THREADS=16 numactl --cpunodebind=0 --membind=2 ./stream--membind로 CXL 노드(여기서는 node 2)에만 할당해 Copy·Scale·Add·Triad 처리량을 잽니다. 같은 명령을 local 노드에 돌린 결과와 비교하면 CXL tier의 대역폭 비율이 나옵니다.
#DAMON으로 본 access 패턴
DAMON(Data Access Monitor)은 메모리 region 단위로 access 빈도를 측정합니다. CXL.mem tiered 환경에서 cold region을 식별해 promotion/demotion 결정을 돕습니다.
# 1. DAMON 설정 후 시작 (sysfs, 대상 지정은 커널 문서 참조)$ echo on > /sys/kernel/mm/damon/admin/kdamonds/0/state
# 2. 결과 — region별 access 분포$ damo report accesshot/cold 비율은 워크로드마다 다르므로, 이 분포를 직접 보고 CXL.mem tier에 cold 데이터를 둘지 판단합니다.
#토폴로지 선택
결정 변수는 지연 budget과 용량입니다. 위 실측처럼 같은 direct attach라도 디바이스에 따라 지연이 원격 소켓 DDR5의 1.35배~3배로 갈리므로, 토폴로지보다 먼저 실제 디바이스의 지연을 mlc로 재고 워크로드의 지연 budget과 비교합니다.
#자주 보는 함정과 안티패턴
⚠️ PCIe 5.0 x16의 64 GB/s를 그대로 가정
링크 원시 전송률(32 GT/s × 16 ÷ 8)은 이론 상한입니다. 프로토콜 오버헤드와 디바이스 구현이 실효 대역폭을 정하므로 STREAM·mlc로 잰 값으로 모델을 세웁니다.
⚠️ “CXL 메모리 지연은 하나의 값”
Sun et al.의 세 디바이스는 같은 시스템에서 1.35배~약 3배로 갈렸습니다. 다른 디바이스의 수치를 가져다 쓰지 않고, 쓸 디바이스를 직접 잽니다.
#정리
- CXL.mem 지연은 디바이스 설계에 강하게 의존합니다 — 실제 디바이스 3종이 원격 소켓 DDR5의 1.35배~약 3배(Sun et al., MICRO 2023).
- switch·pool 토폴로지의 실측은 이 글의 자료에 없습니다.
- mlc·STREAM·DAMON이 지연·sustained throughput·access pattern을 각각 재는 도구입니다.
- 토폴로지 선택은 직접 잰 지연과 워크로드의 지연 budget으로 합니다.
다음 편은 Ch 55: CXL 성능 프로파일링 도구 — cxl-cli·DAMON·perf-mem로 측정 환경 자체를 구축하는 법을 정리합니다.
#관련 항목
Embedded Performance Engineering · 55 of 57
- 1 Embedded Performance Engineering — 임베디드 성능 엔지니어링 시리즈 소개
- 2 임베디드 성능 분석 방법론 — Measure → Analyze → Optimize 사이클
- 3 성능 지표 정의 — Latency·Throughput·Utilization 분석
- 4 성능 측정의 기본 — Wall-Clock·CPU Cycle·Instruction Count
- 5 성능 데이터 통계적 분석 — Percentile·Histogram·평균의 함정
- 6 실시간 성능 분석 — WCET·Jitter·Deadline Miss 측정
- 7 임베디드 벤치마킹 기초 — 재현성·Warmup·노이즈 제거
- 8 성능 모델링 — Amdahl·Gustafson·Roofline Model 적용
- 9 프로파일링 기법 개요 — Sampling vs Instrumentation·PGO·LTO
- 10 CPU 파이프라인 분석 — 5-stage·Cortex-M·Cortex-A 비교
- 11 Pipeline Stall 분석 — Data·Structural·Control Hazard·Forwarding
- 12 Branch Prediction 분석 — Static·2-bit·BTB·BHT·Mispredict 비용
- 13 Speculative Execution 분석 — OoO·Reorder Buffer·Register Renaming
- 14 CPU Cache 기초 — L1·L2·L3·Set Associative·Replacement Policy
- 15 Cache Miss 3C Model 분석 — Compulsory·Capacity·Conflict
- 16 Cache Line 최적화 — Alignment·Prefetch·False Sharing 처리
- 17 메모리 대역폭 분석 — STREAM·Roofline·Bus Saturation 측정
- 18 SIMD·NEON 활용 — 128-bit Vector·Auto-Vectorization·SVE/SVE2
- 19 PMU·HPM 하드웨어 카운터 분석 — 정밀 성능 진단
- 20 임베디드 Bus Architecture — AHB·AXI·CHI 진화와 5-Channel
- 21 Bus Contention 진단 — Arbitration·QoS·Starvation 측정
- 22 DMA 성능 최적화 — Burst·Scatter-Gather·Chain·Cache 일관성
- 23 DMA vs CPU Copy 성능 비교 — Break-even·Setup Overhead 실측
- 24 Interrupt Latency 분석 — 진입·종료·Tail-Chaining·Late Arrival
- 25 Interrupt Storm 처리 — NAPI·Rate-Limit·Polling 전환
- 26 MMIO 접근 성능 — Cache Policy·Write-Combining·Volatile·Barrier
- 27 Peripheral Clock 분석 — PLL·Divider·Gating·DVFS
- 28 Power vs Performance 트레이드오프 — DVFS·Race-to-Idle·Big.LITTLE
- 29 Thermal Throttling 분석 — Junction Temp·Trip Point·냉각
- 30 CXL Interconnect 분석 — AI 시대 메모리 대역폭 확장
- 31 Concurrency 기초 — Concurrency vs Parallelism·Race·Memory Model
- 32 False Sharing 진단 — Cache Line Ping-Pong·Padding·측정
- 33 Lock Contention 분석 — Wait·Hold·Convoy·측정 기법
- 34 Spinlock 성능 분석 — Spin-Wait vs Context Switch·Ticket·MCS
- 35 Mutex 성능 분석 — Futex·Adaptive·Priority Inheritance
- 36 Reader-Writer Lock 성능 — Reader/Writer Priority·RCU·Seqlock
- 37 Lock-Free 자료구조 성능 — CAS·ABA·Hazard Pointer·Epoch Reclamation
- 38 Memory Ordering 분석 — Acquire·Release·Seq-Cst·ARM Relaxed Model
- 39 Cache Coherency 프로토콜 — MESI·MOESI·Snoop·Directory
- 40 SMP 성능 분석 — Per-Core·Affinity·Load Balance·Scalability
- 41 Linux perf 기초 — stat·record·report 활용
- 42 Linux perf 고급 — Raw Event·Tracepoint·perf script
- 43 ftrace 활용 — function·function_graph·latency tracer
- 44 eBPF·bpftrace 동적 트레이싱 — 커널 무수정 관측
- 45 Flamegraph 분석 — On-CPU·Off-CPU·Differential
- 46 ARM DS·Lauterbach 분석 — Hardware Trace 전문 도구
- 47 Bare-metal 프로파일링 — GPIO·DWT·SysTick·ITM 활용
- 48 NVIDIA Nsight Systems — GPU·NPU 포함 시스템 분석
- 49 모던 프로파일러 비교 — Tracy·Hotspot·uftrace·Coz
- 50 연속 프로파일링 — Parca·Pixie·Pyroscope·Tetragon
- 51 실전 사례 — ISR Latency 100µs Deadline Miss 추적
- 52 실전 사례 — Matrix Multiply가 예상의 10배 느린 이유
- 53 실전 사례 — 8-core가 4-core를 넘으면 throughput이 떨어지는 이유
- 54 실전 사례 — 카메라 1080p 60fps가 30fps로 떨어지는 이유
- 55 CXL.mem 지연·대역폭 실측 — Direct·Switch·Pooled 토폴로지 비교
- 56 CXL 성능 프로파일링 도구 — cxl-cli·DAMON·perf-mem 활용
- 57 실전 사례 — CXL.mem 추가로 LLM inference KV cache 처리량 회복
관련 글
CXL 성능 프로파일링 도구 — cxl-cli·DAMON·perf-mem 활용
CXL.mem 환경 성능 도구 — cxl-cli 토폴로지·DAMON page activity·perf-mem로 보는 CXL 트래픽·numastat 통계.
같은 시리즈에서 이어 읽기
실전 사례 — CXL.mem 추가로 LLM inference KV cache 처리량 회복
70B 모델 KV cache가 HBM 한계를 넘어 throughput이 무너졌을 때, CXL.mem 256 GB pool 추가로 회복한 실전 케이스.
같은 시리즈에서 이어 읽기
부트 시 메모리 토폴로지 결정 — DDR + CXL.mem 통합 인식
부트로더가 DDR DIMM·CXL.mem·HBM을 하나의 메모리 토폴로지로 통합하는 흐름 — SRAT·HMAT·SLIT 생성과 NUMA 노드 매핑.
공통 태그 기반 추천
이 글을 참조하는 글 (9)
- 부트 시 메모리 토폴로지 결정 — DDR + CXL.mem 통합 인식 — Bootloader Internals
- CXL 메모리 진단 — RAS·Poison List·Media Error 추적 — Memory Diagnostics
- PCIe·CXL IDE 분석 — 링크 무결성과 데이터 암호화 — Embedded Security
- 메모리 풀링과 데이터센터 토폴로지 — 용량을 서버 밖에서 빌리는 일 — HBM·GDDR 심화
- CXL.mem 프로토콜 분해 — 왕복 횟수가 만드는 지연, 링크가 만드는 대역폭 — HBM·GDDR 심화
- Ch 15: RAS·Performance·Compliance — 운용·검증의 마지막 단계 — CXL 4.0 Internals
- Ch 8: CXL.mem — M2S·S2M·HDM Decoder — CXL 4.0 Internals
- 실전 사례 — CXL.mem 추가로 LLM inference KV cache 처리량 회복 — Embedded Performance Engineering
- CXL 성능 프로파일링 도구 — cxl-cli·DAMON·perf-mem 활용 — Embedded Performance Engineering