vSphere 7.0 - vMotion Geliştirmeleri
vSphere vMotion, günümüz sanallaştırma altyapılarının en önemli ve en çok kullanılan özelliklerinden biridir. VMware tarafından 2003 yılında kullanıma sunulmuş olan bu özellik, açık (powered-on) bir sanal makinenin bir ESXi hosttan bir başka ESXi hosta taşınması olarak tanımlanabilir. vSphere vMotion, kullanıma sunulduğu 2003 yılında bu yana, her VMware vSphere versiyonu ile birlikte yeni geliştirme ve desteklerle günümüzde oldukça olgun ve çok kullanışlı bir teknoloji haline gelmiştir. Gelen özelliklere versiyon ve tarih bazlı olarak aşağıdaki tablodan erişilebilir.

Bu makale, vSphere 7.0 ile birlikte gelen vMotion geliştirmelerini anlatmaya yönelik olup sırasıyla aşağıdaki konu başlıklarına değinilecektir;
- vSphere vMotion Nedir? Günlük Pratikte Faydaları Nelerdir?
- vSphere vMotion Nasıl Çalışır?
- vSphere 7.0 vMotion Geliştirmeleri Nelerdir?
vSphere vMotion Nedir? Günlük Pratikte Faydaları Nelerdir?
vSphere vMotion, kullanıcıların üzerindeki uygulama ve servislere erişim sağladıkları, açık (powered-on) bir sanal makinenin bir ESXi host üzerinden bir başka ESXi host üzerine taşınmasıdır. Aslında vSphere vMotion, sanal makine uyku (suspend) ya da kapalı (power-off) güç modlarında iken de çalışmaktadır ama esas amaç açık olan bir sanal makinenin hostlar arasında taşınmasıdır.

vSphere vMotion özelliğinin çalışabilmesi için gerek host ve gerekse sanal makine seviyesinde birtakım gereksinimler mevcuttur.
Host Seviyesinde Gereksinimler
- vSphere vMotion için oluşturulmuş bir vmkernel port.
- Sanal makinelerin bulunduğu paylaşımlı disklere erişim. (Fibre Channel, iSCSI, NAS)
- Kaynak ve Hedef ESXi hostlar arasında CPU uyumluluğu.
Sanal Makine Seviyesinde Gereksinimler
- Sanal makine vCPU’larının kaynak ESXi hostun LCPU’suna bağımlı olmaması (CPU Affinity).
- Sanal makine CD/DVD’sine kaynak ESXi hostun local bir disk alanından ISO bağlı olmaması.
- Sanal makinenin Internal Virtual Switch’ bağlı olmaması.
- Sanal makinede RDM varsa, hedef ESXi hostun da RDM yapılmış LUN’u görüyor olması.
vSphere vMotion özelliğinin günlük pratikte getirdiği faydalar şunlardır;
- Bir ESXi hosta bir bakım çalışması yapılacaksa, ilgili host üzerindeki sanal makinelerin başka hostlara, son kullanıcılar hissetmeden taşınması ve bu çalışmanın iş kesintisi olmadan yapılabilir hale gelmesi.
- Sanal makinelerin ESXi hostlar üzerine dengeli bir şekilde dağıtılması ve herhangi bir kaynak yarışması (Resource Contention) yaşanması durumunda ESXi hostlar arasında yeniden taşıma yapılarak iş yükünün tekrar dengelenmesi (DRS Cluster özelliği olup geri planda vSphere vMotion kullanılmaktadır).
vSphere vMotion Nasıl Çalışır?
vSphere vMotion özelliği vCenter Server’ın dağıtık bir hizmeti olup, bu özelliğin kullanılabilmesi için vCenter Server bileşeninin mutlaka çalışır durumda olması gerekir. Bir sanal makine için vMotion işlemi başlatıldığında, vCenter Server öncelikli olarak bir uyumluluk kontrolü gerçekleştirir. Yukarıda anılmış olan, gerek host ve gerekse sanal makine seviyesindeki gereksinimlerin tamamı kontrol edilir. Eğer sanal makinenin belirtilen ESXi hosta taşınmasını kısıtlayan bir unsur yoksa, aşağıdaki bilgileri içeren bir taşıma belirtimi (Migration Specification) oluşturur;
- Taşınacak sanal makinenin adı
- Sanal makine konfigürasyonu (Virtual Hardware, VM Options vs.)
- Source ESXi Host Name
- Destination ESXi Host Name
- vMotion Network Detayları (vmkernel port ip adresleri vs.)
Bu taşıma belirtimi (Migration Specification), hem kaynak hem de hedef ESX hostlara gönderilir. vCenter Server VPX Agent aracılığıyla kaynak ESXi hostun Hostd (Host Deamon) servisi ile iletişime geçerek taşıma işleminin başlatılmasını ister. Hostd taşınacak olan sanal makineyi “Intermediate State” denilen bir duruma alır, böylece taşıma esnasında sanal makinenin herhangi bir ayarının değiştirilememesi garanti altına alınmış olur. Bu işlemlerin ardından kaynak ve hedef ESXi hostlar arasında (vMotion vmkernel portları üzerinden) bir soket açılmış olur.

VMM (Virtual Machine Monitor) modülü sanal makinenin belleğini yönetmekten, sanal makinenin depolama ve I/O isteklerini vmkernel katmanına aktarmaktan sorumludur. VMX (Virtual Machine Executable) modülü ise vmkernel katmanında çalışır, sanal makine performansı için kritik olmayan I/O gereksinimlerinden sorumludur.
Önemli Not : Taşıma işlemi tamamlanıncaya kadar (Switchover) sanal makinenin etkin belleği kaynak ESXi host üzerindedir.
Pre-Copy Phase (Kopyalama Öncesi Fazı)
Yukarıdaki gereksinimlerin sağlanması ve işlemlerin yapılmasının ardından hedef ESXi host üzerinde bir Virtual Machine Process (VMX) başlatılır, aslında burada bir sanal makine oluşturulur ancak bu makine system yöneticisi tarafından görülemeyen bir sanal makinedir (Shadow VM). Hedef ESXi host üzerinde taşınacak sanal makine için kaynak ayırma işlemi yapılır. Böylece kaynak ESXi host üzerindeki canlı sanal makine hafızasının kopyalanacağı hedef hazırlanmış olur. Bu işlemin ardından, kaynak ESXi host üzerindeki memory’de bulunan sanal makineye ait bilgiler hedef ESXi hosta taşınmaya başlar. Şu unutulmamalıdır ki, taşıma esnasında makine açıktır ve sanal makine hafıza sayfaları (memory pages) değişmeye devam etmektedir. Taşıma esnasında değişen memory sayfalarına “dirty pages” adı verilir ve ilk kopyalama fazına dahil değildir. Bu sayfalar tekrar eden fazlarda (iterative pre-copy) hedef ESXi hosta gönderilirler.

Pre-copy fazı esnasında sanal makinenin tüm vCPU’ları page tracing işlemi için AYNI ANDA DURAKLATILIR (STUN edilir.) Ardından vmkernel migration module VMM’e değişen hafıza sayfaları için page tracing işlemine başlamasını söyler. Page Tracing fazı kendini tekrar eden bir döngüdür ve sanal makinenin tüm hafıza sayfaları (memory pages) hedef ESXi hosta taşınıncaya kadar devam eder. 32 GB ram kullanan bir sanal makine için örnek verilecek olursa;
Faz-1 : 32 GB RAM Read-Only yapılarak hedef ESXi hosta taşınmaya başlanır, ancak taşıma esnasında örneğin hafızanın 8 GB’lık kısmı değişir. (Dirty Pages)
Faz-2 : 8GB’lık Dirty Pages için tekrar taşıma başlatılır, ancak bu taşıma enasında da örneğin 2 GB’lık kısım değişir. (Dirty Pages)
Faz-3 : 2 GB’lık Dirty Pages için tekrar taşıma başlatılır, ancak bu taşıma esnasında da örneğin 100 MB’lık kısım değişir (Dirty Pages)
Faz-4 : Kalan 100 MB Dirty Pages için tekrar taşıma başlatılır. Bu döngü son hafıza sayfaları hedef ESXi hosta taşınıncaya kadardevam eder.
Her bir fazın bitirilmesi için hedef süre 500 ms’dir.

Switchover Phase (Değiştir Fazı)
Kaynak ESXi host üzerindeki sanal makineye ait tüm hafıza sayfaları hedef ESXi hosta taşındığında (pre-copy işlemi bittiğinde), kaynak ESXi host üzerindeki sanal makine VMM servisi VMX’e artık makineyi askıya alabileceğini söyler. Kaynak ESXi host üzerindeki kontrol verisi (checkpoint data) ve bellek haritası (memory bitmap) hedefe taşındıktan sonra, VMX kaynak host üzerindeki sanal makineyi sönümler ve hedef ESXi host üzerindeki sanal makine kullanılmaya başlanır. Böylece sanal makine taşıma işlemi tamamlanmış olur.

Sanal makinenin hedef ESXi hosta geçiş süresini etkileyen faktörler şunlardır ;
- Sanal makinenin hafıza boyutu ve iş yüküne bağlı olarak Pre-Copy esnasında değişen hafıza sayfası miktarı. (Dirty Pages)
- Sanal makinenin vCPU’larının Pre-Copy fazında “page tracer” işlemi için STUN edilme süresi
vSphere 7.0 vMotion Geliştirmeleri Nelerdir?
Sanallaştırma teknolojilerinin yaygın olarak kullanılması ile birlikte sanal makineler üzerinde koşturulan iş yükleri her geçen zaman daha fazla vCPU ve Memory kaynağına ihtiyaç duymaktadır. vSphere 7.0 sürümünde bir sanal makineye 256 vCPU ve 6 TB Ram verilebilmektedir. Ancak, önümüzdeki dönemde gelecek olan güncelleme ile tek bir sanal makineye 768 vCPU ve 24 TB ram verilebiliyor olacaktır. Kaynakları bu büyüklüklerde olan sanal makinelere “Large VM” ya da “Monster VM” adı verilmektedir.
Kaynakları fazla olan bu “Monter” sanal makinelerin kesintisiz ve performanstan taviz vermeden taşınma ihtiyacı, kaçınılmaz olarak vSphere vMotion tarafında birtakım iyileştirmeler yapılması ihtiyacını doğurmuştur. vSphere 7.0 ile birlikte aşağıda vMotion iyileştirmeleri gelmiştir:
- Memory Pre-Copy Optimization (Hafıza Ön-Kopyalama Optimizasyonu)
- Switch-over Phase Enhancements (Geçiş Fazı Geliştirmeleri)
Memory Pre-Copy Optimization (Hafıza Ön-Kopyalama Optimizasyonu)
vMotion Pre-Copy fazı yukarıda detaylı olarak aktarılmıştır. vMotion işlemi başladığında “page tracer” işleminin başlaması için sanal makinenin TÜM vCPU’larının aynı anda STUN edilmesi gerekmektedir. vSphere ESXi 3.X, 4.X, 5.X ve 6.X versiyonları için durum aşağıdaki gibidir.

vCPU’ların hepsinin mikrosaniye seviyesinde bile olsa bir anda stop edilmesi iş yükünü bozar ve performans problemlerine sebep olur. vSphere 7.0’da ise “Loose Page Trace Install” yöntemine geçilmiş olup “page tracing install” işlemi için sadece tek bir vCPU kullanılır. Aşağıda gösterildiği gibi diğer vCPU’lar iş yükünü karşılamaya devam ederler ve performans problemi çıkmaz.

vSphere 6.7 versiyona kadar hangi hafıza sayfalarının değiştiğinin anlaşılması için VMM sanal makine memory’sini 4 KB’lık sayfalara ayırmaktadır. Taşıma esnasında hafızanın ciddi bir kısmı değişmiyor olsa bile her bir 4 KB’lik sayfayı takip etmek hem fiziksel CPU için bir maliyet hem de sanal makinenin performansına negatif etki eden bir faktördür. vSphere 7.0 ile birlikte VMM, 4 KB yerine 1 GB’lık PTE’ler kullanmaktadır. Eğer bu 1 GB’lık alan için hafıza sayfası değişirse (literatürde buna “page fire” denir) o zaman ilgili PTE önce 2 MB sonra da gerekliyse 4 KB’ta bölünür. VMware mühendisleri vMotion esnasında sanal makine hafızasının çok büyük bir kısmına dokunulmadığını görmüşler ve dolayısıyla 1 GB’lık bloklar halinde “Read-Only Page Table Entry” ‘ler oluşturulmasını sağlayarak performansa katkı sağlamışlardır.

Switch-over Phase Enhancements (Geçiş Fazı Geliştirmeleri)
Yukarıda Pre-Copy ve Switchover fazları detaylı olarak anlatılmıştır. Kaynak ESXi host üzerindeki sanal makinenin askıya alınıp hedef ESXi host üzerindeki sanal makinenin aktif olarak kullanılmaya başlanması için geçecek süre en fazla 1 saniye (veya altında) olmalıdır.
Switchover (Geçiş) fazında kaynak ESXi host üzerinden hedef ESXi hosta kontrol verisi (checkpoint data) ve bellek haritası (memory bitmap) gönderilir. Bu işlem, gönderim belleğin izlenmesi ve kopyalamanın garanti altına alınması için şarttır. Bellek haritasının büyüklüğü sanal makinenin memory miktarına göre değişir. Örneğin 8 GB memory kullanan makinenin bellek haritası 256 Kbyte’tır. 256 Kbyte’lık bir bellek haritasının taşınması milisaniye seviyesindedir. Bellek haritası aşağıda görüldüğü gibi seyrektir (sparse):

Oysa 6 TB memory kullanan bir sanal makinenin bellek haritası 192 MB’tır. 192 MB’lık bir verinin vMotion ağı üzerinden milisaniye seviyesinde bir sürede hedef ESXi hosta taşınması mümkün değildir. Bu sebeple, bellek haritası sıkıştırılır ve bellek haritasının karşı tarafa milisaniyeler içinde geçişi mümkün hale gelir.

Sonuç olarak, yukarıda anlatılan iyileştirmeler sayesinde, çok büyük sanal makineler bile herhangi bir performans problemi olmaksızın ESXi hostlar arasında taşınabilir duruma gelmişlerdir.
Ömer AŞIK
VMware Certified Instructor
