{"id":110,"date":"2018-01-21T21:17:07","date_gmt":"2018-01-21T21:17:07","guid":{"rendered":"http:\/\/labiol.xyz\/?p=110"},"modified":"2018-01-21T21:17:07","modified_gmt":"2018-01-21T21:17:07","slug":"vmware-memory-overcommitment","status":"publish","type":"post","link":"https:\/\/www.labiol.xyz\/index.php\/2018\/01\/21\/vmware-memory-overcommitment\/","title":{"rendered":"Vmware memory overcommitment"},"content":{"rendered":"<p>VMware umo\u017cliwia przypisanie wszystkim wirtualnym systemom takiej ilo\u015bci pami\u0119ci kt\u00f3rej suma przekracza rzeczywist\u0105 wielko\u015b\u0107. Dodatakowo VMware dla ka\u017cdej maszyny wirtualnej dodaje sw\u00f3j narzut wykorzystywanej pami\u0119ci. Narzut ten mo\u017ce nawet wynosi\u0107 20% pami\u0119ci wykorzystywanej przez wirtualny system. To wszystko rodzi pytania, czy wirtualizacja (z uwagi na pami\u0119\u0107) si\u0119 op\u0142aca oraz kiedy wszystkie maszyny bardzo zwolni\u0105 lub wr\u0119cz przestan\u0105 pracowa\u0107, gdy pami\u0119ci zabraknie.<\/p>\n<p>Opr\u00f3cz wielu zalet wirtualizacji wa\u017cn\u0105, cz\u0119sto decyduj\u0105c\u0105 o wdro\u017ceniu rozwi\u0105za\u0144 wirtualizacyjnych w du\u017cych inwestycjach informatycznych jest mo\u017cliwo\u015b\u0107 alokacji zasob\u00f3w kt\u00f3rych sumaryczna wielko\u015b\u0107 przekracza rzeczywist\u0105 wielko\u015b\u0107. W przypadku pami\u0119ci ram procedura taka nosi nazw\u0119 memory overcommitment. W rzeczywistym \u015brodowisku wykorzystanie pami\u0119ci RAM w serwerach wynosi w okolicy 30%. Reszta pami\u0119ci albo jest zupe\u0142nie nieu\u017cywana, albo jest \u201eza\u015bmiecona\u201d przez rzeczy, kt\u00f3re by\u0142y zaczytane w dosy\u0107 odleg\u0142ej przesz\u0142o\u015bci i prawie nigdy nie s\u0105 u\u017cywane. Ta nieu\u017cywana pami\u0119\u0107 jest \u0142atwym k\u0105skiem dla administrator\u00f3w a wirtualizacja daje mo\u017cliwo\u015b\u0107 jej \u0142atwego wykorzystania.<\/p>\n<p>Aby efektywnie wykorzystywa\u0107 t\u0105 nieu\u017cywan\u0105 pami\u0119\u0107\u00a0system ESX implementuje 3 mechanizmy: transparent page sharing (TPS), Balloning, swapping.<\/p>\n<ol>\n<li>TPS \u2013 mechanizm kt\u00f3ry pozwala zaoszcz\u0119dzi\u0107 pami\u0119\u0107 na powielonych segmentach pami\u0119ci; w miejsce wielu takich samych blok\u00f3w pami\u0119ci utrzymuje si\u0119 jeden a ESX pami\u0119ta gdzie te segmenty pami\u0119ci powinny by\u0107. ESX dla ka\u017cdego bloku pami\u0119ci utrzymuj\u0119 tablice hashy. Okresowo (co 60 minut \u2013 parametr ten mo\u017cna oczywi\u015bcie zmieni\u0107) ESX skanuje pami\u0119\u0107 i sprawdza kt\u00f3re bloki pami\u0119ci s\u0105 powielone. Mechanizm ten najlepiej sprawdza si\u0119 w \u015brodowiskach, gdzie zainstalowanych jest wiele maszyn wirtualnych tego samego typu (same linuksy z apachem). W zwyk\u0142ym \u015brodowisku replikowanie by\u0142yby wszystkie biblioteki x ilo\u015b\u0107 serwer\u00f3w. Nast\u0119puje deduplikacja pami\u0119ci.Jak wynika z r\u00f3\u017cnych analiz (patrz linki na dole) nawet pojedyncza instalacja systemu (win 2008) z bibliotekami wsp\u00f3\u0142dzielonymi potrafi utrzymywa\u0107 w pami\u0119ci kopie tych samych bibliotek. W idealnej sytuacji oszcz\u0119dno\u015bci pami\u0119ci mog\u0105 by\u0107 nawet w granicach 30%.<br \/>\nDodatkowy mechanizm pozwalaj\u0105cy zaoszcz\u0119dzi\u0107 troch\u0119 pami\u0119ci jest kopiowanie przy zapisie (COW \u2013 copy on write). Zosta\u0142 on w bardzo dobry spos\u00f3b opisany tutaj:\u00a0<a href=\"http:\/\/pl.wikipedia.org\/wiki\/Kopiowanie_przy_zapisie\">http:\/\/pl.wikipedia.org\/wiki\/Kopiowanie_przy_zapisie<\/a><\/li>\n<li>Ballooning (vmmemctl driver) \u2013 idea jest prosta, jednak przy g\u0142\u0119bszej analizie okazuje si\u0119, \u017ce 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\u0107 pami\u0119ci RAM. W\u00f3wczas serwer ustawia ustawia odpowiedni parametr w sterowniku \u2013 jest to wielko\u015b\u0107 jak\u0105 ma on zaj\u0105\u0107 w pami\u0119ci danej maszyny wirtualnej. Sterownik ten ma du\u017cy prorytet. Pami\u0119c kt\u00f3rej zaj\u0119cie wymusza jest oznakowana w taki spos\u00f3b, \u017ce system operacyjny nie mo\u017ce jej swapowa\u0107. Odzyskana w ten spos\u00f3b pami\u0119\u0107 wraca do serwera ESX kt\u00f3ry mo\u017ce j\u0105 wykorzysta\u0107 w innej maszynie.<br \/>\nKorzy\u015bci p\u0142yn\u0105ce z zastosowania takiego mechanizmu wynikaj\u0105 z tego, \u017ce to system operacyjny decyduje kt\u00f3re elementy nale\u017cy usun\u0105\u0107 z pami\u0119ci (i przenie\u015b\u0107 jest na przyk\u0142ad do swap dysku). ESX nie monitoruje u\u017cycia pami\u0119ci systemu wirtualnego, wie tylko kiedy system rezerwuje dane bloki do odczytu i zapisu. ESX nie wie kt\u00f3re bloki b\u0119d\u0105 potrzebne systemowi i kiedy je zwalnia. Z up\u0142ywem czasu serwer najprawdopodobniej zajmie maksymaln\u0105 ilo\u015b\u0107 przydzielonej pami\u0119ci. Dzi\u0119ki opisanemu mechanizmowi mo\u017cna w prosty spos\u00f3b odzyska\u0107 pami\u0119\u0107 operacyjn\u0105 systemu.<br \/>\nWielko\u015b\u0107 zaj\u0119tej pami\u0119ci w tym procesie:domy\u015blnie jest to 40%(check) dost\u0119pnej pami\u0119ci, parametr ten mo\u017cna zmieni\u0107 w zak\u0142adce: configration tabs \u2192 advanced settings \u2192 mem. Od momentu kiedy host zacznie dysponowa\u0107 wi\u0119ksz\u0105 ilo\u015bci\u0105 pami\u0119ci, zmienia parametr w sterowniku kt\u00f3ry zaczyna zajmowa\u0107 mniejsz\u0105 ilo\u015b\u0107 pami\u0119ci.<br \/>\nObserwacja historii zmiany wielko\u015bci pami\u0119ci zajmowanej w tym procesie jest dobrym wyznacznikiem tego, co si\u0119 dzieje z hostem. Cz\u0119ste wykorzystanie tego mechanizmu pozwala wysnu\u0107 wnioski, \u017ce nale\u017cy pomy\u015ble\u0107 zmianie parametr\u00f3w dzia\u0142aj\u0105cych wirtualnych serwer\u00f3w, b\u0105d\u017a zwi\u0119kszy\u0107 fizyczn\u0105 pami\u0119\u0107 hosta.<br \/>\nOgraniczenia: system operacyjny musi zareagowa\u0107, zatem wad\u0105 wykorzystania tego mechanizmu jest jego czas dzia\u0142ania<\/li>\n<li>Swapping (Hypervisor Swapping) \u2013 jest to mechanizm kt\u00f3rego dzia\u0142anie jest niepo\u017c\u0105dane z uwagi na bardzo du\u017cy spadek wydajno\u015bci ca\u0142ego systemu. W momencie kiedy dwa powy\u017csze mechanizmy nie wystarczaj\u0105, ESX zaczyna zrzuca\u0107 pami\u0119\u0107 wirtualnej maszyny do pliku swap. ESX podczas uruchomienia alokuje plik o wielko\u015bci pami\u0119ci operacyjnej wirtualnej maszyny. Jest on wykorzystywany w procesie swapowania. Niestety hypervisor nie zadaje sobie trudu ( i s\u0142usznie) kt\u00f3re elementy wirtualnej maszyny nale\u017cy swapowa\u0107, wi\u0119c zrzuca na dysk wszystko jak leci. System operacyjny widzi, \u017ce mo\u017ce u\u017cywa\u0107 tyle pami\u0119ci ile mia\u0142 zadeklarowane na pocz\u0105tku. Z tego powodu nast\u0119puje bardzo du\u017cy spadek wydajno\u015bci maszyny.<\/li>\n<\/ol>\n<p>Pytania, kiedy jest wykorzystywany plik swap hypervisora?<\/p>\n<p>Artyku\u0142 niesko\u0144czony, do poprawki j\u0119zykowej \u2013 zobacz p\u00f3\u017aniej.<\/p>\n<p><a href=\"http:\/\/www.windowsitpro.com\/article\/performance\/q-how-long-does-it-take-for-vmware-transparent-page-sharing-tps-to-find-all-duplicate-pages-of-memory-for-a-virtual-machine-vm-.aspx\">http:\/\/www.windowsitpro.com\/article\/performance\/q-how-long-does-it-take-for-vmware-transparent-page-sharing-tps-to-find-all-duplicate-pages-of-memory-for-a-virtual-machine-vm-.aspx<\/a><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/www.windowsitpro.com\/article\/john-savills-windows-faqs\/q-i-heard-that-vmware-esx-allows-you-to-overcommit-memory-which-means-it-pages-out-the-memory-of-guests-to-a-file-giving-very-poor-performance-is-this-true-.aspx\">http:\/\/www.windowsitpro.com\/article\/john-savills-windows-faqs\/q-i-heard-that-vmware-esx-allows-you-to-overcommit-memory-which-means-it-pages-out-the-memory-of-guests-to-a-file-giving-very-poor-performance-is-this-true-.aspx<\/a><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/wirtualizacja.wordpress.com\/2009\/09\/30\/dlaczego-moja-wirtualka-wolna-jest-jak-slimak-czesc-1-pamiec\/\">http:\/\/wirtualizacja.wordpress.com\/2009\/09\/30\/dlaczego-moja-wirtualka-wolna-jest-jak-slimak-czesc-1-pamiec\/<\/a><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/www.vmware.com\/files\/pdf\/perf-vsphere-memory_management.pdf\">http:\/\/www.vmware.com\/files\/pdf\/perf-vsphere-memory_management.pdf<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Terminologia:<\/p>\n<p>* Host physical memory &#8211; pami\u0119c widoczna przez hypervisor<br \/>\n* Guest physical memory &#8211; pami\u0119\u0107 widoczna przez zwirtualizowany system operacyjny<br \/>\n* Guest virtual memory &#8211; ci\u0105g\u0142a przestrze\u0144 adresowa prezentowana aplikacji przez zwirtualizowany system operacyjny<br \/>\n* paging &#8211; zrzucanie pami\u0119ci do swap, wykonywane na poziomie systemu operacyjnego<br \/>\n* swapping &#8211; zrzucanie pami\u0119ci VM (dok\u0142adnie Guest physical memory) do urz\u0105dzenia (partycji) swap hosta, wykonywane przez hypervisor<\/p>\n<p><strong>VM&#8217;s host memory usage &lt;= VM&#8217;s guest memory size + VM&#8217;s overhead memory<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>VMware umo\u017cliwia przypisanie wszystkim wirtualnym systemom takiej ilo\u015bci pami\u0119ci kt\u00f3rej suma przekracza rzeczywist\u0105 wielko\u015b\u0107. Dodatakowo VMware dla ka\u017cdej maszyny wirtualnej dodaje sw\u00f3j narzut wykorzystywanej pami\u0119ci. Narzut ten mo\u017ce nawet wynosi\u0107 20% pami\u0119ci wykorzystywanej przez wirtualny system. To wszystko rodzi pytania, czy wirtualizacja (z uwagi na pami\u0119\u0107) si\u0119 op\u0142aca oraz kiedy &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-110","post","type-post","status-publish","format-standard","hentry","category-vmware"],"_links":{"self":[{"href":"https:\/\/www.labiol.xyz\/index.php\/wp-json\/wp\/v2\/posts\/110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.labiol.xyz\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.labiol.xyz\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.labiol.xyz\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.labiol.xyz\/index.php\/wp-json\/wp\/v2\/comments?post=110"}],"version-history":[{"count":1,"href":"https:\/\/www.labiol.xyz\/index.php\/wp-json\/wp\/v2\/posts\/110\/revisions"}],"predecessor-version":[{"id":111,"href":"https:\/\/www.labiol.xyz\/index.php\/wp-json\/wp\/v2\/posts\/110\/revisions\/111"}],"wp:attachment":[{"href":"https:\/\/www.labiol.xyz\/index.php\/wp-json\/wp\/v2\/media?parent=110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.labiol.xyz\/index.php\/wp-json\/wp\/v2\/categories?post=110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.labiol.xyz\/index.php\/wp-json\/wp\/v2\/tags?post=110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}