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