AER (Advanced Error Reporting)
Overview
AER(Advanced Error Reporting)는 PCI Express(PCIe) 기반 장치의 오류 보고 및 복구 메커니즘으로, 기본 오류 보고 방식보다 향상된 오류 감지, 보고, 복구를 제공합니다.
Summary
- 무엇인가? PCIe 장치의 고급 오류 보고(AER) 기능 — Correctable/Uncorrectable 오류 분류 및 복구
- 왜 필요한가? NVMe, GPU, M.2 등 PCIe 장치의 오류 감지 및 자동 복구, 시스템 안정성 향상
- 언제 사용하는가? PCIe 장치 오류 발생 시 디버깅, 부팅 실패 시 pci=noaer/pcie_aspm=off 커널 파라미터 적용
Purpose
이 문서가 존재하는 이유
- Goal: AER의 작동 원리, 오류 유형, Linux 커널 처리 방식, 문제 해결 방법 설명
- Scope: AER 오류 분류, Bad TLP 문제, 커널 파라미터, NVMe AER 이슈
- Non-goals: PCIe 프로토콜 상세, 다른 PCIe 오류 메커니즘(ACS, ARI)
Key Concepts
| Concept | Description | Related |
|---|---|---|
| AER | Advanced Error Reporting — PCIe 고급 오류 보고 기능 | PCIe |
| Correctable Error | 하드웨어 자동 복구 — 소프트웨어 개입 불필요, 데이터 손실 없음 | AER |
| Uncorrectable Error | 복구 불가 — Fatal(치명적) 또는 Non-fatal(비치명적) | AER |
| Bad TLP | PCIe 트랜잭션 레이어의 잘못된 데이터 패킷 — AER 오류의 주요 원인 | AER |
| NVMe | PCIe 기반 저장 장치 인터페이스 — AER 오류 빈발 대상 | SSD |
| pci=noaer | AER 오류 보고 비활성화 커널 파라미터 | Kernel boot param |
Architecture
AER의 오류 처리 흐름:
graph TD
A[PCIe Device] --> B{Error Detected?}
B -->|No| C[Normal Operation]
B -->|Yes| D{Error Type?}
D -->|Correctable| E[Hardware Auto-Recovery]
E --> F[AER Driver Logs Message]
D -->|Uncorrectable| G{Severity?}
G -->|Fatal| H[Link Unreliable]
H --> I[AER Driver Invokes Recovery]
I --> J[Device Driver Recovery Routine]
G -->|Non-Fatal| K[Unreliable Transaction]
K --> I
J --> L[Link Recovery Attempt]
L --> M{Recovery Success?}
M -->|Yes| C
M -->|No| N[Device Disabled]
Workflow
AER 작동 흐름:
- PCIe 장치에서 오류 감지
- 오류 유형 분류 — Correctable 또는 Uncorrectable
- Correctable 경우 — 하드웨어 자동 복구, AER 드라이버가 로그 기록
- Uncorrectable 경우 — AER 드라이버가 장치 드라이버의 복구 루틴 호출
- 장치 드라이버가 링크 복구 시도
- 복구 실패 시 장치 비활성화
| Stage | Input | Output |
|---|---|---|
| Error Detection | PCIe 장치 오류 | Correctable/Uncorrectable 분류 |
| Correctable Recovery | Correctable 오류 | 하드웨어 자동 복구, 로그 기록 |
| Uncorrectable Recovery | Uncorrectable 오류 | 장치 드라이버 복구 루틴 호출 |
| Bad TLP Handling | Bad TLP 감지 | 커널 파라미터 적용 검토 |
| Boot Failure | 부팅 실패 (AER 오류) | pci=noaer/pcie_aspm=off 적용 |
Detailed Explanation
AER 오류 유형
- Correctable Error — PCI Express 프로토콜이 소프트웨어 개입 없이 자동 복구하며, 데이터 손실 위험이 없음
- Uncorrectable Error (Fatal) — 치명적 오류로 링크가 신뢰할 수 없게 됨
- Uncorrectable Error (Non-Fatal) — 비치명적 오류로 신뢰할 수 없는 트랜잭션 발생
Linux 커널 AER 드라이버
Linux 커널의 AER 드라이버는 이러한 이벤트 보고 및 복구를 처리합니다:
- Correctable 이벤트 — AER 드라이버가 로그 메시지를 기록하고 하드웨어가 복구
- Uncorrectable 오류 — AER 드라이버가 장치 드라이버의 적절한 복구 루틴 호출
- 장치 드라이버는 초기화 시 복구 루틴을 등록할 수 있음
Bad TLP Issues
PCIe 장치(M.2, GPU 등)에서 Bad TLP(트랜잭션 레이어 패킷) 문제가 다양한 플랫폼에서 보고되고 있습니다. NVMe AER 오류는 부팅 시 여러 시스템에서 빈번하게 발생합니다.
이 오류는 PCIe 컨트롤러가 특정 장치의 구성 공간에 접근하는 동안 문제가 발생했음을 의미합니다. 하드웨어 버그, 마더보드의 PCIe 루트 컨트롤러, 또는 두 장치의 상호작용이 원인일 수 있습니다.
커널 파라미터: pci=noaer
pci=noaer 지시어는 AER 오류 보고를 비활성화합니다. 오류 보고는 로그 파일에 기록되며, 각 오류는 CPU에 시간 소모적인 IRQ를 전송합니다. 빠른 오류 보고 흐름은 드라이브를 범람시키고 NVMe 대역폭을 차단하여 부팅을 느리게 하거나 중단시킬 수 있습니다.
커널 파라미터: pcie_aspm=off
PCIe 활성 상태 전력 관리를 강제로 활성화 또는 비활성화합니다:
- off — ASPM 비활성화
- force — ASPM 강제 활성화 (시스템 잠금 위험)
커널 파라미터: pci=nommconf
pci=nommconf 옵션은 Memory-Mapped PCI Configuration Space를 비활성화합니다. 이 접근 방식 변경은 AER 문제를 우회할 수 있습니다.
Configuration
GRUB 커널 파라미터 설정
# /etc/default/grub 수정
GRUB_CMDLINE_LINUX_DEFAULT="pci=noaer pcie_aspm=off amd64_edac.ecc_enable_override=1"
# GRUB 업데이트
sudo update-grub
# 재부팅
sudo reboot
파라미터 적용 순서
1. 먼저 pcie_aspm=off 시도 2. 효과가 없으면 pci=noaer 시도 3. 효과가 있으면 영구 적용 (update-grub 실행)
Examples
Example 1: AER 오류 로그 확인
# AER 오류 로그 확인
$ dmesg | grep -i aer
[ 2.345678] pci 0000:00:1c.0: AER: Correctable error received
[ 2.456789] pci 0000:03:00.0: AER: Device error detected
[ 2.567890] nvme 0000:03:00.0: AER: nvme AER issue detected
# Bad TLP 오류 확인
$ dmesg | grep -i "bad tlp"
[ 2.678901] pci 0000:00:1c.0: AER: Bad TLP associated with device 0000:03:00.0
Example 2: pci=noaer 적용
# GRUB에 pci=noaer 추가
sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="pci=noaer /' /etc/default/grub
sudo update-grub
sudo reboot
# 재부팅 후 확인
$ cat /proc/cmdline | grep pci=noaer
pci=noaer pcie_aspm=off
Example 3: pcie_aspm=off 적용
# GRUB에 pcie_aspm=off 추가
sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="pcie_aspm=off /' /etc/default/grub
sudo update-grub
sudo reboot
Best Practices
- AER 오류가 빈번하게 발생하면 pci=noaer 또는 pcie_aspm=off 적용
- NVMe AER 오류는 부팅 속도에 직접적인 영향 — 우선적으로 해결
- pci=nommconf는 AER 문제 우회용 — 근본 해결 아님
- AMD EPYC 시스템에서는 amd64_edac.ecc_enable_override=1 추가 권장
- Ubuntu 팀은 이 문제를 Linux 커널 버그로 인식 (Bug #1521173)
- 하드웨어 교체 전 커널 파라미터로 우회 시도
Limitations
- pci=noaer는 오류 보고를 완전히 비활성화 — 실제 하드웨어 문제 숨길 수 있음
- pcie_aspm=off는 전력 관리 비활성화로 전력 소비 증가
- pci=nommconf는 구성 공간 접근 방식 변경 — 성능 영향 가능
- 근본 원인이 하드웨어 결함일 경우 우회 방법만 제공
- 일부 시스템에서 커널 파라미터 적용 후 다른 호환성 문제 발생 가능
References
- https://www.plda.com/pcie-glossary/aer
- https://www.kernel.org/doc/html/v4.14/admin-guide/kernel-parameters.html
- https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1521173
- https://askubuntu.com/questions/771899/pcie-bus-error-severity-corrected
- https://askubuntu.com/questions/1209597/os-is-not-loading-due-to-bad-tlp-in-recovery-mode
Related Pages
Knowledge Graph
Related