ASPM
Jump to navigation
Jump to search
Overview
ASPM(Active-State Power Management)는 PCI Express(PCIe) 기반 장치의 전력 관리 기능으로, 장치가 데이터 전송 중이 아닐 때 저전력 상태로 진입하여 전력을 절약합니다. PCIe Gen3부터 지원됩니다.
Summary
- 무엇인가? PCIe 장치의 활성 상태 전력 관리 기능 (저전력 상태 진입)
- 왜 필요한가? 장치 idle 시 전력 절약, 모바일/데이터센터 에너지 효율 향상
- 언제 사용하는가? PCIe 장치 (네트워크, SSD, GPU 등)의 전력 관리 — 성능 vs 전력 트레이드오프 고려
---
Purpose
이 문서가 존재하는 이유
- Goal: ASPM의 작동 원리, 상태(L0s/L1), BIOS/커널 설정 방법 설명
- Scope: ASPM 상태, BIOS 설정, 커널 파라미터, 성능 영향
- Non-goals: PCIe 프로토콜 상세, 다른 PCIe 전력 관리 기능(PCIe Power Management Controller)
---
Key Concepts
| Concept | Description | Related |
|---|---|---|
| ASPM | Active-State Power Management — PCIe 장치 전력 관리 | PCIe |
| L0s | 저전력 대기 상태 — 빠른 복귀, 낮은 지연시간 | ASPM |
| L1 | 더 낮은 전력 상태 — 더 큰 전력 절약, 더 높은 지연시간 | ASPM |
| PCIe | Peripheral Component Interconnect Express — 고속 확장 버스 | ASPM |
| Exit Latency | 저전력 상태에서 복귀하는 데 걸리는 시간 | ASPM |
---
Architecture
ASPM은 PCIe 링크의 활성 상태를 모니터링하여 사용하지 않을 때 저전력 상태로 전환합니다:
graph TD
A[PCIe Device] --> B{Data Transmission?}
B -->|Yes| C[L0 State - Active]
B -->|No| D[L0s State - Low Power]
D --> E{Idle Duration?}
E -->|Short| F[Quick Resume - Low Latency]
E -->|Long| G[L1 State - Deeper Sleep]
G --> H[Higher Latency - More Power Saving]
C --> I[Full Performance]---
Workflow
ASPM 작동 흐름:
- 장치 데이터 전송 중 — L0 상태 (활성) 유지
- 전송 완료 후 idle 상태 진입
- 짧은 idle 시간 — L0s 상태 진입 (빠른 복귀)
- 긴 idle 시간 — L1 상태 진입 (더 큰 전력 절약)
- 데이터 전송 요청 — 저전력 상태에서 L0으로 복귀 (지연시간 발생)
| Stage | Input | Output |
|---|---|---|
| Transmission | 데이터 전송 요청 | L0 상태 (활성) |
| Idle Detection | 전송 완료, idle 시간 시작 | L0s 또는 L1 진입 결정 |
| L0s Entry | 짧은 idle 시간 (<512ns 복귀) | 저전력 대기 상태 |
| L1 Entry | 긴 idle 시간 (<4us 복귀) | 더 깊은 저전력 상태 |
| Resume | 데이터 전송 요청 | L0 상태로 복귀 (지연시간 발생) |
---
Detailed Explanation
ASPM State
ASPM은 두 가지 주요 저전력 상태를 제공합니다:
- L0s (Link State 0) — 빠른 복귀 지연시간, 최소 지연으로 에너지 절약 "대기" 상태
- L1 (Link State 1) — 더 높은 지연시간, 더 낮은 전력의 "대기" 상태 — L0s보다 더 큰 전력 절약 제공. 모바일 장치에서 전력 절약 극대화를 위해 자주 구현
ASPM 상태 확인 (Linux)
# ASPM 상태 확인
$ sudo lspci -vvvs c1:00.0 | grep -i speed
LnkCap: Port #0, Speed 8GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <512ns, L1 <4us
LnkSta: Speed 2.5GT/s (downgraded), Width x16 (ok)
LnkCap2: Supported Link Speeds: 2.5-8GT/s, Crosslink- Retimer- 2Retimers- DRS-
LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
BIOS에서 ASPM 설정
BIOS 설정에서 ASPM을 구성할 수 있으며, 일반적으로 L0/L0s/L1/L0sL1 옵션이 있습니다.
예: SMC X10SAE BIOS 옵션
- L0 — 모든 PCI Express 트랜잭션 및 기타 작업 활성화
- L0s — 빠른 복귀 지연시간, 에너지 절약 "대기" 상태
- L1 — 더 높은 지연시간, 더 낮은 전력 "대기" 상태 (옵션)
- L0sL1 — L0s와 L1 모두 활성화
커널 파라미터에서 ASPM 제어
GRUB에서 pcie_aspm=off 파라미터를 사용하여 "powersave" 또는 "default" 정책 사용을 방지하고 ASPM을 비활성화할 수 있습니다.
# /etc/default/grub 수정
GRUB_CMDLINE_LINUX="pcie_aspm=off"
# GRUB 업데이트
sudo update-grub
---
Configuration
BIOS 설정
BIOS에서 ASPM 모드 선택:
- 성능 우선 — L0sL1 또는 L1 활성화
- 전력 절약 우선 — L0sL1 활성화
- 호환성 우선 — L0 (ASPM 비활성화)
커널 파라미터
# /etc/default/grub
GRUB_CMDLINE_LINUX="pcie_aspm=off"
적용:
sudo update-grub
sudo reboot
---
Examples
Example 1: ASPM 상태 확인
# 특정 장치의 ASPM 상태 확인
$ sudo lspci -vvvs c1:00.0 | grep -i asp
LnkCap: Port #0, Speed 8GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <512ns, L1 <4us
LnkSta: Speed 2.5GT/s (downgraded), Width x16 (ok), ASPM L0s L1
Example 2: ASPM 비활성화
# GRUB에 pcie_aspm=off 추가
sudo sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="pcie_aspm=off /' /etc/default/grub
sudo update-grub
sudo reboot
# 재부팅 후 확인
$ cat /proc/cmdline | grep pcie_aspm
pcie_aspm=off
---
Best Practices
- 고성능 워크로드 (네트워크, 스토리지, GPU) — ASPM 비활성화 또는 L0s만 권장
- 모바일/배터리 장치 — L0sL1 활성화로 전력 절약 극대화
- 데이터센터 — 전력 비용 절감을 위해 L0sL1 활성화 고려
- 성능 문제 발생 시 — ASPM 비활성화로 지연시간 문제 해결
- BIOS와 커널 파라미터 일관성 유지 — 양쪽에서 동일한 설정 권장
---
Limitations
- ASPM 활성화 시 복귀 지연시간 발생 — 실시간 워크로드에 영향
- 일부 장치/마더보드에서 ASPM 호환성 문제
- L1 상태 진입 시 더 긴 복귀 시간 (최대 수 ms)
- PCIe 레인 속도 저하와 혼동 가능 (LnkSta에서 "downgraded" 표시)
- 일부 가상화 환경에서 ASPM 지원 제한
---
References
- https://www.teledynelecroy.com/doc/active-state-power-management
- https://en.wikipedia.org/wiki/Active_State_Power_Management
---
Related Pages
---
Knowledge Graph
Related