본문으로 건너뛰기
CXL 4.0 Internals · 10/15

Ch 10: ARB/MUX — 세 프로토콜의 PHY 다중화

· Hawk · 8분 읽기

#한 줄 요약

“ARB/MUX는 Transaction Layer와 Physical Layer 사이에 위치하며, 세 프로토콜의 메시지를 같은 PHY로 시분할하는 CXL 고유 layer입니다.”vLSM (virtual Link State Machine)이 protocol별 link state를 관리하고, ALMPprotocol 협상·power transition을 제어합니다. PCIe에는 없는 component로, CXL이 protocol을 통합한 방식의 핵심입니다.

Ch 9에서 flit 단위 데이터 전송을 봤습니다. 이 장은 flit에 어느 protocol을 어떻게 packing할지 결정하는 ARB/MUX layer입니다.

#ARB/MUX의 위치

CXL의 protocol stack에서:

Layer역할
Applicationhost CPU·디바이스 SW
Transaction LayerCXL.io/cache/mem 메시지 단위 처리
ARB/MUX세 프로토콜의 flit packing·multiplex
Link LayerFlit 단위 reliability (CRC·FEC·LLR retry)
Physical LayerFlex Bus PHY (PCIe 5.0/6.0/7.0)

ARB/MUX는 CXL 고유입니다. PCIe에는 없는 layer로, CXL이 multi-protocol을 한 PHY로 통합한 방식의 핵심입니다.

#왜 ARB/MUX가 필요한가

세 프로토콜이 같은 PHY를 공유하려면 누가 언제 PHY를 쓸지 결정하는 arbiter가 필요합니다.

시나리오ARB/MUX 결정
CXL.mem read와 CXL.io DMA가 동시우선순위 비교 후 latency-sensitive 먼저
CXL.cache snoop과 CXL.io configsnoop이 낮은 latency 필요 → 먼저
모든 프로토콜이 idleEmpty Flit으로 link 유지
Power transition모든 protocol을 idle로 정렬 후 진입

ARB/MUX는 protocol별 traffic profile을 알고 Flit packing 결정을 합니다.

각 protocol마다 독립 link state를 관리:

Link State의미
L0Active, 전송 가능
L0pActive, 일부 lane만 사용 (4.0)
L1Sleep, fast recovery
L2Deep sleep, slow recovery
Disabledprotocol 비활성

세 protocol각자 vLSM을 가집니다. 한 protocol이 L1·L2에 들어가도 다른 protocol은 L0 유지 가능.

State combination동작
io=L0, cache=L0, mem=L0모두 active
io=L0, cache=L1, mem=L0cache idle, io·mem만 사용
io=L1, cache=L0, mem=L0io idle (config 끝남), cache·mem 사용
모두 L1링크 idle (power save)

ALMPprotocol negotiation·power transition을 위한 control packet입니다.

용도사용
Initial Traininghost·device 간 protocol 합의 (어떤 protocol 활성화)
Power TransitionL1·L2 진입·복귀 협상
Status Sync양 끝의 state synchronization
ALMP Bypass복잡한 협상 생략 (고급 모드)

ALMP는 flit 안에 packing되어 흐르되, 우선순위가 매우 높습니다. transmitter는 ALMP를 지연 없이 보냅니다.

#Arbitration Policy

ARB/MUX가 어느 protocol을 우선할지의 기본 정책:

우선순위Protocol이유
1순위CXL.cache snoop·responselatency-critical, cache coherency 유지
2순위CXL.mem read response·write completionhost CPU stall 회피
3순위CXL.cache·CXL.mem requestnormal traffic
4순위CXL.iobulk transfer·config (latency 덜 critical)

이 정책은 기본 가이드. 디바이스·host implementation조정 가능합니다. 워크로드별 fine-tuning성능 차이를 만듭니다.

#Flit Packing 흐름

ARB/MUX의 한 flit 만들기 흐름:

단계동작
1각 protocol queue에서 대기 중인 message 확인
2Arbitration policy로 우선순위 결정
3Highest-priority message를 slot 0에 할당
4남은 slot에 다른 message packing
5DLLP (flow control)·LLR header 추가
6CRC·FEC 계산
7Link Layer로 flit 전달

Flit 가득 차지 않아도 latency 요구전송할 수 있음 (Latency-Optimized 모드).

#Bypass Feature

고급 모드ARB/MUX의 일부 결정을 생략합니다:

일반Bypass
매 flit마다 arbitrationminiature heuristic만 사용
Full ALMP negotiation간소화된 protocol 합의
State machine 전체fast path만

Bypass는 deterministic workload(예측 가능한 traffic pattern)에서 latency 절감에 효과적. 복잡한 mixed traffic에는 full ARB/MUX가 권장.

#L0p (4.0의 새 power state)

CXL 4.0의 L0pactive 상태에서 일부 lane만 사용하는 state:

상태Lane 사용Bandwidth
L0전체 (예: x16)256 GB/s
L0p일부 (예: x8)128 GB/s
L100 (sleep)

L0p의 가치:

  • 유휴 워크로드에서 bandwidth 줄이고 power save
  • L1 진입·복귀의 latency 페널티 회피
  • 동적 dynamic scaling 가능

ALMP가 L0 ↔ L0p ↔ L1 전환을 협상합니다.

#CXL 4.0 vs 이전 — ARB/MUX 변경

ARB/MUX 자체는 대부분 그대로. 4.0의 추가:

변경의미
L0p state 지원부분 lane active
Bundled Port awarenessport group 단위 ARB
Improved Latency-Optimizedsmall message faster transmit

근본 architecture 변경 없음 — backward compat 유지.

#Linux 측 — ARB/MUX 인식

ARB/MUX 자체는 firmware·hardware 결합으로 동작. Linux 측 직접 인식·제어 minimal. 다만 상태 monitoring 가능:

Terminal window
# CXL device state monitoring (vendor-specific)
$ cxl monitor -m mem0 | grep -i state
[2026-06-19 09:00:00] CXL.mem vLSM: L0
[2026-06-19 09:00:30] CXL.cache vLSM: L0 → L1 (idle)
# bpftrace로 ALMP 트래픽 추적 (vendor·platform 의존)
$ bpftrace -e 'kprobe:cxl_almp_send { @[arg1] = count(); }'

상세 동작은 device firmware·BIOS·platform OEM대부분 hide. 운영자는 상태 trend monitoring만 일반적.

#자주 하는 실수

#”ARB/MUX는 단순한 multiplexer”

정교한 arbiter입니다. 3개 protocol·여러 vLSM·power state·ALMP동시 관리. firmware 복잡도가 매우 높음.

#”Latency-critical 트래픽은 항상 1순위”

기본 policy는 그렇지만 워크로드별 조정 가능. bulk transfer 위주에서는 throughput에 우선순위를 줄 수도 있음. vendor firmware tuning.

#”L1·L2 entry는 자동”

ALMP 협상 필요합니다. 양 끝의 idle 인식state sync가 필요. protocol 별로 다른 시점에 idle.

#”ARB/MUX는 host·device 양쪽에 같은 implementation”

기능은 같지만 implementation 다름. Host의 ARB/MUX는 CPU 메모리 컨트롤러 내장, device는 별도 controller chip. Symmetric protocol·asymmetric implementation.

#”Bypass mode가 항상 빠르다”

Predictable workload에서만. Mixed traffic·dynamic workloadfull ARB/MUX가 더 안정적·결국 더 빠름. Bypass는 전문 workload tuning 영역.

#정리

  • ARB/MUXTransaction Layer와 Physical Layer 사이의 multiplexer — CXL 고유 layer입니다.
  • vLSMprotocol별 link state 관리. L0·L0p·L1·L2·Disabled.
  • ALMPprotocol negotiation·power transition을 위한 control packet.
  • Arbitration policy: snoop·response 1순위 → mem/cache request → io 순.
  • Bypass Featurepredictable workloadlatency 절감.
  • CXL 4.0의 L0p state부분 lane activedynamic bandwidth scaling.

#다음 편

Ch 11: Linux drivers/cxl/ 분석 — Mainline kernel CXL 구현에서 Linux 6.x의 CXL subsystem 코드 구조probe 흐름을 본격적으로 분해합니다.

#관련 항목

#시리즈 자료 출처 안내

본 글은 CXL Consortium·PCI-SIG 공개 자료를 1차 자료로 합니다. CXL 4.0 Specification은 § navigation aid로만 인용. 자세한 spec 인용 정책은 Ch 1 footer 참고.