Ch 3: 메모리 일관성 모델 — HDM-DB·HDM-D·Bias·BISnp
#한 줄 요약
“device memory를 host와 device가 함께 캐시할 수 있으면 일관성을 맞출 장치가 필요합니다.” — CXL은 HDM 영역을 세 종류로 나눕니다. HDM-H는 host만 일관성을 책임지는 Type 3 영역, HDM-D는 CXL.cache로 host와 일관성을 맞추는 Type 2 영역, HDM-DB는 CXL.mem의 Back-Invalidate Snoop(BISnp) 채널로 일관성을 맞추는 영역입니다. 256B flit을 쓰는 디바이스는 HDM-DB를 지원해야 합니다.
Ch 2에서 디바이스 유형을 봤습니다. 이 장은 device memory의 일관성이 어떻게 유지되는지를 CXL 3.1 규격 §2.2 기준으로 정리합니다.
#HDM이란
*HDM(Host-managed Device Memory)*은 디바이스에 붙은 메모리를 system coherent 주소 공간에 매핑해, host가 일반 write-back 방식으로 접근하게 한 영역입니다. 디바이스의 메모리는 HDM 또는 *PDM(Private Device Memory)*으로 매핑됩니다.
| 항목 | 의미 |
|---|---|
| Mapping | HDM Decoder가 host 물리 주소를 device 주소로 변환 |
| Visibility | host의 모든 코어가 같은 주소로 접근 |
| Caching | host CPU cache에 일반 load/store처럼 캐시됨 |
#HDM 영역의 세 종류
CXL 3.1 규격의 용어 정의입니다.
| 종류 | 규격 정의 | 쓰는 디바이스 | host와 일관성을 맞추는 채널 |
|---|---|---|---|
| HDM-H | Host-only Coherent | Type 3만 | 없음 (host 캐시 계층이 담당) |
| HDM-D | Device Coherent | Type 2만 | CXL.cache (D2H) |
| HDM-DB | Device Coherent using Back-Invalidate | Type 2 또는 Type 3 | CXL.mem의 BISnp / BIRsp |
일반적인 memory expander(Type 3)는 HDM-H입니다. Type 3도 direct peer-to-peer를 위해 HDM-DB를 쓸 수 있고, MLD와 G-FAM 디바이스는 multi-host 일관성을 위해 HDM-DB를 씁니다. 그리고 256B flit 모드를 구현하는 디바이스는 모두 HDM-DB를 지원해야 합니다. HDM-D 흐름은 68B flit 모드와의 호환을 위해 남아 있습니다.
#HDM-D — Bias 기반 일관성
HDM-D는 CXL 1.1부터 있던 Type 2의 bias 기반 일관성 모델을 씁니다.
| Bias | 성질 | 규격이 드는 쓰임 |
|---|---|---|
| Host Bias | host 접근이 빠름. 디바이스가 접근하려면 host를 거쳐야 함 | 작업을 넣을 때, 결과를 읽을 때 |
| Device Bias | 디바이스가 host 일관성 엔진을 거치지 않고 접근. host도 접근할 수 있지만 성능이 떨어짐 | 디바이스가 작업을 실행하는 동안 |
Type 2 디바이스는 bias를 page 단위(예: 4 KB당 1 bit)로 Bias Table에 기록하고, Transition Agent가 host 캐시를 정리하며 bias를 바꿉니다. LLM inference처럼 weight 적재 → 연산 → 결과 회수로 phase가 뚜렷하면 이 모델에 맞습니다. 전환 비용의 구체적인 크기는 TBD입니다.
#HDM-DB — Back-Invalidate Snoop
HDM-DB는 CXL 3.0에서 추가된 Back-Invalidate Snoop을 씁니다. CXL.mem에 디바이스가 host로 직접 snoop을 보내는 전용 채널이 생깁니다.
| 채널 | 방향 | 역할 |
|---|---|---|
| BISnp | S2M (device → host) | 디바이스가 host의 캐시 line을 snoop·무효화 요청 |
| BIRsp | M2S (host → device) | host의 응답 |
디바이스는 개별 cache line의 일관성을 inclusive snoop filter로 추적할 수 있고, host가 BISnp를 처리할 때까지 새 M2S 요청을 막을 수 있습니다. 2.2.2절의 bias 기반 추적 방식도 HDM-DB에서 모두 쓸 수 있습니다. 차이는 host로 가는 일관성 흐름이 CXL.cache D2H 대신 CXL.mem BISnp 채널만 쓴다는 점입니다.
#HDM-D와 HDM-DB의 차이
| 기준 | HDM-D | HDM-DB |
|---|---|---|
| 쓰는 디바이스 | Type 2 | Type 2, Type 3 (MLD·G-FAM 포함) |
| host와 일관성 채널 | CXL.cache | CXL.mem BISnp / BIRsp |
| flit 모드 | 68B flit 호환용 | 256B flit 디바이스는 필수 지원 |
| multi-host 일관성 | — | Shared FAM의 hardware coherency 모델에 사용 |
#Snoop Filter — Device 측 추적
BISnp를 모든 cache line마다 보내면 부담이 큽니다. 디바이스는 snoop filter로 host가 어떤 line을 갖고 있을 수 있는지 추적해, 필요한 경우에만 BISnp를 보냅니다. 규격은 inclusive snoop filter를 추적 방식의 예로 듭니다. filter가 host 캐시 내용을 모두 포함하면, filter에 없는 line은 host가 갖고 있지 않으므로 BISnp를 보낼 필요가 없습니다.
snoop filter의 크기는 디바이스 설계의 트레이드오프입니다. 작으면 추적할 수 있는 line이 줄어 snoop이 늘고, 크면 면적이 늘어납니다.
#Linux 측 — decoder의 target type
Linux에서 switch 수준 decoder가 어떤 메모리를 디코딩하는지는 sysfs의 target_type으로 보입니다.
$ cat /sys/bus/cxl/devices/decoder1.0/target_typeexpander # Type 3 memory. accelerator memory(Type 2)면 accelerator커널 ABI 문서(sysfs-bus-cxl, v5.14)에 따르면 이 값은 그 decode 계층에서 어떤 메모리 영역이 활성화되느냐에 따라 바뀔 수 있습니다. 메모리 장치 자체는 cxl list -M으로 보이고, 출력에는 memdev, ram_size, pmem_size, serial, host 같은 필드가 나옵니다.
#자주 하는 실수
#“Bias(HDM-D)와 BISnp(HDM-DB) 중 워크로드에 맞는 것을 고른다”
규격상 둘은 같은 선상의 선택지가 아닙니다. HDM-DB에서도 bias 기반 추적을 쓸 수 있고, 차이는 host와 일관성을 맞추는 채널입니다. 그리고 256B flit 디바이스는 HDM-DB 지원이 필수입니다.
#“Type 3의 주된 영역은 HDM-DB다”
일반적인 Type 3 memory expander는 HDM-H입니다. HDM-DB는 direct P2P나 multi-host 일관성이 필요한 Type 3(MLD·G-FAM 포함)가 씁니다.
#“Bias 전환은 단순한 flag”
Type 2 디바이스는 bias를 page 단위로 추적하고, 전환할 때 Transition Agent가 host 캐시를 정리합니다. 단순히 bit 하나를 바꾸는 일이 아닙니다.
#“Snoop filter가 크면 무조건 좋다”
면적 비용이 큽니다. 크기는 추적해야 할 line 수와 면적의 균형으로 정해집니다.
#정리
- HDM은 디바이스 메모리를 system coherent 주소 공간에 매핑해 host가 write-back 방식으로 접근하게 한 영역입니다.
- 영역은 HDM-H(host-only, Type 3), HDM-D(CXL.cache로 일관성, Type 2), HDM-DB(BISnp/BIRsp로 일관성, Type 2·3)로 나뉩니다.
- HDM-D는 page 단위 Host Bias / Device Bias로 일관성 비용을 phase별로 나눕니다.
- HDM-DB는 CXL 3.0의 BISnp 채널을 쓰고, 256B flit 디바이스는 반드시 지원해야 합니다.
- 디바이스는 inclusive snoop filter로 필요한 경우에만 BISnp를 보냅니다.
- Linux는 switch decoder의
target_type으로 accelerator(Type 2)와 expander(Type 3) 메모리를 구분합니다.
#다음 편
Ch 4: Pooling·GFAM·Fabric — Multi-host 메모리 공유에서 CXL 2.0 pooling과 3.0 coherent fabric, 그리고 *GFAM (Global Fabric Attached Memory)*가 어떻게 다중 host 메모리 공유를 가능하게 하는지를 본격적으로 분해합니다.
#관련 항목
- Ch 2: System Architecture — Type 1·2·3·MLD·MH-MLD
- Ch 8: CXL.mem — M2S·S2M·HDM Decoder — HDM Decoder의 mapping 구조
- HBM·GDDR 심화 Ch 10: CXL.mem 프로토콜 분해 — Bias·BISnp의 message 흐름
#시리즈 자료 출처 안내
이 글은 CXL 3.1·1.1 spec, Linux drivers/cxl/ 소스, ndctl 문서를 근거로 합니다. 시리즈 전체의 자료 정책은 Ch 1에 있습니다.
CXL 4.0 Internals · 3 of 15
- 1 Ch 1: CXL의 자리와 진화 — 1.1에서 4.0까지
- 2 Ch 2: System Architecture — Type 1·2·3·MLD·MH-MLD
- 3 Ch 3: 메모리 일관성 모델 — HDM-DB·HDM-D·Bias·BISnp
- 4 Ch 4: Pooling·GFAM·Fabric — Multi-host 메모리 공유
- 5 Ch 5: CXL 4.0의 핵심 새 기능 — 128 GT/s·Bundled Port
- 6 Ch 6: CXL.io — PCIe와의 차이·DOE·DVSEC
- 7 Ch 7: CXL.cache — D2H·H2D 흐름과 coherency state
- 8 Ch 8: CXL.mem — M2S·S2M·HDM Decoder
- 9 Ch 9: Flit Format — 68B vs 256B vs Latency-Optimized
- 10 Ch 10: ARB/MUX — 세 프로토콜의 PHY 다중화
- 11 Ch 11: Linux drivers/cxl/ 분석 — Mainline kernel CXL 구현
- 12 Ch 12: QEMU CXL 에뮬레이션 — 노트북에서 CXL 개발
- 13 Ch 13: Switching·Fabric Manager — 2.0 pooling에서 3.x fabric까지
- 14 Ch 14: Security — IDE·SPDM·TSP·CXL TEE
- 15 Ch 15: RAS·Performance·Compliance — 운용·검증의 마지막 단계
관련 글
Ch 4: Pooling·GFAM·Fabric — Multi-host 메모리 공유
CXL 2.0 pooling, CXL 3.x fabric, GFAM (Global Fabric Attached Memory).
같은 시리즈에서 이어 읽기
Ch 5: CXL 4.0의 핵심 새 기능 — 128 GT/s·Bundled Port
PCIe 7.0 기반 128 GT/s, Bundled Port·Streamlined Port의 동기와 효과.
같은 시리즈에서 이어 읽기
EFI·UEFI에서 CXL 초기화 — CEDT 생성과 HDM Decoder 사전 설정
EDK II 기반 UEFI에서 CXL 디바이스 초기화 — CEDT(CXL Early Discovery Table) 생성, HDM Decoder 사전 설정, ACPI handoff.
공통 태그 기반 추천
이 글을 참조하는 글 (6)
- CXL.mem 프로토콜 분해 — 왕복 횟수가 만드는 지연, 링크가 만드는 대역폭 — HBM·GDDR 심화
- Ch 8: CXL.mem — M2S·S2M·HDM Decoder — CXL 4.0 Internals
- Ch 7: CXL.cache — D2H·H2D 흐름과 coherency state — CXL 4.0 Internals
- Ch 6: CXL.io — PCIe와의 차이·DOE·DVSEC — CXL 4.0 Internals
- Ch 4: Pooling·GFAM·Fabric — Multi-host 메모리 공유 — CXL 4.0 Internals
- Ch 2: System Architecture — Type 1·2·3·MLD·MH-MLD — CXL 4.0 Internals