我用一個(gè)或多或少完整的NVMe VIP測(cè)試用例示例結(jié)束了我的上一篇博客文章,試圖展示從基本設(shè)置到執(zhí)行NVM寫入然后讀取的所有內(nèi)容。我們將在這里稍微改變一下,從 NVMe 命令轉(zhuǎn)移到一些可用于協(xié)助您測(cè)試的 VIP 功能。
在這里,您可以了解有關(guān)適用于 NVMe 和 PCIe 的 Synopsys VC 驗(yàn)證 IP 的更多信息。
為了讓您保持新鮮感,我們將繼續(xù)參考此圖:
如前所述,NVMe VIP 提供了一組豐富的功能來幫助測(cè)試。
后臺(tái)流量
您將在上圖中注意到位于 PCIE 端口模型(請(qǐng)求者、目標(biāo)/cmpltr 和驅(qū)動(dòng)程序)之上的幾個(gè)應(yīng)用程序。這些是可用于源(和接收)PCIe 流量(不是專門進(jìn)出 NVMe)的 PCIe 應(yīng)用程序。特別:
驅(qū)動(dòng)程序應(yīng)用程序 – 如果您想生成各種類型的TLP(例如CfgWr,IORd,MemWr),此應(yīng)用程序就是您的工具。TLP 的各個(gè)字段是可配置的,并且會(huì)檢查收到的完成(例如來自 MemRd 請(qǐng)求)的有效性和正確的數(shù)據(jù)。您還可以根據(jù)需要使用此工具配置或監(jiān)控 DUT。
目標(biāo)/完成者應(yīng)用程序 – 如果遠(yuǎn)程端點(diǎn)(例如控制器 DUT)將(非 NVMe)流量發(fā)送到此主機(jī) VIP,Target 應(yīng)用程序?qū)?zhí)行該請(qǐng)求,將其轉(zhuǎn)過來并生成一個(gè)或多個(gè)(根據(jù)需要和/或配置)完成操作返回到端點(diǎn)。提供定時(shí)和數(shù)據(jù)包大小控制,以及用于詳細(xì) TLP 修改的多個(gè)回調(diào)。
請(qǐng)求者申請(qǐng) – 此應(yīng)用程序會(huì)向目標(biāo)生成恒定的 TLP 負(fù)載。它可用于創(chuàng)建后臺(tái)流量,或在目標(biāo)上造成負(fù)載。流量速率、大小和類型都是可配置的。
錯(cuò)誤注入
VIP 的一個(gè)重要且有用的功能是內(nèi)置錯(cuò)誤注入。NVMe VIP 提供了一種簡(jiǎn)單但非常強(qiáng)大的機(jī)制來導(dǎo)致錯(cuò)誤注入,而不必使用回調(diào)和定向測(cè)試來導(dǎo)致錯(cuò)誤。對(duì)于每個(gè)“腳本...”用戶可用的任務(wù)(有關(guān)詳細(xì)信息,請(qǐng)參閱以前的帖子),有一個(gè)“錯(cuò)誤注入”參數(shù)。可以使用各種參數(shù)填充此參數(shù),以導(dǎo)致該 NVMe 命令發(fā)生特定的錯(cuò)誤注入。對(duì)命令有效的特定錯(cuò)誤注入由潛在錯(cuò)誤條件控制(根據(jù) NVMe 規(guī)范)。
例如,檢查“創(chuàng)建 I/O 提交隊(duì)列”命令的規(guī)范會(huì)向我們顯示該命令可能導(dǎo)致的幾個(gè)錯(cuò)誤,例如“完成隊(duì)列無效”、“隊(duì)列標(biāo)識(shí)符無效”和“超出最大隊(duì)列大小”。您只需要提供類似的錯(cuò)誤注入代碼,然后會(huì)發(fā)生以下幾件事,而不是創(chuàng)建定向測(cè)試來導(dǎo)致這些情況:
VIP 將查找要生成的導(dǎo)致錯(cuò)誤的相應(yīng)值。
這些值將被放置在適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)中(例如提交隊(duì)列條目)。
收到錯(cuò)誤后,我們會(huì)自動(dòng)禁止顯示可能以其他方式引起的任何警告(畢竟這是一個(gè)錯(cuò)誤)。
如果預(yù)期的錯(cuò)誤沒有到達(dá),它將被標(biāo)記。
然后,系統(tǒng)已準(zhǔn)備好(如果需要)在沒有錯(cuò)誤注入的情況下重新運(yùn)行命令。
用戶無需進(jìn)一步工作來測(cè)試錯(cuò)誤 – 無需設(shè)置回調(diào),無需抑制錯(cuò)誤。一切都處理得干凈透明。
除了 NVMe 層的注入錯(cuò)誤之外,您還可以提供協(xié)議錯(cuò)誤注入。例如,要在 PCIe DL 層導(dǎo)致 LCRC 錯(cuò)誤,使用相同的過程:只需為該 LCRC 添加錯(cuò)誤注入?yún)?shù),它就會(huì)發(fā)生,檢查、重試并重新檢查事務(wù)。所有這些都是在沒有任何用戶幫助的情況下發(fā)生的。
隊(duì)列圍欄
在主機(jī)內(nèi)存中創(chuàng)建隊(duì)列時(shí),控制器可能會(huì)生成錯(cuò)誤的內(nèi)存請(qǐng)求,并可能非法訪問隊(duì)列。這些訪問由主機(jī)的隊(duì)列屏蔽機(jī)制捕獲和標(biāo)記。主機(jī)了解哪些操作(即讀取或?qū)懭耄┮约澳男┑刂穼?duì)控制器訪問有效,并將警惕地監(jiān)視控制器的訪問,以確保它不會(huì)嘗試(例如)從完成隊(duì)列讀取或?qū)懭胩峤魂?duì)列。隊(duì)列和隊(duì)列條目邊界的有效性同樣檢查。
卷影磁盤
主機(jī) VIP 內(nèi)置的是一個(gè)卷影磁盤,用于跟蹤和記錄對(duì)各種控制器命名空間的塊數(shù)據(jù)寫入。一旦發(fā)生有效的寫入,它就會(huì)提交到影子,以后的讀取訪問將與影子數(shù)據(jù)進(jìn)行比較。盡管VIP用戶肯定擁有可用的實(shí)際讀/寫數(shù)據(jù),但他們無需進(jìn)行數(shù)據(jù)比較/檢查 - NVMe主機(jī)VIP會(huì)以靜默和自動(dòng)的方式處理此問題。
控制器配置跟蹤
與卷影磁盤類似,主機(jī)還跟蹤連接到系統(tǒng)的控制器的配置。這有幾部分:
寄存器跟蹤 – 當(dāng)控制器 NVMe 寄存器被寫入時(shí),主機(jī)會(huì)“窺探”此寫入,并將其存儲(chǔ)在本地“寄存器影子”中。VIP 的進(jìn)一步操作可以參考此內(nèi)容,以確保操作對(duì)于控制器的當(dāng)前狀態(tài)有效和/或合理。
識(shí)別跟蹤 – 正如我們?cè)谑纠校ㄔ谧罱鼛准校┲锌吹降哪菢樱琋VMe 協(xié)議讓我們同時(shí)執(zhí)行“識(shí)別控制器”和“識(shí)別命名空間”命令來收集控制器信息。這些信息的相關(guān)部分也會(huì)保存以供VIP使用。
特征跟蹤 – “設(shè)置功能”命令用于配置控制器的各種元素——我們監(jiān)視并收集“設(shè)置”和“獲取功能”命令信息(根據(jù)需要),以完成主機(jī)VIP對(duì)控制器當(dāng)前配置和狀態(tài)的理解。
審核編輯:郭婷
-
控制器
+關(guān)注
關(guān)注
112文章
16332瀏覽量
177806 -
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120230 -
nvme
+關(guān)注
關(guān)注
0文章
221瀏覽量
22621
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論