[PCIe] Power Management 완전 정리 | ASPM, L0s, L1, L1 Sub-States, PME

2026. 6. 17. 22:13기초지식

반응형

PCIe Power Management 개요

PCIe Power Management는 두 가지 레벨로 구성된다. 하나는 소프트웨어가 제어하는 Device Power State(D0~D3)이고, 다른 하나는 하드웨어가 자동으로 처리하는 Link Power State(L0, L0s, L1, L2, L3)다. ASPM(Active State Power Management)은 소프트웨어 개입 없이 링크 레벨에서 자동으로 저전력 상태로 전환하는 메커니즘이다.


Link Power States

PCIe Link는 활성도에 따라 여러 Power State를 가진다. 상위 레벨 숫자일수록 더 깊은 저전력 상태다.

  • L0 - 정상 동작 상태. 모든 TLP/DLLP 전송 가능. 최대 전력 소비
  • L0s - Tx 측만 Electrical Idle 진입. 빠른 복귀 가능 (수십~수백 ns). L0 대비 약간의 전력 절감. FTS로 복귀
  • L1 - 양방향 Electrical Idle. L0s보다 더 깊은 절전. 복귀 시간 수 us. PM_Enter_L1/PM_Request_Ack DLLP 교환 필요
  • L1.1 / L1.2 - L1 Sub-States. PCIe CLKREQ# 신호와 연동하여 추가 전력 절감. L1.2는 PLL까지 오프
  • L2 - 주전원 오프 상태. Vaux(보조 전원)만 유지. PME 웨이크업 가능. 복귀 시간 ms 단위
  • L3 - 완전 전원 오프. 링크 완전 종료. 재초기화(LTSSM Detect) 필요
// Link Power State 전환 흐름 (ASPM 기준)
// L0 --[Idle 감지]--> L0s (ASPM L0s 활성화 시)
// L0 --[PM DLLP 교환]--> L1 (ASPM L1 활성화 시)
// L1 --[CLKREQ# deassert]--> L1.1 또는 L1.2
// L1 --[소프트웨어]--> L2/L3
//
// 복귀 시간 (대략):
// L0s  -> L0 : 수십 ns ~ 수백 ns (FTS 전송 후)
// L1   -> L0 : 수 us ~ 수십 us
// L1.2 -> L0 : 수십 us ~ 수백 us (PLL 재잠금 필요)
// L2   -> L0 : ms 단위 (전원 안정화 필요)

ASPM (Active State Power Management)

ASPM은 링크가 유휴(Idle) 상태일 때 자동으로 L0s 또는 L1 상태로 전환하는 하드웨어 기반 전력 관리 메커니즘이다. 소프트웨어가 ASPM 모드를 활성화하면 이후 전환은 하드웨어가 자동 처리한다.

ASPM 모드

  • Disabled - ASPM 비활성화. L0만 사용
  • L0s Only - L0s 자동 전환 활성화
  • L1 Only - L1 자동 전환 활성화
  • L0s and L1 - 양쪽 모두 활성화. 유휴 시 L0s 진입 후 더 깊은 유휴 시 L1 전환

ASPM 설정 레지스터

// PCIe Capability Structure - Link Control Register (offset 0x10)
// [1:0] ASPM Control
//   00 = Disabled
//   01 = L0s Entry Enabled
//   10 = L1 Entry Enabled
//   11 = L0s and L1 Entry Enabled
//
// Link Capabilities Register (offset 0x0C)
// [11:10] ASPM Support
//   00 = No ASPM support
//   01 = L0s support
//   10 = L1 support (Reserved in some specs)
//   11 = L0s and L1 support
//
// ASPM은 양쪽 포트(Upstream + Downstream) 모두 활성화해야 동작

L0s 동작

L0s는 Tx 측이 일정 시간 전송할 TLP가 없을 때 자동으로 Electrical Idle 상태로 진입한다. Rx 측은 계속 수신 대기 상태를 유지한다.

  • 진입 조건 - ASPM L0s 활성화 상태에서 Tx 측이 일정 시간(L0s Entry Idle Time) 동안 전송 없음
  • 진입 과정 - EIOS 전송 후 Tx Electrical Idle 진입. Physical Layer 동작
  • 복귀 과정 - Tx가 FTS(Fast Training Sequence) N개 전송 후 L0 복귀. N은 Link Training 중 협상된 값
  • 복귀 Latency - FTS N개 전송 시간 + PLL 재잠금 시간. 수십~수백 ns 수준
  • L0s는 단방향(Tx Only). 한 방향만 L0s 진입 가능. 반대 방향은 L0 유지

L1 동작

L1은 양방향 Electrical Idle 상태다. 진입 전 DLLP 교환이 필요하며 L0s보다 더 많은 전력을 절감한다.

ASPM L1 진입 과정

  • Downstream Port가 링크 유휴 감지 후 PM_Enter_L1 DLLP 전송
  • Upstream Port가 PM_Request_Ack DLLP로 응답
  • 양측이 EIOS 전송 후 Electrical Idle 진입
  • CLKREQ# 신호(선택): L1 Sub-States 지원 시 추가 전력 절감 가능

소프트웨어 L1 진입 (PM L1)

소프트웨어 요청으로 D-state 변경 시에도 L1 진입이 발생한다. D1, D2, D3hot 상태에서는 링크가 L1에 머문다.

// L1 진입 DLLP 시퀀스
// 1. Downstream Port: PM_Enter_L1 DLLP 전송
//    (DLLP Type = 0x20, L1 진입 요청)
// 2. Upstream Port: PM_Request_Ack DLLP 응답
//    (DLLP Type = 0x24, 수락)
// 3. 양측: EIOS 전송 -> Electrical Idle 진입
//
// L1 복귀:
// 1. Downstream Port: EIEOS (또는 FTS, Gen1/2) 전송
// 2. 양측: Recovery 상태 진입 -> L0 복귀

L1 Sub-States (L1.1, L1.2)

L1 Sub-States는 PCIe 3.1/4.0 스펙에 추가된 기능으로, L1 상태에서 추가 전력 절감이 가능하다. CLKREQ# 신호와 연동한다.

  • L1.1 - L1 상태에서 CLKREQ# deassert. 클럭은 유지하나 일부 회로 전력 오프. L1 대비 추가 전력 절감
  • L1.2 - CLKREQ# deassert + PLL 오프. 가장 깊은 절전. 복귀 시 PLL 재잠금 필요. L1.1보다 복귀 시간 길다
  • L1 Sub-States는 LTR(Latency Tolerance Reporting)과 연동: 디바이스가 허용 가능한 복귀 Latency를 Host에 보고
  • OBFF(Optimized Buffer Flush/Fill): L1.2 진입 전 버퍼를 플러시하여 깨어났을 때 지연 최소화
// L1 PM Substates Capability Structure (Extended Capability)
// Cap ID = 0x001E
//
// L1 PM Substates Capabilities Register:
// bit[0]: PCI-PM L1.2 Supported
// bit[1]: PCI-PM L1.1 Supported
// bit[2]: ASPM L1.2 Supported
// bit[3]: ASPM L1.1 Supported
// bit[4]: L1 PM Substates Supported
//
// L1 PM Substates Control 1 Register:
// bit[0]: PCI-PM L1.2 Enable
// bit[1]: PCI-PM L1.1 Enable
// bit[2]: ASPM L1.2 Enable
// bit[3]: ASPM L1.1 Enable
// [25:16]: Common_Mode_Restore_Time (100ns 단위)
// [31:26]: LTR_L1.2_THRESHOLD_Value

Device Power States (D-States)

소프트웨어(OS/BIOS)가 PCI Power Management Capability를 통해 디바이스 전력 상태를 제어한다.

  • D0 - 완전 활성 상태. 모든 기능 정상 동작
  • D1 - 저전력 상태. 디바이스 정의에 따라 다름. 링크는 L1 유지
  • D2 - D1보다 깊은 저전력. 디바이스 정의에 따라 다름
  • D3hot - 최소 기능만 유지. PME 웨이크업 가능. 전원은 연결된 상태. 링크 L1 또는 L2
  • D3cold - 전원 완전 차단. Vaux만 유지. PME 웨이크업 가능. 링크 L2/L3
// PCI Power Management Capability (Cap ID = 0x01)
// Power Management Control/Status Register (PMCSR):
// [1:0] PowerState
//   00 = D0
//   01 = D1
//   10 = D2
//   11 = D3hot
//
// D3cold 전환: 소프트웨어가 D3hot 설정 후 전원 차단 (플랫폼 의존)
//
// D-State와 Link State 관계:
// D0        -> L0 (활성) 또는 ASPM (L0s/L1)
// D1, D2    -> L1 (ASPM 또는 PM)
// D3hot     -> L1 또는 L2
// D3cold    -> L2 또는 L3

PME (Power Management Event)

PME는 저전력 상태의 디바이스가 시스템을 웨이크업하는 메커니즘이다. D3cold/L2 상태에서도 PME 신호를 생성할 수 있다.

  • PME# 사이드밴드 신호 또는 PM_PME Message TLP로 전달
  • D3cold 상태에서는 사이드밴드 PME# 신호 사용 (TLP 전송 불가)
  • D3hot 이상에서는 PM_PME Message TLP로 전달 가능
  • Root Complex가 PME 수신 시 시스템 웨이크업 처리
  • PMCSR의 PME_En 비트로 PME 활성화/비활성화 제어

LTR (Latency Tolerance Reporting)

LTR은 Endpoint가 자신이 허용 가능한 서비스 지연(Latency)을 Root Complex에 보고하는 메커니즘이다. PCIe 3.0에서 추가됐다.

  • LTR Message TLP를 통해 Snoop Latency, No-Snoop Latency 값 보고
  • Root Complex는 LTR 값을 참고하여 L1.2 진입 타이밍 결정
  • 디바이스가 큰 LTR 값 보고 = 긴 복귀 Latency 허용 = 더 깊은 절전 가능
  • LTR Mechanism Enable: Device Control 2 Register bit[10]

다음 글

기초지식 카테고리 글 더보기