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