AER (Advanced Error Reporting)

From HPCWIKI
Jump to navigation Jump to search

Template:Status

Template:TOC

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 작동 흐름:

  1. PCIe 장치에서 오류 감지
  2. 오류 유형 분류 — Correctable 또는 Uncorrectable
  3. Correctable 경우 — 하드웨어 자동 복구, AER 드라이버가 로그 기록
  4. Uncorrectable 경우 — AER 드라이버가 장치 드라이버의 복구 루틴 호출
  5. 장치 드라이버가 링크 복구 시도
  6. 복구 실패 시 장치 비활성화
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


Related Pages

Knowledge Graph

Related

LinuxServerHardwareNetwork