在解碼RoCEv2數據包(包括TCP RDMA和RoCE RDMA)時,若捕獲的跟蹤數據無法正確解碼,通常需要執行特定的解碼步驟。對于RoCE RDMA跟蹤數據的處理,分析器主要采用兩種方式獲取必要信息以實現數據包解碼:
首先,分析器通過NVMe QP端口獲取所需信息。這些帶有RoCEv2的NVMe QP端口可在啟動器與目標建立連接時被"自然"讀取,分析器利用這些信息來識別QP端口,從而解碼NVMe數據包。此外,在連接建立后,有時需要手動輸入這些QP端口信息。
對于TCP RDMA跟蹤數據的處理,唯一必要的信息是"NVMe/TCP端口",這些端口通常已預先存在于解碼器中,我們將在后續詳細討論。
值得注意的是,從4.40版本開始,我們簡化了NVMe解碼流程,確保跟蹤數據能夠被解碼為NVMe類型,或使分析器能夠預先將跟蹤數據記錄為NVMe類型,而無需了解具體的NVMe QP端口信息。本文將首先介紹4.40版本新增的解碼便捷性,然后闡述4.40版本之前必須執行的NVMe解碼步驟。
G.1.1 從版本4.40開始設置NVMe解碼
由于確保每次客戶想要解碼NVMe跟蹤或確保解碼設置正確(無論是否捕獲了RoCE_V2-MAD數據包,這是我們之前加載解碼表的唯一方式)的復雜性,現在可以在開始“錄制”之前通過進入設置?首選項?軟件設置?解碼分配頁面激活NVMe解碼。在該頁面(圖G.1)下,有一個“QP協議:”設置,其中有一個NVMe的下拉選項。設置后,新錄制的跟蹤或加載的舊跟蹤都將被正確解碼為NVMe跟蹤。這處理了所有NVMe QP端口設置,因此客戶無需記住任何幀目標QP端口的十六進制設置,這使得操作更加簡便。
如果您已經執行了“記錄”操作,并且您有一個想要解碼為NVMe跟蹤的RoCE跟蹤(并且您尚未執行上述步驟將分析器設置為NVMe模式):1. 轉到“分析”選項卡并選擇解碼分配。將顯示一個列表,如圖G.2所示。2. 您必須在QP端口協議字段中僅選擇NVMe(如下所示),并選擇“應用更改到首選項”選項卡。這將顯示一條最終消息,說明快速查看跟蹤將被保存。3. 選擇“是”。該跟蹤(以及所有后續的RoCE跟蹤)將被解碼為NVMe跟蹤。從4.40版本開始,這就是讓您的分析器解碼NVMe所需的全部操作,無論是在記錄之前還是之后。
G.1.2 使用RoCE RDMA捕獲解碼跟蹤 – 4.40版本之前
如果在連接到目標之前開始錄制,此時會交換某些數據包,這些數據包會自動加載解碼表。這使得整個過程變得更加容易,因為所有解碼已經完成,如圖G.3所示。
如您所見,NVMe數據包已被翻譯并正確識別。這是因為解碼表已預先填充了“NVMe/QP端口”,這些端口是翻譯所有數據包所必需的。圖G.4中所示的解碼表在自動填充后包含了“NVMe QP端口”。解碼表將在以下部分進一步討論。
G.1.3 使用RoCE RDMA捕獲未解碼的跟蹤記錄 – 4.40版本之前
如果您剛剛記錄了一個類似于圖G.5中表格的跟蹤記錄,并且RDMA設置為RoCE,您可以采取一些步驟使該跟蹤記錄以解碼狀態顯示。由于此跟蹤記錄是在啟動器和目標之間的連接序列之后捕獲的(缺少自動NVMe端口設置數據包),如果需要數據包解碼,則必須手動修復解碼。
手動更改解碼:
- 轉到“分析”選項卡并點擊“解碼分配”。在“NVMe QP端口(十六進制)”被學習或添加之前,表格可能看起來像圖G.6中的示例。
?
- 為了正確解碼每個數據包,請檢查(打開并使用幀檢查器視圖)每個數據包中“Base Transport Header”主字段下的“Destination QP”字段,如圖G.7所示。
-
記下這個數字,然后返回到“分析”選項卡下的“解碼分配”窗口。
-
將十六進制數348添加到“NVMe QP端口(十六進制)”字段中,如圖G.8所示。
5.在解碼器上按下“應用更改到偏好”按鈕,然后點擊關閉。分析器將您的更改添加到跟蹤中。圖G.9展示了帶有更改的新跟蹤示例。
請注意,它僅解碼了具有特定 NVMe QP 端口的部分數據包。不過,NVMe QP 端口將進行一些分組,以便您可以一次性添加大量 NVMe QP 端口。
例如,這個數據包的 NVMe 目標 QP 端口為十六進制的 348,但另一個數據包的目標 QP 端口為十六進制的 304。因此,通常最好通過添加一系列“NVMe 目標 QP 端口”來一次性翻譯多個數據包。如圖 G.10 所示,添加了 2FF-2000 以適應大量的 NVMe QP 端口,從而在此跟蹤中翻譯更多的數據包。
6.點擊解碼器上的“應用更改到偏好”,然后點擊“關閉”。分析器將更改添加到跟蹤中。? 見圖G.11以查看帶有更改的新跟蹤示例。
請注意,大多數(如果不是全部)RoCEv2數據包已轉換為NVMe,分析器顯示正確的解碼。
G.1.4 使用TCP RDMA捕獲解碼跟蹤 – 4.40版本之前
在使用TCP與RoCEv2時,解碼過程要簡單得多,因為大部分解碼依賴于“NVMe/TCP端口”(見圖G.12),這些端口通常是一個標準值,大多數人在連接到目標時使用4420。因此,當在TCP頭下看到源端口或目標端口為4420的NVMe時,解碼會自動進行。
?
圖G.13顯示了一個RoCEv2 TCP跟蹤,其目標端口和源端口均為4420,因此所有端口都被正確解碼。
G.1.5 退出NVMe解碼模式
有幾種方法可以退出NVMe解碼模式,有些是偶然的,有些是故意的。
? 偶然的方式通常發生在降級或解碼信息因某種原因被手動覆蓋時。在4.40之前的版本中,更改或刪除解碼器(分析?解碼分配頁面)中的HEX數字將不允許分析器中進行NVMe解碼,從而偶然或故意地移除NVMe解碼。當降級到舊版本時,該版本可能不支持較新的4.40設置,或者可能完全擦除所有解碼設置。
? 故意退出NVMe模式的方法是在設置?首選項?軟件設置
?解碼分配窗口中將4.40的NVMe設置更改為其他設置,例如“用戶定義”、“iSER”或“SMB”。在4.40版本之前,必須從“分析
?解碼分配”窗口(解碼器)中刪除NVMe QP端口,這些端口對每個跟蹤都很重要。NVMe解碼將不再正常進行。