最近某開發(fā)嵌入式平臺的客戶到我們的協(xié)議測試Open Lab分析底層PCIe的問題。問題癥狀看起來很簡單,開發(fā)板上DSP主芯片的RC(Root Complex)端通過PCIe鏈路直連M.2 NVMe SSD,讀操作沒有任何問題,但是寫操作會失敗。前后折騰了6個多月,最后找到我們實驗室通過SerialTek公司的Kodiak系列PCIe協(xié)議分析儀通過協(xié)議抓包的方式快速解決了問題。
下面是分析的大致步驟和過程。
1.我們先抓取一個read操作,讀取一個扇區(qū)512字節(jié)。
從上圖,我們看到,藍(lán)色底色部分是NVMe SSD controller去主內(nèi)存里面拿這個read command,成功完成。緊接著,SSD controller從NAND拿到數(shù)據(jù)后將這些數(shù)據(jù)通過4個128byte的memory write寫到主內(nèi)存。
2.我們再來抓取一個write操作,寫一個扇區(qū)512字節(jié)。執(zhí)行命令后,發(fā)現(xiàn)寫失敗。
從上圖可以看出,SSD controller在時間戳16.353.876.194.000這一行取到write command后,在藍(lán)色底色這一行報錯,Unsupported Request。這一行是SSD controller發(fā)送Memory Read命令到內(nèi)存讀取512byte的數(shù)據(jù),但是被RC端拒絕了。
在問題未仔細(xì)分析之前,我們開始覺得這是否可能和SSD的sector扇區(qū)的block size有關(guān),因為一般都是512byte,也有1K, 2K, 4K block size的。所以,我們就用ChatGPT先問了一下業(yè)內(nèi)是否有支持256byte sector大小的NVMe SSD。參看下圖。
結(jié)果找到全球只有Micron 一個M.2 SSD支持。
結(jié)果發(fā)現(xiàn)ChatGPT弄了一個大烏龍,整個Micron產(chǎn)品單頁中確實出現(xiàn)好多256,但是要么是256GB,AES Key Size 256 Bits,SHA 256,甚至256 sector或者256 words。所以,看來使用ChatGPT來給出建議還不是很靠譜啊。
我們再次仔細(xì)來分析該錯誤,同時比對為什么read command可以成功,但是write command卻失敗了。直觀的對比發(fā)現(xiàn)可能和Max Read Request Size 有關(guān)。我們查找RC的手冊,發(fā)現(xiàn)它的規(guī)格Spec里面明確寫明RC接受的遠(yuǎn)端device的Max Read Request Size為256byte,但是我們抓包發(fā)現(xiàn)SSD的PCIe memory read request size是512 byte,這個應(yīng)該就是RC回復(fù)SSD的Unsupported Request的直接原因。
為了驗證這個想法,我們在RC端在初始化的時加入一行代碼設(shè)置device端的Max Read Request Size為001 (該字段為3bit, 二進(jìn)制001表示256byte)。然后重新開機(jī)運(yùn)行寫操作,這次寫2048個字節(jié),結(jié)果成功了。2048個字節(jié)分解成8次memory read,每次256字節(jié),參見下圖。
至此,問題得到有效解決。當(dāng)然,平時有的時候也會發(fā)現(xiàn)你請求512byte,結(jié)果發(fā)送4次128 byte的情況,就像我們上面的read command一樣,解釋如下。
審核編輯:劉清
-
dsp
+關(guān)注
關(guān)注
553文章
7998瀏覽量
348965 -
NAND
+關(guān)注
關(guān)注
16文章
1682瀏覽量
136165 -
SSD
+關(guān)注
關(guān)注
21文章
2862瀏覽量
117436 -
PCIe接口
+關(guān)注
關(guān)注
0文章
120瀏覽量
9706
原文標(biāo)題:一個PCIe底層Max Read Request Size問題差點(diǎn)被ChatGPT忽悠了
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論