Hyper-V Guest OS啟用Jumbo Frame-使用Windows Server 2012 Beta 測試

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之間網路的關係

IC535216_thumb

 

因為Windows Server 2012中,有多了支援Single-root I/O Virtualization

就算啟用了,因為最後還是要透過實體網路卡出去,所以實體網路卡還是要啟用Jumbo Frame

00164_thumb

 

其實很多人會混淆(還是只有我??),當Host的網路卡有勾選【允許作業系統共用網路卡】的時候

Hyper-V的Guest OS最後是透過哪一張網路卡出去的?

該啟用Jumbo Frame的是共用的那張網路卡,還是實體網路卡(不能設IP的那張)

答案是:實體網路卡(不能設IP的那張)

20

那如果是Host本身需要用Jumbo Frame,要設定哪一張?

答案還是實體網路卡(這好像在講廢話…但是應該還是有人會被混淆)

換句話說,勾選【允許作業系統共用網路卡】而出現的那張網路卡,如果要啟用Jumbo Frame,他並不需要做任何的設定

雖然在啟用了Hyper-V角色的Host,在概念上會像Guest OS一樣,也是其中之一的虛擬機器(父分割)

但是它的網路卡實際真正在使用的並不是可以設定IP的那張,而是實體網卡

 

這篇我會透過兩台Hyper-V主機來模擬這種情況(如下圖所示)

12

圖中的箭頭方向,表示網路的流向,從圖中可以很清楚的看出,Host1裡的Guest OS網路最後是透過實體網路卡到另一部主機的實體網路卡

接著再進到另一部Hyper-V主機(Host2)的VSP透過VMBus到vNIC

所以上圖這個圖例,需要設定Jumbo Frame的就是【Host1、Host2的實體網路卡】、【兩台Guest OS裡面的虛擬網路卡】

 

接著來介紹今天的主角,WIN8HOST1裡面有一台VM1(右邊),以及WIN8HOST2裡面有一台VM2(左邊)

00324

然後看一下Hyper-V的vSwitch的設定,在Host1上是沒有啟用SR-IOV,而Host2是有啟用的

兩台都有勾選【允許Host共用網路卡】,然而這個測試環境是將這個Port進行對串(沒有透過其他Switch)

00325

透過Netsh interface ipv4 show interfaces這個指令,去查Guest OS的MTU是1500(預設)

00326

然後看一下Host上的網路卡,Jumbo Packet是Disable的(兩台Host都長的一樣,所以只截一張圖)

00328

先嘗試在全未啟用Jumbo Frame的情況下,去試試看一次傳送8972 Byte的封包,會發生甚麼事

(VM2的IP是10.0.0.200、VM1的IP是10.0.0.251)

Ping裡的參數則使用-l去指定封包大小、使用-f表示這個封包不允許切割(代表通道最少要一次可傳送這樣大的封包)

00329

Ping的參數可以透過PIng -?去查詢

00335

接著在兩台Guset OS裡面,把Jumbo Frame都開啟,並設定到9014 Byte,但是Host的實體網卡都保持不變

00332

接著我們再測試一次看看,訊息會變成Time out,因為中間的實體網路卡過不去

00333

接著把兩台Host,網路卡裡的Jumbo Frame都啟用,並設定成9014 Byte

00334

接著再測試一次,就會發現已經通了

00336

前面之所以沒有在Host上使用netsh interface ipv4 show interfaces這個指令,是因為看不到那張實體網路卡

當您指定了實體網路卡啟用,但是勾選【共用網路卡】的那張並沒有啟用的情況下,依然生效

00337

那麼,接下來我反過來設,讓Host2上的實體網路卡關閉Jumbo Frame,在共用的網路卡啟用Jumbo Frame,看看會發生甚麼事

會發現即使指定IP的那張網路卡MTU已經顯示9000,一樣不會通,代表Host實際使用的資源是實體網路卡,並非虛擬出來的共用網路卡

因為共用網路卡不論是有沒有設定,只要實體網路卡有啟用都會通。

00338