ESXI Memory Yönetimi ve Teknikleri
Performans yönetimi bir IT operasyonunun en kritik görevlerinden biridir. Kullanıcılarımıza sunmuş olduğumuz hizmetlerin SLA’lere uygun olmasını ve kullanıcı tecrübesinin hep en iyi noktada olmasını isteriz. Performans bu kadar kritik bir noktadayken ESXI’ın VM’lerin kaynaklarını ve performanslarını nasıl yönettiğini anlamamız ve bunu nasıl mevcut yapımıza uygun olarak kullanacağımızı bilmemiz gerekiyor.
ESXI’ın VM’lere tanımlı olan memory değerlerini nasıl yönettiğini anlamamız performan yönetimi açısından kritik noktalardan biridir. Bu sayede doğru VM sizing yapabileceğimiz gibi ihtiyaç duyacağımız host sayısını da tam anlamıyla görebiliriz.
Öncelikle bazı terimleri ve memory yönetim tekniklerini açıklamakla başlayacağım.
Allocated Memory: Çalışan program ve servislerin OS üzerinde ayırmış oldukları memory miktarına denir .Allocated memory’i kendi içerisinde active ve idle olmak üzere ikiye ayrılmaktadır.
Active Memory: O anda sistem ve uygulamalar tarafından erişilen memory miktarı.
Idle Memory: Sistem tarafından allocate edilmiş ama o an için erişilmeyen memory alanı.
Cache: Bazen çalıştırdığımız dosyaların veya yazılımların bazı kısımlarını kullanmasak bile ileride hızlı bir şekilde erişebilmemiz için OS, memory üzerinde tutar buna cache denmektedir. Kullanmadığımız kısıma erişmek istediğimizde cache üzerinden geleceği için diske göre çok büyük bir performans artısı olmaktadır.
ESXI hostları üzerinde ki VM’lerin kapladığı toplam memory’e göre de iki durum oluşabilir.
Memory Undercommit: Host üzerinde ki VM’lerin atanmış toplam memory değerleri fiziksel host’un toplam memory değerinden düşük olması. Bu durum performansı en küçük bir dalgalanmadan direk etkilenecek kritik iş uygulamalarının olduğu sistemler haricinde istenmemektedir.
Memory Overcommit: Host üzerinde ki VM’lerin atanmış toplam memory değerleri fiziksel hostun toplam memory değerinden yüksek olması. Overcommitment doğru uygulandığında ciddi bir maliyet avantajı sağlamaktadır ve endüstride hepimizin planlamalarımızı yaparken kullandığı bir yöntemdir.
ESXI VM’lerin memory’lerini yönetmek için 4 farklı yöntem kullanmaktadır.
- Transparent page sharing
- Memory ballooning
- Compression
- ESXI hostu seviyesinde swapping
Bu yöntemlerden ballooning ve swapping fiziksel memory’nin yetmediği zamanlarda devreye girerken TPS ve Compress arka tarafta sürekli çalışan sistemlerdir.
Transparent Page Sharing: ESXI üzerinde ön tanımlı olarak açık gelen bir özelliktir. Aynı host üzerinde çalışan VM’lerin yaratmış olduğu memory içeriklerinde eğer ortak noktalar varsa bunları tekilleştirerek yer kazanmaktadır. Varsayalım ki elimizde üzerinde IIS servisi olan 2 adet Windows sunucusu olsun. Bu sunucular farklı web sayfaları barındırsalar da OS ve uygulama seviyesinde bir birlerine çok benzeyen memory içeriklerine(pages) sahip olacaklardır. Transparent Page sharing aynı içerikten birden fazla tutmak yerine bir tane tutarak memory’i daha etkili kullanmamızı sağlamaktadır. Bu tekilleştirme işlemi her 60 dakikada bir yapılmaktadır ama Mem.ShareScanTime değerini değiştirerek bu süreyi değiştirebiliriz.
Memory Ballooning: Normalde ESXI ve GuestOS bir birlerinin memory durumlarından tamamen habersizdirler. VMTools’u yüklediğiniz zaman beraberinde gelen vmmectl sürücüsü sayesinde artık bu iki yapı arasında bir ilişki oluşturulmuştur. Fiziksel host üzerinde memory ihtiyacı doğduğunda veya mevcut VM’lerden biri yüksek miktarda memory’e ihtiyaç duyduğunda bu sürücü sayesinde host üzerinde ki başka VM’ler kullanmadıkları allocated memory üzerinden idle memory’i ESXI host’a geri vermektedir. ESXI host boşa çıkan bu memory kaynağını o anda ihtiyaç duyan VM’lere tekrardan dağıtmaktadır. Bu işlem esnasında GuestOS her hangi bir şekilde kendisine tanımlı memory miktarında bir değişim göremez. Eğer ki aktif memory kullanımı artarsa belli bir süre boyunca idle memory’den karşılanır o da yetmezse ballooning devreye girer.
Compression: Overcommitted ortamlarda ESXI üzerinde ki boş memory değeri azaldıkça VM’lere ait page’leri sıkıştırarak yer kazanmaya çalışılır.
Swapping: Yukarıda ki yöntemlerden hiç biri hala ihtiyaçları karşılamazsa ESXI VM’lerin page’leri disk üzerine yazmaya başlar. Compression ve Swapping işleminde ESXI rastgele page’leri seçerek işlemektedir. Bunun VM’in performansı üzerinde ciddi anlamda negatif bir etkisi vardır.
ESXI yukarıda adı geçen yöntemleri hangi sırayla ve ne zaman uygular sorusuna Vmware aşağıda ki gibi bir psecode’uyla cevap vermektedir.
İf Consumed > Entitlement then if host free memory > 4% of ESX memory then Inflate balloon by “consumed - entitlement” Else Compress “consumed - entitlement” memory from vM İf compression ratio > 50% then swap memory instread End if End if
Yazımın ikinci kısmındaysa bazı önerileri ve tecrübelerimi sizinle paylaşmak istiyorum.
- Eğer bir host üzerinde sürekli memory ihtiyacı varsa DRS/vMotion gibi bir yöntemle başka hostlara yükü dağıtın
- Terminal üzerinden esxtop ve memstats ile düzenli olarak memory durumunu kontrol edebilirsiniz.
- vCenter üzerinden chart’ları kullanarak VM’lerin ne kadar ballooning veya swap yapıp yapmadığını kontrol edebilirsiniz.
- Eğer ortamınız büyükse vCOPS’u mutlaka kullanın, size bir çok getirisi olacaktır.
- VM’ler için sizing yaparken GuestOS’un talep ettiği(demand) memory’i inceleyerek karar veriniz bu sizin yoğun VM’lerinin her zaman ihtiyaç duydukları kadar active memory’e sahip olmasını sağlar. GuestOS’un memory demand’ını vCOPS üzerinden görebilirsiniz.
- Kritik servisleriniz için rezervasyon kullanın.
- Mümkün olduğu kadar aynı tip uygulamaları barındıran VM’leri aynı hostlar üzerinde toplayın.
- GuestOS seviyesinde ASLR ve Super fetching’i kapatmanız TPS açısından ciddi bir performans ve kazanç artışına sebep olacaktır.
- GuestOS’ların kendi üzerlerinde yeterli page/swap alanına sahip olduğuna emin olun
- ESXI’ın VM memory swap alanı olarak kullanması için ayrı bir disk bulundurun ve mümkünse SSD olsun.
- Memory overcommitment planınızı asla ama asla active memory üzerinden değil VM’lere atanacak toplam memory değeri üzerinden yapınız aksi takdirde eğer (toplam active memory/fiziksel memory) = 1 olduğunda performans sıkıntısı yaşarsınız.
- vSphere’in kaynak yönetim metotlarını ve nasıl çalıştıklarını mutlaka okuyunuz.
Okuduğunuz için teşekkür ederim. Daha fazla bilgiyi Vmware’in kendi dokümanında bulabilirsiniz.
2 comments, add your’s.
ozgur
çok güzel bir anlatım olmuş. Teşekkürler
Ahme
Teşekkürler Emre Bey.