VMware umożliwia przypisanie wszystkim wirtualnym systemom takiej ilości pamięci której suma przekracza rzeczywistą wielkość. Dodatakowo VMware dla każdej maszyny wirtualnej dodaje swój narzut wykorzystywanej pamięci. Narzut ten może nawet wynosić 20% pamięci wykorzystywanej przez wirtualny system. To wszystko rodzi pytania, czy wirtualizacja (z uwagi na pamięć) się opłaca oraz kiedy wszystkie maszyny bardzo zwolnią lub wręcz przestaną pracować, gdy pamięci zabraknie.
Oprócz wielu zalet wirtualizacji ważną, często decydującą o wdrożeniu rozwiązań wirtualizacyjnych w dużych inwestycjach informatycznych jest możliwość alokacji zasobów których sumaryczna wielkość przekracza rzeczywistą wielkość. W przypadku pamięci ram procedura taka nosi nazwę memory overcommitment. W rzeczywistym środowisku wykorzystanie pamięci RAM w serwerach wynosi w okolicy 30%. Reszta pamięci albo jest zupełnie nieużywana, albo jest „zaśmiecona” przez rzeczy, które były zaczytane w dosyć odległej przeszłości i prawie nigdy nie są używane. Ta nieużywana pamięć jest łatwym kąskiem dla administratorów a wirtualizacja daje możliwość jej łatwego wykorzystania.
Aby efektywnie wykorzystywać tą nieużywaną pamięć system ESX implementuje 3 mechanizmy: transparent page sharing (TPS), Balloning, swapping.
- TPS – mechanizm który pozwala zaoszczędzić pamięć na powielonych segmentach pamięci; w miejsce wielu takich samych bloków pamięci utrzymuje się jeden a ESX pamięta gdzie te segmenty pamięci powinny być. ESX dla każdego bloku pamięci utrzymuję tablice hashy. Okresowo (co 60 minut – parametr ten można oczywiście zmienić) ESX skanuje pamięć i sprawdza które bloki pamięci są powielone. Mechanizm ten najlepiej sprawdza się w środowiskach, gdzie zainstalowanych jest wiele maszyn wirtualnych tego samego typu (same linuksy z apachem). W zwykłym środowisku replikowanie byłyby wszystkie biblioteki x ilość serwerów. Następuje deduplikacja pamięci.Jak wynika z różnych analiz (patrz linki na dole) nawet pojedyncza instalacja systemu (win 2008) z bibliotekami współdzielonymi potrafi utrzymywać w pamięci kopie tych samych bibliotek. W idealnej sytuacji oszczędności pamięci mogą być nawet w granicach 30%.
Dodatkowy mechanizm pozwalający zaoszczędzić trochę pamięci jest kopiowanie przy zapisie (COW – copy on write). Został on w bardzo dobry sposób opisany tutaj: http://pl.wikipedia.org/wiki/Kopiowanie_przy_zapisie - Ballooning (vmmemctl driver) – idea jest prosta, jednak przy głębszej analizie okazuje się, że jest to bardzo fajny mechanizm. Sterownik vmmemctl umieszczany jest w systemie podczas instalacji vmware tools i jest wykorzystywany w momencie, kiedy serwerowi ESX zaczyna brakować pamięci RAM. Wówczas serwer ustawia ustawia odpowiedni parametr w sterowniku – jest to wielkość jaką ma on zająć w pamięci danej maszyny wirtualnej. Sterownik ten ma duży prorytet. Pamięc której zajęcie wymusza jest oznakowana w taki sposób, że system operacyjny nie może jej swapować. Odzyskana w ten sposób pamięć wraca do serwera ESX który może ją wykorzystać w innej maszynie.
Korzyści płynące z zastosowania takiego mechanizmu wynikają z tego, że to system operacyjny decyduje które elementy należy usunąć z pamięci (i przenieść jest na przykład do swap dysku). ESX nie monitoruje użycia pamięci systemu wirtualnego, wie tylko kiedy system rezerwuje dane bloki do odczytu i zapisu. ESX nie wie które bloki będą potrzebne systemowi i kiedy je zwalnia. Z upływem czasu serwer najprawdopodobniej zajmie maksymalną ilość przydzielonej pamięci. Dzięki opisanemu mechanizmowi można w prosty sposób odzyskać pamięć operacyjną systemu.
Wielkość zajętej pamięci w tym procesie:domyślnie jest to 40%(check) dostępnej pamięci, parametr ten można zmienić w zakładce: configration tabs → advanced settings → mem. Od momentu kiedy host zacznie dysponować większą ilością pamięci, zmienia parametr w sterowniku który zaczyna zajmować mniejszą ilość pamięci.
Obserwacja historii zmiany wielkości pamięci zajmowanej w tym procesie jest dobrym wyznacznikiem tego, co się dzieje z hostem. Częste wykorzystanie tego mechanizmu pozwala wysnuć wnioski, że należy pomyśleć zmianie parametrów działających wirtualnych serwerów, bądź zwiększyć fizyczną pamięć hosta.
Ograniczenia: system operacyjny musi zareagować, zatem wadą wykorzystania tego mechanizmu jest jego czas działania - Swapping (Hypervisor Swapping) – jest to mechanizm którego działanie jest niepożądane z uwagi na bardzo duży spadek wydajności całego systemu. W momencie kiedy dwa powyższe mechanizmy nie wystarczają, ESX zaczyna zrzucać pamięć wirtualnej maszyny do pliku swap. ESX podczas uruchomienia alokuje plik o wielkości pamięci operacyjnej wirtualnej maszyny. Jest on wykorzystywany w procesie swapowania. Niestety hypervisor nie zadaje sobie trudu ( i słusznie) które elementy wirtualnej maszyny należy swapować, więc zrzuca na dysk wszystko jak leci. System operacyjny widzi, że może używać tyle pamięci ile miał zadeklarowane na początku. Z tego powodu następuje bardzo duży spadek wydajności maszyny.
Pytania, kiedy jest wykorzystywany plik swap hypervisora?
Artykuł nieskończony, do poprawki językowej – zobacz później.
http://www.vmware.com/files/pdf/perf-vsphere-memory_management.pdf
Terminologia:
* Host physical memory – pamięc widoczna przez hypervisor
* Guest physical memory – pamięć widoczna przez zwirtualizowany system operacyjny
* Guest virtual memory – ciągła przestrzeń adresowa prezentowana aplikacji przez zwirtualizowany system operacyjny
* paging – zrzucanie pamięci do swap, wykonywane na poziomie systemu operacyjnego
* swapping – zrzucanie pamięci VM (dokładnie Guest physical memory) do urządzenia (partycji) swap hosta, wykonywane przez hypervisor
VM’s host memory usage <= VM’s guest memory size + VM’s overhead memory
No Comments