Hyper-V: Virtual Network Bandwidth Konusu

20.04.2009 | 11:54 Dokümanlar , Hyper-V 5 Yorum

Yine geçtiğimiz günlerde gelen bir soru üzerine yazdığım cevap maili alıp başını gidince, konuyu biraz daha detaylandırıp blog entry olarak yayınlamak istedim.

Soru tam olarak şöyle:

“Peki, ornegin uzerinde 10 guest calisan bir sunucuda tek bir ethernet uzerinde her guest cok siki network haberlesmesi yapiyorsa ve sunucunun 1Gbit lik bir ethetnet i varsa bu durumda her sunucuya 100Mbit (veya ilk alana cok sonra gelene nanik :)) mi ayriliyor”

Cevap kısa ve net: “Kimseye nanik yok, bu işler parayla değil sırayla :)”

Hyper-V için 3 temel Virtual Network tipi vardır.

Hyper-V Virtual Network Tipleri

External Virtual Network

Fiziksel dünya ile konuşabilen sanal ağ tipidir. Mutlaka fiziksel bir ağ adaptörüne bağlıdır ve o adaptörün fiziksel olarak erişebildiği ağ üzerindeki sistemler ile konuşmayı mümkün kılar. External Virtual Network üyesi olan sanal makineler dış dünya ile konuşabilen sanal makinelerdir. (External Virtul Switch) External Virtual Network üyesi sanal makineler aynı host üzerinde kendi aralarında, direkt host ile veya dış dünyadaki sistemler ile ağ üzerinden konuşabilirler.

Internal Virtual Network

Sadece aynı Hyper-V sunucusu üzerinde çalışan VM ‘lerin kendi aralarında ve Hyper-V sunucusu yani Paren Partition ile konuşabildiği sanal ağ tipidir. Internal Virtual Network üyesi sanal makineler dış dünya ile konuşamazlar çünkü bu sanal ağ tipi bir fiziksek ağ adaptörüyle ilişkili değildir. (Internal Virtual Switch)

Private Virtual Network

Sanal makinelerin aynı Hyper-V sunucusu üzerinde sadece kendi aralarında konuşabildiği sanal ağ tipidir. Private Virtual Network üyesi sanal makineler dış dünya ve host yani Parent Partition ile konuşamazlar. Kapalı devre bir ağ gibi düşünebilirsiniz. (Private Virtual Switch)

Daha önce Hyper-V Virtual Networks konusunda yazdığım bir yazıya buradan ulaşabilirsiniz. Bu yazıya göz atarsanız; VM ‘lerin ve bazı durumlarda Parent OS ‘in Virtual NIC ‘ler kullandığından ve bu vNIC ‘lerin fiziksel NIC üzerinden external network ‘e çıkış yaptığından bahsetmiştim. Bu durumda VM ‘lerin ve Parent OS ‘in external network iletişimi için kullanabileceği toplam bandwidth miktarı, fiziksel NIC ‘in gerçek bandwidth miktarına eşittir. External network bandwidth diyorum çünkü VM to VM ya da Host to VM iletişiminde fiziksel NIC kullanılmayabilir. Yani Internal ve Private networkler için bandwidth konusu farklıdır.

Sorudan yola çıkalım. Hyper-V üzerinde çalışan 10 VM var. External Virtual Switch ve tek bir fiziksel NIC üzerinde çalışan MS Virtual Network Switch Protocol ile external network ‘e send/receive yapıyorlar. Fiziksel NIC ise 1GB bandwidth ‘e sahip. Bu noktada network kuralları gereği paketi gönderen, aracı olan ve paketi alan noktaların bandwidt ‘i, iletim bandwidth durumuna direkt etki eder. Örneğin 1000MBps NIC üzerinden çıkan paketler, 1000MBps Switch üzerinden geçip, 100MBps NIC ‘e giriş yapıyorsa, bu durumda source noktasından 1000MBps veri çıksa da destination maximum 100MBps veri alabileceği için aslında iletim bandwidth ‘i en fazla 100MBps olacaktır.

Peki VM ‘lerin Virtual NIC ‘lerinin bandwidth ‘i nedir?

Hyper-V üzerinde çalışan Windows Server 2003 ve Windows Server 2008 Guest OS ‘ler için konuşursak vNIC başına bandwidth 10gb ‘dır. Ancak bu teorik rakam VM ve Virtual Switch arasındaki iletişimde geçerlidir (Her bir vNIC ‘in 10GBps olarak Virtual SW ‘e bağlandığını düşünebilirsiniz). Bu durumda teorik olarak aynı Virtual SW ‘e bağlı VM ‘ler kendi aralarında 10GBps olarak iletişim kurabilirler (Internal veya Private Virtual SW ‘ler üzerinde çalışan VM ‘lerin bu ağ üzerinde yüksek hızlarla konuştuğunu test edebilirsiniz) Ama bu Virtual Switch External tipte ise dışarı çıkışta bandwidth düşecektir çünkü Virtual SW ‘den external networke akan trafik, Fiziksel NIC üzerinden çıkmak zorundadır. Bu durumda da toplam bandwidth maximum 1GB olur. (yani fiziksel NIC bandwidth ‘i) Aşağıdaki diyagram bu yapıyı temsil ediyor.

Hyper-V NIC Bandwidth

Gelelim sorunun cevabına. 10 VM ‘den gelen ve external networke gitmek isteyen paketler Parent Partition üzerindeki Virtual Switch’ te toplanır (VSC/VSP/VMBUS desteği ile) ve sırayla fiziksel NIC üzerinden gönderilir. Bu noktada sıralamayı belirleyen bileşenlerin başında Virtual Switch, VSP  (Virtual Service Provider) ve Windows Server 2008 Network mimarisi gelir. Virtual Switch üzerinde kullanılan routing algoritması özel bilgidir ve bu konu ile ilgili public kaynak yoktur.

Ama şöyle bir yetenekten bahsedebilirim:

Örneğin Parent Partition üzerinde iki fiziksel NIC var. Bunlardan birisi External Virtual Switch olarak tanımlanmış  ve bu bacak yerine bir Virtual NIC yaratılmış. İkincisi ise fiziksel şekilde duruyor. Yani Parent OS’in fiziksel networke erişebilmesi için Virtul NIC ve ikinci fiziksel NIC olmak üzere iki şansı var ve her iki NIC ‘in de aynı networke erişebildiğini kabul edelim.

Bu durumda Parent OS üzerindeki herhangi bir application fiziksel networke erişmek istediğinde hangi NIC’i kullanmalı?

Bu yapıda Virtual NIC Virtual Switch üzerinden, fiziksel NIC ise direkt çıkış yapabilecek konumdadır. Bu durumda tabiki fizikselden çıkmak çok daha mantıklı. İşte bahsettiğimiz algoritma bu gibi kararları kendisi alıp network trafiğini en doğru ve kısa yoldan gönderebilmektedir. Aşağıdaki diagram bu yapıyı temsil ediyor.

Hyper-V NIC Önceliği

(sorunun cevabına dönersek) Sonuç olarak 1GB bandwidth VM ‘ler arasında 100mb olarak paylaştırılmaz, sistem tarafından önceliklendirilip işlenir.

Sanallaştırma olmayan fiziksel yapıları düşünelim. Sistemde çalışan uygulamalardan biri fazla network trafiği yarattığında, aynı sistem üzerindeki diğer uygulamaların performansı bundan etkilenir. Çünkü bandwidth ‘i ortak kullanırlar. Aynı mantık bir noktada Hyper-V sanal ağları için de geçerlidir.

Peki biz her VM için 100MBps olarak limit veremez miyiz? Hyper-V üzerinde Processor, Memory ve Storage kullanım limitleri verebiliyoruz ancak NIC tarafında şimdilik limit verme şansımız yok ve bu durum birçok sanallaştırma ürününde bu şekilde.

Bu noktada VM network aktivitelerini izleyip değerlendirmenizi tavsiye ederim. Her ne kadar Virtual NIC ‘ler ve Virtual Switch ‘ler den bahsetsek de bu sanal aygıtları (üzerlerindeki sanal portlara kadar) izleme şansımız var. Örneğin Ex-SW1 isimli sanal switch ‘in üzerinde çalışan VM21 sanal makinesinin bağlı bulunduğu portun trafiğine kadar izleyebilirsiniz.

Bu iş için Windows Server 2008 üzerinde ücretsiz olarak gelen Reliability and Performance Monitor ve aşağıdaki counter ‘ları kullanabilirsiniz.

Reliability and Performance Monitor

Hyper-V Virtual Switch (Seçtiğiniz Virtual SW/SWs üzerinde paket send/receive, multicast-broadcast, flood gibi durumları izler)

Hyper-V Virtual Switch Port (Daha detaylı olarak port bazlı send/receive izlenebilir)

Hyper-V Virtual Network Adapter (NIC bazlı send/receive izlenebilir)

Yada çok daha gelişmiş monitoring işlemleri için System Center Operations Manager kullanabilirsiniz.

İyi çalışmalar dilerim.

Yazı Etiketleri: , ,

Sayfa Başı ▲

Yorumlar (5)

  1. Nazım AKIN

    abi dokturmussun yine
    Cevap kısa ve net: “Kimseye nanik yok, bu işler parayla değil sırayla :)”

    ;))

  2. Soner Sam

    Serhat hocam her zamanki gibi çok net ve anlaşılır bir yazı olmuş. teşekkürler

  3. anatolia

    hocam tam istediğim bilgi çok sağolun

  4. Koray

    Merhaba üstadım,

    W2k8 ve öncesinde vendor yazılımları ile VLAN segregation yapabiliyorduk. W2k12 Server üzerinde bu özelliğin gömülü olduğunu duydum, henüz RC olduğu için W2k12 için vendor yazılımı da yok galiba. Hyper-v3 kullanırken aynı kart/vswitch üzerinden 2 farklı VLAN (biri host diğeri guest için mesela) kullanmak istediğimizde nasıl bir yol izlemek gerektiği konusunda bilgin olabilir mi?

    Şimdiden teşekkürler,
    Koray

  5. Koray

    Paylaşımlı bir vSwitch tanımlamak işimi çözecek gibi. Yardıma ihtiyacım kalmadı. Teşekkürler.

Yorum Ekle