以下为PCIe的截图示例
[root@ngnodeb ~]# lspci -vvv -d 8086:0d5c
1b:00.0 Processing accelerators: Intel Corporation Device 0d5c (prog-if 01)
Subsystem: Intel Corporation Device 0000
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 27
NUMA node: 0
Region 0: Memory at a9000000 (64-bit, non-prefetchable) [size=16M]
Capabilities: [44] Power Management version 3
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold-)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [4c] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 512 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset+ SlotPowerLimit 25.000W
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+ FLReset-
MaxPayload 256 bytes, MaxReadReq 512 bytes
DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr- TransPend-
LnkCap: Port #0, Speed 8GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <4us, L1 <1us
ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 8GT/s, Width x16, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range ABCD, TimeoutDis+, LTR-, OBFF Not Supported
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+, EqualizationPhase1+
EqualizationPhase2+, EqualizationPhase3+, LinkEqualizationRequest-
Capabilities: [88] MSI: Enable- Count=1/32 Maskable+ 64bit+
Address: 00000000fee000d8 Data: 0000
Masking: 00000000 Pending: 00000000
Capabilities: [100 v2] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn-Capabilities: [148 v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
Arb: Fixed- WRR32- WRR64- WRR128-
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=01
Status: NegoPending- InProgress-
Capabilities: [248 v1] #19
Capabilities: [298 v1] Alternative Routing-ID Interpretation (ARI)
ARICap: MFVC- ACS-, Next Function: 0
ARICtl: MFVC- ACS-, Function Group: 0
Capabilities: [2a0 v1] Single Root I/O Virtualization (SR-IOV)
IOVCap: Migration-, Interrupt Message Number: 000
IOVCtl: Enable- Migration- Interrupt- MSE- ARIHierarchy+
IOVSta: Migration-
Initial VFs: 16, Total VFs: 16, Number of VFs: 0, Function Dependency Link: 00
VF offset: 256, stride: 1, Device ID: 0d5d
Supported Page Size: 00000553, System Page Size: 00000001
Region 0: Memory at 00000000aa000000 (64-bit, non-prefetchable)
VF Migration: offset: 00000000, BIR: 0
Capabilities: [3f8 v1] Vendor Specific Information: ID=0000 Rev=1 Len=308 <?>
Kernel driver in use: igb_uio
解释
说明:
UEMsk 掩码寄存器中的各个位通常用于指示设备的错误状态或支持的功能,而不是直接表示已发生的问题。因此,SDES+ 表示设备支持并启用了错误检测功能,而不是指示设备当前存在某个特定问题;
这是一段关于高级错误报告的信息,其中包含多个字段和值。以下是每个字段的详细解释:
Capabilities: [100 v1] Advanced Error Reporting
这是该设备支持高级错误报告的能力标识符。
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
这是未经校验的错误状态(Uncorrectable Error Status)位域。DLP表示Data Link Protocol错误;SDES表示Surprise Down Error Status;TLP表示Transaction Layer Packet错误;FCP表示Flow Control Protocol错误;CmpltTO表示Completion Timeout错误;CmpltAbrt表示Completion Abort错误;UnxCmplt表示Unexpected Completion错误;RxOF表示Receiver Overflow错误;MalfTLP表示Malformed TLP错误;ECRC表示End-to-End CRC错误;UnsupReq表示Unsupported Request错误;ACSViol表示ACS Violation错误。
UEMsk: DLP- SDES+ TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
这是未经校验的错误掩码(Uncorrectable Error Mask)。与UESta类似,但只有在相应位上置位时才会触发中断或记录日志。
UESvrt: DLP+ SDES- TLP+ FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
这是已经校验的错误状态(Correctable Error Status)位域。DLP+表示Data Link Protocol错误已被纠正;SDES-表示Surprise Down Error Status未发生;TLP+表示Transaction Layer Packet错误已被纠正;FCP+表示Flow Control Protocol错误已被纠正;RxOF+表示Receiver Overflow错误已被纠正;MalfTLP+表示Malformed TLP错误已被纠正;ECRC-表示End-to-End CRC错误未被纠正;UnsupReq-表示Unsupported Request错误未被纠正;ACSViol-表示ACS Violation错误未被纠正。
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
这是已知的可纠正错误(Correctable Error Status)位域。RxErr表示接收错误;BadTLP表示错误格式的TLP;BadDLLP表示无效的DLLP;Rollover表示计数器溢出;Timeout表示超时;NonFatalErr-表示非致命错误。
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
这是已知的可纠正错误掩码(Correctable Error Mask)。与CESta类似,但只有在相应位上置位时才会触发中断或记录日志。
AERCap: First Error Pointer: 00, ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-
MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap+
这是高级错误报告的能力寄存器。First Error Pointer表示第一个错误指针的位置;ECRCGenCap+表示设备支持生成ECRC校验码;ECRCGenEn-表示设备未启用ECRC校验码生成;ECRCChkCap+表示设备支持检查ECRC校验码;ECRCChkEn-表示设备未启用ECRC校验码检查;MultHdrRecCap-表示设备支持多个头部记录;MultHdrRecEn-表示设备未启用多个头部记录;TLPPfxPres-表示设备支持TLP前缀保留;HdrLogCap+表示设备支持头部日志记录。
HeaderLog: 4a000002 65000008 fc200000 00000000
这是高级错误报告的头部日志(Header Log)。它记录了最近发生的错误信息,其中每个32位数字都代表一条错误记录。该示例中有四条记录。
RootCmd: CERptEn- NFERptEn- FERptEn-
这是高级错误报告的命令寄存器。CERptEn-表示禁用可纠正错误报告;NFERptEn-表示启用非致命错误报告;FERptEn-表示启用致命错误报告。
RootSta: CERcvd- MultCERcvd- UERcvd- MultUERcvd-
FirstFatal- NonFatalMsg- FatalMsg- IntMsg 0
这是高级错误报告的状态寄存器。CERcvd-表示未收到可纠正错误;MultCERcvd-表示收到多个可纠正错误;UERcvd-表示收到未经校验的错误;MultUERcvd-表示收到多个未经校验的错误;FirstFatal-表示尚未收到致命错误;NonFatalMsg-表示存在非致命错误;FatalMsg-表示存在致命错误;IntMsg 0表示无中断信息。
ErrorSrc: ERR_COR: 0000 ERR_FATAL/NONFATAL: 0000
这是错误源(Error Source)寄存器。ERR_COR表示可纠正错误;ERR_FATAL/NONFATAL表示致命或非致命错误。在这个例子中,都没有发生错误。
headerlog解释
HeaderLog是高级错误报告的头部日志,它记录了最近发生的错误信息。在这个示例中,HeaderLog由四个32位数字组成:4a000002、65000008、fc200000和00000000。
每个32位数字代表一条错误记录,其中包含以下字段:
DW0: 错误状态(Error Status)。DW0的最高位(第31位)表示错误是否已经校验,如果该位为1,则表示该错误已经被纠正,如果该位为0,则表示该错误未经校验。DW0的其他位表示错误的类型和详细信息。
DW1: 物理地址(Physical Address)。DW1记录引起错误的物理地址。
DW2: 参考标签(Reference Tag)。DW2记录与引起错误的事务相关的参考标签(Reference Tag)。
DW3: 数据(Data)。DW3记录引起错误的数据。
具体来说,对于示例中的每个32位数字:
4a000002:表示一个未经校验的错误,错误类型为TLP错误。
65000008:表示一个未经校验的错误,错误类型为TLP错误。
fc200000:表示一个未经校验的错误,错误类型为TLP错误。
00000000:表示没有错误发生。
每个设备的HeaderLog格式可能会有所不同,但通常都会包含类似的字段,用于记录错误的类型、位置和详细信息。