在之前,我撰寫了淺談PCI Express: Advanced Error Reporting(AER)文章介紹了整個Advanced Error Report(AER)的錯誤回報機制,文中提到AER主要可以分為Uncorrectable Errors和Correctable Errors。
■ Issue Description & Reproduce
$ lspci -s 00:0a.0 -vvvv 00:0a.0 PCI bridge: Intel Corporation Device 19a5 (rev
11) (prog-if 00 [Normal decode]) Capabilities: [100 v1] 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-
AdvNonFatalErr- CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+ |
■ LeCroy PCIe Analyzer
接下來,如Figure 2,在時間點(3)的時候,M.2 SSD突然從Gen3退回到Gen1並且開始傳輸Gen1 format的Training Sequence(TS1、TS2),此時Root Port還在用Gen3的語調在傳輸Training Sequence。
由於雙方已不再同一個速度下傳輸TS packet,所以Root Port已經看不懂device所講的話,在時間點(4)的時候讓link回到Polling
State重新retrain link。
由於時間點(3)已經暗示M.2 SSD可能因為電位變化而導致link回到Polling State,所以測量了一下發生問題的時候電壓的變化時如何,如Figure 3,當fio指令執行下去時,M.2 SSD的3.3V源頭,從3.3V掉到了2.76V(約17%),因而導致M.2 SSD瞬間掉電而發出error format TLP而且退回到Polling State。
Blog主,你好,
回覆刪除我最近也在閱讀PCIe的Spec文件(我是用PCIe 4.0),
跟著您的思路走,
我發現到有幾個問題不太懂,所以想請教一下
UESta:裡面的TLP-指的是哪種錯誤?
我看Spec裡面跟TLP相關又是Uncorrectable有
1.MC Blocked TLP
2.TLP Prefix Blocked
3.Poisoned TLP Received
4.Poisoned TLP Egress Blocked
我不知道哪一個才是正確的
那下一個問題是想問
CESta:裡的AdvNonFatalErr-又是指哪一種錯誤?
我看Correctable Error的項目沒有出現A開頭的錯誤,
這是指Advisory Non-Fatal Error嗎?
最後一個問題就是:
在Uncorrectable Error裡面有一個AtomicOp Egress Blocked,
這個是不是沒有在UESta:裡面?
Hi L.J.
回覆刪除lspci為了方便閱讀都用簡寫,但他其實有照順序從bit0開始列到bit31
問題1: UESta的TLP-代表bit12 Poisoned TLP Received Status,也就是你所列的第3個error type
問題2: 由於我這M.2是Gen3的Device,所以要用Gen3的視野去看UESta和CESta,你所列的這1,2,4的error好像是Gen4才出現的。
1.MC Blocked TLP
2.TLP Prefix Blocked
4.Poisoned TLP Egress Blocked
問題3:CESta裡的AdvNonFatalErr-是Advisory Non-Fatal Error沒錯
問題4: 如問題2,AtomicOp Egress Blocked好像也是Gen4才出現的error種類
謝謝Blog主,我理解了,
刪除可能是lspci的UESta:沒有增加PCIe Gen4新的錯誤種類,
要用lspci的Configuration space,算register裡的數字才知道
Yes, 而且還要看Device和Host PCIe slot(Root Port)有沒有支援Gen4,還有Linux Kernel版本(例如Ubuntu)是否夠新才有支援PCIe Gen4 driver。
刪除Blog主你好,
回覆刪除想請問一下,那麼這題的最後解法是怎麼解的呢?
後來硬體去檢查device供電IC,發現不夠力,所以換一顆額定電流高一點的樣子,最終是硬體解的
刪除