PCIe AER의 기본 개념과 위치
PCIe는 베이스라인 기능과 Advanced Error Reporting 기능이라는 두 가지 오류 보고 패러다임을 정의하며, AER은 PCIe Advanced Error Reporting 확장 기능 구조로 구현되어 더욱 강력한 오류 보고를 제공합니다. AER은 확장 기능(Cap ID 0001h)으로서 확장 구성 공간(오프셋 100h 이상)에 구현되며, ECAM을 통해서만 액세스 가능합니다.
AER 확장 기능의 레지스터 구조
AER 레지스터는 PCIe 엔드포인트의 "블랙박스 플라이트 레코더"로 기능하며, 피씨 확장 구성 공간 내에 구조적으로 정의됩니다. 이 구조는 Uncorrectable Error Status, Correctable Error Status 및 각각의 Mask 레지스터를 포함한 여러 32비트 레지스터로 구성되며, Advanced Error Interrupt Message Number와 Header Log도 보유합니다.
오류 타입별 심각도 분류 및 처리
Correctable 오류는 인터페이스의 기능에 영향을 미치지 않으며, PCIe 프로토콜은 소프트웨어 개입이나 데이터 손실 없이 복구할 수 있고, 이들은 하드웨어에 의해 감지 및 수정됩니다. 반면 Uncorrectable 오류는 하드웨어가 자동으로 수정할 수 없는 중대한 PCIe 장애로서 운영체제의 개입이 필요하며, Non-Fatal 오류(예: poisoned TLP)는 특정 트랜잭션이 실패했지만 물리적 PCIe 링크는 신뢰할 수 있는 상태이고, 운영체제는 일반적으로 해당 디바이스 드라이버에 작업을 중단하고 재시도하도록 알림으로써 해결할 수 있습니다.
Root Port 기반의 오류 수집 및 처리
AER이 활성화되면 PCIe 디바이스는 오류를 감지할 때 자동으로 오류 메시지를 위의 PCIe Root Port에 전송하고, Root Port는 오류 보고 메시지를 수신한 후 내부적으로 처리하여 PCIe 기능 구조에 기록하며, 기록된 오류 정보는 Error Source Identification 레지스터에 오류 보고 에이전트의 요청자 ID를 저장하고 Root Error Status 레지스터의 오류 비트를 설정하는 방식으로 구현되고, Root Error Command 레지스터에서 AER 오류 보고가 활성화되면 Root Port는 오류 감지 시 인터럽트를 생성합니다.