測試結果中的1958MB/s的意思是,你的40千兆網卡的傳輸大概只在15千兆左右。那其他那些帶寬都跑哪兒去了呢?要查明原因,你要打開一個PowerShell窗口。Get-NetOffloadGlobalSetting顯示NetworkDirect的狀態(tài)是開啟,也就是說你可以使用RDMA——如果你的卡支持這個功能的話。
運行Get-NetAdapterRdma,顯示該卡已經被設置為可以使用RDMA。那為什么不能用呢?
即便有一個配置正確的系統(tǒng)——而且Windows Server 2012默認情況就下就是配置好的——如果你的卡的固件不適用于操作系統(tǒng),你也不能使用RDMA。接著查找問題,關鍵的PowerShell查詢命令是Get-SmbServerNetworkInterface,它(見下圖)可以直觀地顯示出我們的InfiniBand卡不能在Windows Server 2012里使用IPoIB RDMA。Windows系統(tǒng)日志里還有更多內容,但我們不需要;我們已經知道怎么回事了。
問題出在老舊的固件上
我們的卡在規(guī)格說明里承諾提供RDMA,原來,要在Windows Server 2012上使用,你的Mellanox固件版本必須在2.9.8350以上。你可以用多種方式查到你的固件版本。最簡單的方式就是Windows設備管理器,如下圖示,它顯示,此卡的固件版本為2.9.1000,不支持RDMA。
下載一個固件更新器不行嗎?
Mellanox在其Windows 2012安裝程序里提供的固件版本為2.10.720,但那個installer不會更新第三方的貼牌網卡。戴爾和惠普的最新固件版本是2.9.1000,不支持RDMA。我這還有幾個Sun卡,正在用的版本是2.7.8130。固件不更新,我們就沒法使用RDMA,但廠商(到現在為止)還沒有更新它們的安裝程序。
解決辦法就是自制固件
幸運的是,還是有解決辦法的:自己制作固件并刷新。實際操作比聽上去容易多了。第一次的話也能要花30分鐘。之后,這一過程頂多兩分鐘。我們將從已經安裝的 Infiniband 開始,使用自帶的微軟驅動,以及上面配置的IP地址信息。
制作和刷新固件版本2.10.720的步驟:
1. 安裝Mellanox WinMFT
2. 獲取該卡設備ID
3. 獲取該卡Board ID
4. 下載 .mlx文件
5. 下載 .ini文件
6. 使用mlxburn制作并刷新固件
刷新固件的具體步驟:
1)安裝Mellanox WinMFT軟件包。它提供給我們所需的制作和刷新固件的工具。本文撰寫時,最新版本為2.7.2,安裝程序名為WinMFT_x64_2_7_2.msi。
2) 現在我們需要獲取此卡的一些信息。在命令行提示窗口,運行命令mst status,來獲取卡的PCI ID。我的卡,如下圖,ID是mt26428_pci_cr0,你的可能跟這個差不多,除非你有好幾個卡。順便提一句,數字26428是戴爾夾層卡的設備ID(一種產品標識符)。你可能注意到了,這個設備ID和一些Sun,惠普,Mellanox ConnectX-2雙端口QDR卡的設備ID一樣,這表明我們的戴爾卡確實是一款標準的Mellanox產品,盡管使用了戴爾專有的固件。
3)現在知道了卡的PCI ID,我們還要查明其他幾個屬性。在同一個命令行提示窗口里,運行命令flint -d
4)下載原始的固件文件到你的Infiniband服務器的一個文件夾里。原始的固件文件是一個擴展名為.mlx的大的文本文件。我使用的版本是2.10.720,固件文件名為fw-ConnectX2-rel.mlx,是我從用于Windows 2012的Mellanox 4.2驅動安裝程序中提取的。你可以從這里下載我的固件文件http://www.openida.com/wp-content/uploads/fw-ConnectX2-rel.zip。如果不想下載我的版本,你也可以從Mellanox安裝程序中提取自己的固件文件。啟動安裝程序,讓它運行,查看文件夾c:users
5) 下載 .ini 文件,把它放到 .mlx 固件文件的同一目錄。我的Dell PowerEdge C6100夾層卡的版本在這里http://www.openida.com/wp-content/uploads/DEL09A0000009.zip。該 .ini 文件必須與Board ID匹配,因此你需要將它命名為“DEL09A0000009.ini”。如果你下載了我的版本,請?zhí)^第六步。如果你不想使用我的固件文件,你可以通過編輯和重命名非貼標Mellanox卡的.ini文件自己制作。在Mellanox安裝程序仍在運行時,到c:users
6) 你現在就可以制作新的固件鏡像并刷到自己的卡上了。這兩步用一個命令就能完成,而且必須是在你的服務器裝有 Infiniband 卡的情況下完成。打開Windows命令行提示窗口,目錄指向你的下載文件位置。輸入命令mlxburn.exe -dev
在運行此命令時,mlxburn會查找你的卡的Board ID。然后到文件夾下尋找有該Board ID的.ini文件。隨后mlxburn使用.mlx固件文件和.ini文件來制作固件鏡像,并將其燒錄到卡中。完成后,重啟服務器,讓新的固件生效。
檢查你的工作
要想檢查新的固件版本,打開Windows命令提示行窗口,運行命令 flint -d
現在檢查你的卡能否使用RDMA了。打開PowerShell窗口,輸入Get-SmbServerNetworkInterface。如下圖,你的 Infiniband 端口現在應該顯示 RDMA 可用。
最后,運行吞吐量測試。這次的結果為3,279MB/s – 相當于實際文件共享吞吐量為 25.6 千兆。
更令人驚訝的是RDMA的IPoIB難以置信的低延遲。IOMeter測試4kb隨機傳輸顯示,平均延遲僅為.51毫秒,將近250,000 的4kb隨機IOPS ——一個大約2009年的Window文件服務器。
其他細節(jié)
本文的文件服務器是Dell PowerEdge C6100 XS23-TY3 node,雙英特爾至強L5520處理器,Dell QDR Infiniband夾層卡(不到200美元)。我用的默認設置全新安裝 Windows 2012服務器。為了測試,我需要一個比Infiniband卡還快的文件系統(tǒng)——這可不容易。為了達到此目的,我在文件服務器上運行了免費的StarWind RAM disk軟件,并配置了四個8GB 內存盤。在本地使用IOMeter測試時,這些內存盤的吞吐能力超過9GB每秒,這足以趕上一個 Infiniband 卡。這些超快的磁盤之后被設置為標準的Windows共享。
用于測試的客戶端是另一臺一模一樣的Dell C6100 node,使用 Mellanox Grid Director 4036 Infiniband交換機連接到服務器上。在 IPoIB 網絡上裝上了這四個共享卷之后,我開始在客戶端機器上使用IOMeter進行吞吐量和IOPS測試。吞吐量測試存取規(guī)范是:1MB傳輸,100%隨機和100%讀取,其他設置均為默認值。IOPS測試,傳輸大小為4kb。我在四個磁盤上的每一個都使用的測試文件大小為16,000,000個扇區(qū),隊列深度為32。 在IOMeter中,你可以通過多選對多個卷進行測試。其他設置均為默認值。比如,Windows防火墻打開,大型頁面沒有啟動。