본문으로 건너뛰기
PCIe Deep Dive · 6/19

Ch 6: Power Management — D-state·L-state·ASPM

· Hawk · 6분 읽기

#한 줄 요약

**“PCIe 전력은 device state (D)link state (L) 두 축으로 관리됩니다.” — D0(active)부터 D3cold(완전 차단)까지·L0(active)·L0s·L1·L1.1·L1.2·L2·L3까지. ASPMlink이 idle일 때 자동으로 L0s/L1 진입. L1 substates모바일·노트북의 BAR 대기 전력수십 mW에서 mW급으로 떨어뜨렸습니다.

Ch 5 Interrupts에서 MSI Memory Writeinterrupt 전달의 핵심임을 봤습니다. PM 상태에서는 *PME (Power Management Event)*가 wake-up 책임. 이 장은 D-state·L-state·ASPM·sub-states를 본격적으로 분해합니다.

#Device States (D0 ~ D3cold)

State의미
D0Active, 정상 동작
D1Light sleep — 일부 기능 비활성, 빠른 복귀 (optional)
D2Deeper sleep (optional)
D3hotConfiguration Space 외 대부분 차단, configuration 통한 wake 가능
D3cold전원 완전 차단Vaux만 유지, PME가 wake

D1·D2는 거의 안 씀. 실용은 D0 → D3hot → D3cold. D3cold가 최대 절전. *PCI-PM Capability (ID 0x01)*가 D-state 전환 제어.

State의미
L0Active, normal traffic
L0sLower power active — 수 µs 진입·복귀. one direction만 power down
L1Standby — 수 µs ~ 수십 µs, 양방향 power down
L1.1L1 substate — CLKREQ# 유지, 더 깊은 절전
L1.2L1 substate — CLKREQ# off, 최대 절전, 복귀 수백 µs
L2Sleep — 주 전원 off, Vaux 유지, PME 가능
L3Off — 완전 차단, PCIe 없음

#ASPM — Active State Power Management

PCIe Cap의 Link Control register에서 활성화. idle 시 자동으로 L0s 또는 L1 진입:

설정동작
DisabledL0 고정
L0sidle 시 L0s 진입 (수 µs 절전)
L1idle 시 L1 진입 (더 깊은 절전, 진입·복귀 더 느림)
L0s+L1둘 다 활성

양단 (RC·EP) 모두 동일 설정 필요. ASPM 협상은 Link CapL0s/L1 Exit Latencyapplication latency budget 결정.

#L1 Substates — L1.1·L1.2

PCIe 4.0+ device·노트북·모바일에서 기본 활성:

StateCLKREQ#RefCLK진입 latency복귀 latency
L1.1유지유지µsµs
L1.2offoffµs수백 µs

L1.2RefCLK까지 차단해서 최대 절전. NVMe SSD가 idle 시 L1.2수 mW만 소비. 다만 복귀 latency 길어 throughput burst에 영향.

*Latency Tolerance Reporting (LTR)*과 결합 — EP가 OS에 latency budget 알리고 RC가 deeper state 결정.

#PME — Power Management Event

D3hot·D3cold에서 wake-upPME Message로:

단계동작
1Device에 wake event (예: NIC가 magic packet 수신)
2Device가 PME Message TLP 발송 (Vaux 전원으로)
3RC가 PME 받고 ACPI handler 호출
4OS가 device를 D0로 복귀·driver resume

Wake-on-LAN이 이 메커니즘. Vaux 전원이 항상 살아있어야 가능 — standby 전력 소비.

#CLKREQ# — Clock Request

PCIe RefCLK100 MHz differential signal. device가 필요할 때만 활성:

시나리오CLKREQ#
L0·L0s·L1·L1.1low (CLK 필요)
L1.2high (CLK 차단 가능)
L2·L3high

노트북의 RefCLK 발진기L1.2 진입 시 stop수십 mW 절감. L1.2가 모바일 PCIe SSD의 필수 기능인 이유.

#D-state 전환 흐름

단계동작
1OS가 driver suspend handler 호출
2Driver가 device internal save·outstanding I/O drain
3Driver가 PCI-PM Capability의 Power State 비트 write (D0→D3)
4Device가 internal context save·power gating
5RC가 bridge·switch port도 함께 lower state (이전 device가 다 D3면)
6Resume 시 역순

#Linux PCIe PM 동작

영역위치
Driver runtime PMpm_runtime_* API
/sys/bus/pci/devices/<BDF>/power/control”auto” or “on”
/sys/bus/pci/devices/<BDF>/power/wakeupwake-up 활성 여부
ASPM policy/sys/module/pcie_aspm/parameters/policy

lspci -vv | grep -E "Power|ASPM"으로 현재 PM 설정 확인.

#자주 하는 실수

#”ASPM은 그냥 활성하면 좋다”

Latency-critical workload에서 ASPM L1 진입·복귀가 µs latency spike. NVMe random IOPS·latency 측정에서 ASPM 활성/비활성 차이 큼. production NVMe·high-throughput NICL0s/L1 비활성이 일반.

#”L1.2가 항상 더 좋다”

복귀 latency 수백 µsburst workload에는 throughput drop. 노트북 idle에는 좋지만 server에는 비추.

#”D3cold면 device가 완전 reset”

D3cold도 internal context 일부 유지 (vendor 구현). Driver는 항상 resume 시 full reinitialize 가정해야 안전.

#”PME는 항상 wake한다”

OS·BIOS·driver 모두 wake-up 활성화해야. /sys/.../wakeupenabled여야. security 정책으로 차단되기도.

#”ASPM이 boot loader 단계에 동작”

UEFI·BIOS 단계 ASPM 비활성이 일반. OS 진입 후 driver·ACPI로 활성. boot 시 link instabilityASPM과 무관.

#정리

  • D-statedevice 단위, L-statelink 단위 전력 관리.
  • 실용: D0·D3hot·D3cold + L0·L0s·L1·L1.2.
  • ASPMlink idle 시 자동 lower state 진입. latency budget 고려 필요.
  • *L1 substates (L1.1·L1.2)*가 모바일·노트북 PCIe의 mW급 절전 가능하게.
  • *CLKREQ#*가 RefCLK 활성 control. L1.2 = CLK off.
  • PME MessageD3cold·L2/L3에서 wake-up 트리거.
  • Linux PM: pm_runtime API + sysfs control + ASPM policy.

#다음 편

Ch 7: Error Handling — Correctable·Uncorrectable·AER·DPC에서 PCIe 에러 분류와 Advanced Error Reporting·Downstream Port Containment를 본격적으로 분해합니다.

#관련 항목

#시리즈 자료 출처 안내

본 글의 1차 자료·정책은 Ch 1 footer 참고.