CXL 메모리 진단 — RAS·Poison List·Media Error 추적
#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 노드 사용량 확인:
# 전체 노드 통계 (노드별 meminfo)$ numastat -m
# 프로세스별 노드 할당$ numastat -p <pid>CXL 노드에 메모리가 의외로 많이 잡혀 있으면 원하지 않은 placement입니다. mbind() 또는 numactl로 제어해야 합니다.
#cxl-cli로 디바이스 상태
# 1. region과 target 토폴로지$ cxl list -RT
# 2. 디바이스 health (Get Health Info, mailbox opcode 0x4200)$ cxl list -m mem0 -H
# 3. Poison list — media error 추적 (Get Poison List, opcode 0x4300)$ cxl list -m mem0 -L
# 4. CXL trace event 모니터링$ cxl monitor-H 출력의 health 객체에는 life_used_percent, temperature, dirty_shutdowns, volatile_errors, pmem_errors와 media_*·ext_* 상태 필드가 들어 있습니다. -L 출력은 media_errors 배열로 offset·length·source를 줍니다(ndctl Documentation/cxl/cxl-list.txt). 전체 예시는 Embedded Debugging Ch 9에 있습니다.
#Event Log 분류
CXL 디바이스의 Event Log는 네 종류입니다(drivers/cxl/core/trace.h).
| 로그 | 커널 enum |
|---|---|
| Informational | CXL_EVENT_TYPE_INFO |
| Warning | CXL_EVENT_TYPE_WARN |
| Failure | CXL_EVENT_TYPE_FAIL |
| Fatal | CXL_EVENT_TYPE_FATAL |
드라이버는 이 로그들을 Get Event Records(0x0100)로 읽어 trace event로 내보냅니다.
#DAMON으로 access 패턴
CXL 메모리가 cold tier로 잘 활용되는지 확인:
# DAMON 활성화 (kdamond 설정 뒤)$ echo on > /sys/kernel/mm/damon/admin/kdamonds/0/state
# 결과 분포$ damo report accessCXL 노드의 access 빈도가 DDR보다 낮으면 tier 배치가 의도대로 동작하고 있습니다. 비슷하면 promotion이 잘 안 되고 있는 신호입니다.
#자주 만나는 함정
이 장이 다루는 것은 메모리로서의 CXL이므로, 여기서는 용량이 보이지 않거나 통계가 어긋나는 쪽의 함정을 모읍니다.
| 증상 | 원인 |
|---|---|
| CXL 노드 메모리 안 보임 | cxl create-region 안 함 — region 생성해야 사용 가능 |
numastat에 node 2 없음 | daxctl reconfigure-device -m system-ram 누락 |
| 승격(promotion)이 일어나지 않음 | /proc/sys/kernel/numa_balancing에 NUMA_BALANCING_MEMORY_TIERING(2)이 설정되지 않음 |
| 강등(demotion)이 일어나지 않음 | /sys/kernel/mm/numa/demotion_enabled가 꺼져 있음 |
health 이상, media error 증가, cxl monitor에 이벤트가 나오지 않는 경우 등 디바이스 자체의 이상은 Embedded Debugging Ch 9: CXL 디바이스 트러블슈팅에 정리돼 있습니다.
#진단 워크플로
numastat -m— 노드별 전체 통계cxl list -m memX -H— 디바이스 자체 상태cxl list -m memX -L— poison list 변화 추적cxl monitor— CXL trace eventdamo report access— access pattern 분포dmesg | grep -E "cxl|mce|memory_failure"— kernel 측 이벤트
#정리
- CXL 메모리는 별도 NUMA 노드로 등록되어
numastat에서 디바이스 관점 진단이 가능합니다. - cxl-cli의
cxl list -H·-L과cxl monitor가 디바이스 health·poison·event를 보여 줍니다. - Event Log는 Informational·Warning·Failure·Fatal 네 종류입니다.
- DAMON으로 CXL 노드의 access pattern을 확인해 tier 정렬이 잘 동작하는지 검증합니다.
- 운영에서는 media error 수·
life_used_percent·dirty_shutdowns세 지표를 장기 추적합니다.
#다음 장 예고
Ch 7 — Tiered Memory 진단. DAMON·DAMOS·promotion/demotion debugging.
#관련 항목
Memory Diagnostics · 6 of 7
- 1 리눅스 메모리 회계 — RSS·VSS·PSS·smaps 해석
- 2 heaptrack 분석 — 가벼운 heap profiler 활용
- 3 jemalloc·tcmalloc Profiling — 운영 allocator의 진단 기능
- 4 glibc 메모리 도구 — mtrace·mcheck·MALLOC_CHECK_
- 5 운영 메모리 누수 진단 — long-running 프로세스의 진단 전략
- 6 CXL 메모리 진단 — RAS·Poison List·Media Error 추적
- 7 Tiered Memory 진단 — DAMON·DAMOS·Promotion/Demotion 디버깅
관련 글
Tiered Memory 진단 — DAMON·DAMOS·Promotion/Demotion 디버깅
DDR + CXL.mem 계층화 환경에서 DAMON·DAMOS 동작 분석 — page promotion/demotion 추적, hot/cold 분류 디버깅.
같은 시리즈에서 이어 읽기
운영 메모리 누수 진단 — long-running 프로세스의 진단 전략
장기 실행 서비스의 누수 추적. /proc 모니터링, cgroup memory.max, OOM 회피.
같은 시리즈에서 이어 읽기
CXL 디바이스 트러블슈팅 — RAS 이벤트·Poison List·Media Error 추적
CXL 디바이스의 RAS(Reliability·Availability·Serviceability) 이벤트와 poison list·media error를 추적하는 진단 흐름.
공통 태그 기반 추천
이 글을 참조하는 글 (7)
- CXL 디바이스 Core Dump 분석 — Device State·Kernel Log·NUMA 토폴로지 — Postmortem Debugging
- 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
- Tiered Memory 진단 — DAMON·DAMOS·Promotion/Demotion 디버깅 — Memory Diagnostics