Memory Diagnostics · 6/7
CXL 메모리 진단 — RAS·Poison List·Media Error 추적
· Hawk · 3분 읽기
#CXL.mem은 일반 메모리와 무엇이 다른가
DDR DIMM과 달리 CXL 메모리 디바이스는:
- 별도 NUMA 노드로 등록됨 —
numastat에 별도 항목 - RAS 이벤트 채널이 존재 — poison list, event log
- Mailbox 명령으로 디바이스 상태 query 가능
- Tiered memory 컨텍스트에서 promotion/demotion 트래픽 발생
기존 메모리 진단 도구(heaptrack·jemalloc profile)는 프로세스 관점입니다. CXL은 디바이스 관점 추가 진단이 필요합니다.
#NUMA 노드별 사용량
numastat에서 CXL 노드 사용량 확인:
# 전체 노드 통계$ numastat -m Node 0 Node 1 Node 2 (CXL)MemTotal 262144000 262144000 274877906944MemFree 5120000 6291000 8589934592MemUsed 257024000 255853000 266287972352Anon 198976000 201342000 198945792000Active(file) 2048000 1532000 1073741824
# 프로세스별 노드 할당$ numastat -p <pid>Per-node process memory usage (in MBs) Node 0 Node 1 Node 2 TotalHuge 0 0 0 0Heap 1234 2345 98765 102344Stack 0 0 0 0Private 1098 1872 87654 90624----------------------------------Total 2332 4217 186419 192968Node 2 (CXL)에 메모리 의외로 많이 가 있으면 원하지 않은 placement입니다. mbind() 또는 numactl로 제어해야 합니다.
#cxl-cli로 디바이스 상태
# 1. 전체 토폴로지$ cxl list -RT[ { "memdev":"mem0", "ram_size":274877906944, "host":"0000:5e:00.0" }]
# 2. 디바이스 health$ cxl health -m mem0{ "memdev":"mem0", "health_status":"normal", "media_status":"normal", "ext_status":"normal", "life_used_percent":12, "temperature":42, "dirty_shutdown_count":3}
# 3. Poison list — bad media 추적$ cxl list -m mem0 -P{ "poison":[ {"address":"0x80012340", "length":64, "source":"injected"}, {"address":"0x80015800", "length":64, "source":"internal"} ]}
# 4. Event log$ cxl monitor -m mem0[2026-06-18 09:10:23] Info: Mailbox cmd 0x4400 completed in 1.2ms[2026-06-18 09:11:45] Warning: Correctable ECC error at 0x80045000[2026-06-18 09:12:01] Failure: Media error at 0x80067800 — added to poison list#RAS 이벤트 분류
| 등급 | 의미 | 대응 |
|---|---|---|
| Information | 정보성 (mailbox completion 등) | 무시 가능 |
| Warning | Correctable error | 카운트 모니터링 |
| Failure | Uncorrectable, 단일 영역 | poison list 격리, 페이지 unmap |
| Fatal | 디바이스 오류 | 디바이스 reset 또는 교체 |
Linux 6.2+에서는 Failure 이벤트 발생 시 자동 page offline과 MCE 이벤트 발생이 통합됩니다.
#DAMON으로 access 패턴
CXL 메모리가 cold tier로 잘 활용되는지 확인:
# DAMON 활성화$ echo on > /sys/kernel/mm/damon/admin/kdamonds/0/state
# 결과 분포$ damo report accesstarget_id region(KB) access(%) node0 0-32M 82.3 0 # DDR — hot0 32M-128M 45.1 0 # DDR — warm0 128M-1G 8.2 2 # CXL — cool0 1G-256G 1.1 2 # CXL — cold*CXL 노드의 access %*가 DDR 대비 작아야 정상입니다. 비슷하면 promotion이 잘 안 되고 있는 신호.
#자주 만나는 함정
| 증상 | 원인 |
|---|---|
| CXL 노드 메모리 안 보임 | cxl create-region 안 함 — region 생성해야 사용 가능 |
numastat에 node 2 없음 | daxctl reconfigure-device -m system-ram 누락 |
| Poison list 늘어남 | media wear 또는 ECC marginal — 디바이스 교체 검토 |
| Health “warning”으로 떨어짐 | life_used_percent 또는 dirty_shutdown 증가 — log 확인 |
cxl monitor 무응답 | event interrupt 비활성. cxl set-event-irq -m memX |
| DAMON CXL 노드 무시 | DAMON 6.2+ tiered memory awareness 활성 확인 |
temperature 비현실적 (255 또는 0) | 디바이스 firmware bug — sensor 미초기화 |
| 갑작스러운 throughput 저하 | thermal throttling 가능 — cxl health 확인 |
| Multi-host pool에서 access 실패 | LD(Logical Device) 할당 충돌 — Fabric Manager 확인 |
| Page offline 빈번 | bad media 진행 — poison rate 모니터링 |
#진단 워크플로
numastat -m— 노드별 전체 통계cxl health -m memX— 디바이스 자체 상태cxl list -m memX -P— poison list 변화 추적cxl monitor -m memX— 실시간 event logdamo report access— access pattern 분포dmesg | grep -E "cxl|mce|memory_failure"— kernel 측 이벤트
#정리
- CXL 메모리는 별도 NUMA 노드로 등록되어
numastat에서 디바이스 관점 진단이 가능합니다. - cxl-cli가 디바이스 health·poison·event를 노출하는 표준 도구입니다.
- RAS 이벤트는 Information·Warning·Failure·Fatal 네 단계로 분류되며 Failure 이상에서 page offline이 trigger됩니다.
- DAMON으로 CXL 노드의 access pattern을 확인해 tier 정렬이 잘 동작하는지 검증합니다.
- 운영에서는 poison rate·life_used·dirty_shutdown 세 지표를 장기 추적합니다.
#다음 장 예고
Ch 7 — Tiered Memory 진단. DAMON·DAMOS·promotion/demotion debugging.
#관련 항목
Memory Diagnostics · 6 of 7
- 1리눅스 메모리 회계 — RSS·VSS·PSS·smaps 해석
- 2heaptrack 분석 — 가벼운 heap profiler 활용
- 3jemalloc·tcmalloc Profiling — 운영 allocator의 진단 기능
- 4glibc 메모리 도구 — mtrace·mcheck·MALLOC_CHECK_
- 5운영 메모리 누수 진단 — long-running 프로세스의 진단 전략
- 6CXL 메모리 진단 — RAS·Poison List·Media Error 추적
- 7Tiered Memory 진단 — DAMON·DAMOS·Promotion/Demotion 디버깅
관련 글
Tiered Memory 진단 — DAMON·DAMOS·Promotion/Demotion 디버깅
DDR + CXL.mem 계층화 환경에서 DAMON·DAMOS 동작 분석 — page promotion/demotion 추적, hot/cold 분류 디버깅.
·tiered-memory
운영 메모리 누수 진단 — long-running 프로세스의 진단 전략
장기 실행 서비스의 누수 추적. /proc 모니터링, cgroup memory.max, OOM 회피.
·memory
glibc 메모리 도구 — mtrace·mcheck·MALLOC_CHECK_
별 라이브러리 없이 glibc 만으로 메모리 디버깅. mtrace, mcheck, MALLOC_CHECK_.
·memory
이 글을 참조하는 글 (7)
- CXL 디바이스 Core Dump 분석 — Device State·Mailbox Log·NUMA 토폴로지— Postmortem Debugging
- Tiered Memory 진단 — DAMON·DAMOS·Promotion/Demotion 디버깅— Memory Diagnostics
- drivers/cxl 코드 분석 — 진입점부터 sysfs까지— Kernel Debugging
- CXL 디바이스 트러블슈팅 — RAS 이벤트·Poison List·Media Error 추적— Embedded Debugging
- 실전 사례 — CXL.mem 추가로 LLM inference KV cache 처리량 회복— Embedded Performance Engineering
- CXL 성능 프로파일링 도구 — cxl-cli·DAMON·perf-mem 활용— Embedded Performance Engineering
- Ch 15: RAS·Performance·Compliance — 운용·검증의 마지막 단계— CXL 4.0 Internals