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”
Peki cevap?
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.
- External (Fiziksel dünya ile konuşabilen network – External Virtul Switch)
- Internal (Sadece aynı Hyper-V sunucusu üzerinde çalışan VM’lerin kendi aralarında ve Hyper-V sunucusu ile konuşabildiği network – Internal Virtual Switch)
- Private (VM’lerin sadece kendi aralarında konuşabildiği network – 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 Parent OS’in Virtual NIC’ler kullandığından ve bu vNIC’lerin fiziksel NIC üzerinden external network’e çıkış yaptığıdan 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 yada 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 pakedi gönderen, aracı olan ve pakedi 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ıyor olabilir. Bu durumda source noktasından 1000MBps veri çıksada, destination maximum 100MBps veri alabileceği için aslında iletim bandwidth’i 100MBps dir.
Peki VM’lerin Virtual NIC’lerinin bandwidth’i nedir?
Windows Server 2003 ve 2008 Guest OS’ler için konuşursak vNIC başına bandwidth 10gb tır. Ancak bu teorik rakam VMs ve Virtual Switch arasındaki iletişimde geçerlidir (Her bir vNIC’in 10GBps olarak, virtual CAT5 ile 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 edebilirsin). 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 maximu 1GB olur (fiziksel NIC bandwidth’i). Aşağıdaki diagram bu yapıyı temsil ediyor.
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. Bu nedenle daha derine inmek doğru olmaz :)
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 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 olamak ü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.
(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 Virtual Networks içinde geçerli.
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 bahsetsekte, 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. Nasıl mı?
Örneğin Windows Server 2008 üzerinde ücretsiz olarak gelen Reliability and Performance Monitor ve aşağıdaki counter’ları kullanabilirsiniz.
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.
Serhat AKINCI – IT Professional





















En Yeni Yorumlar