Hyper-V Guest OS啟用Jumbo Frame-使用Windows Server 2012 Beta 測試
要讓Guest OS支援Jumbo Frame需要Windows Server 2008 R2以上(Windows Server 2012也支援)
比較常見的應用範例是在iSCSI上,因為這會需要網路節點的支援,應用在File Server上還是有點難度
換句話說,就算用在iSCSI上,如果中間的Switch不支援Jumbo Frame的話,或者網路卡不支援,一樣不能用
範例將會以Windows Server 2012進行測試(但不會進行效能上的測試,我沒那麼大的I/O…)
不過有人測出可以提高40%~80%的傳輸速率,有興趣的人可以測看看:P
這是國外針對NetApp啟用Jumbo Frame之後提出的總結
http://netapp-blog.blogspot.com/2009/08/jumbo-frames-in-netapp.html
文中有提到開啟之後的優點,雖然不是跟Hyper-V Guest啟動Jumbo Frame的測試有直接關係
但是以實體機來說成長的幅度並不小
Benefits:
- Less CPU overhead as system has to do less header processing because in VIF mode TOE on NetApp cards are disabled.
- 9000 bytes frames are six times higher then stock frames of 1500 MTU so larger frame size leads to higher throughput.
- Some tests in NetApp show upto 30% increase and other vendors have achieved more than 60% in network throughput.
首先,先看一下圖,了解一下Guest OS跟Host之間網路的關係
因為Windows Server 2012中,有多了支援Single-root I/O Virtualization
就算啟用了,因為最後還是要透過實體網路卡出去,所以實體網路卡還是要啟用Jumbo Frame
其實很多人會混淆(還是只有我??),當Host的網路卡有勾選【允許作業系統共用網路卡】的時候
Hyper-V的Guest OS最後是透過哪一張網路卡出去的?
該啟用Jumbo Frame的是共用的那張網路卡,還是實體網路卡(不能設IP的那張)
答案是:實體網路卡(不能設IP的那張)
那如果是Host本身需要用Jumbo Frame,要設定哪一張?
答案還是實體網路卡(這好像在講廢話…但是應該還是有人會被混淆)
換句話說,勾選【允許作業系統共用網路卡】而出現的那張網路卡,如果要啟用Jumbo Frame,他並不需要做任何的設定
雖然在啟用了Hyper-V角色的Host,在概念上會像Guest OS一樣,也是其中之一的虛擬機器(父分割)
但是它的網路卡實際真正在使用的並不是可以設定IP的那張,而是實體網卡
這篇我會透過兩台Hyper-V主機來模擬這種情況(如下圖所示)
圖中的箭頭方向,表示網路的流向,從圖中可以很清楚的看出,Host1裡的Guest OS網路最後是透過實體網路卡到另一部主機的實體網路卡
接著再進到另一部Hyper-V主機(Host2)的VSP透過VMBus到vNIC
所以上圖這個圖例,需要設定Jumbo Frame的就是【Host1、Host2的實體網路卡】、【兩台Guest OS裡面的虛擬網路卡】
接著來介紹今天的主角,WIN8HOST1裡面有一台VM1(右邊),以及WIN8HOST2裡面有一台VM2(左邊)
然後看一下Hyper-V的vSwitch的設定,在Host1上是沒有啟用SR-IOV,而Host2是有啟用的
兩台都有勾選【允許Host共用網路卡】,然而這個測試環境是將這個Port進行對串(沒有透過其他Switch)
透過Netsh interface ipv4 show interfaces這個指令,去查Guest OS的MTU是1500(預設)
然後看一下Host上的網路卡,Jumbo Packet是Disable的(兩台Host都長的一樣,所以只截一張圖)
先嘗試在全未啟用Jumbo Frame的情況下,去試試看一次傳送8972 Byte的封包,會發生甚麼事
(VM2的IP是10.0.0.200、VM1的IP是10.0.0.251)
Ping裡的參數則使用-l去指定封包大小、使用-f表示這個封包不允許切割(代表通道最少要一次可傳送這樣大的封包)
Ping的參數可以透過PIng -?去查詢
接著在兩台Guset OS裡面,把Jumbo Frame都開啟,並設定到9014 Byte,但是Host的實體網卡都保持不變
接著我們再測試一次看看,訊息會變成Time out,因為中間的實體網路卡過不去
接著把兩台Host,網路卡裡的Jumbo Frame都啟用,並設定成9014 Byte
接著再測試一次,就會發現已經通了
前面之所以沒有在Host上使用netsh interface ipv4 show interfaces這個指令,是因為看不到那張實體網路卡
當您指定了實體網路卡啟用,但是勾選【共用網路卡】的那張並沒有啟用的情況下,依然生效
那麼,接下來我反過來設,讓Host2上的實體網路卡關閉Jumbo Frame,在共用的網路卡啟用Jumbo Frame,看看會發生甚麼事
會發現即使指定IP的那張網路卡MTU已經顯示9000,一樣不會通,代表Host實際使用的資源是實體網路卡,並非虛擬出來的共用網路卡
因為共用網路卡不論是有沒有設定,只要實體網路卡有啟用都會通。