VMware Memory Ballooning

هل تعتقد ان لو عندك VM محتاجه 12 GB من الرامات Memory واحنا ادنها 24 GB من Memory ده هيحسن كفائه VM ولا لاء وهل ده هياثر على بقيت VMs عندك ولا لاء

وعشان تقدر تجواب على السوال ده خلينا نتكلم الاول عن VMware Memory Ballooning وايه فكرته وازاى بيشتغل هات قهوتك وركز معايا

ايه هو VMware Memory Ballooning
هو تكنيك معين بتسخدمه VMware لتجميع واسترداد Memory اللى مش مستخدمه فى حاله ان Memory فى ESXI قليله وعليها ضغط ونقدر نقول ان طول ما ESXI Server بتاعك ال Memory performance بتاعته كويسه مش هنشوف اي Ballooning فى ولكن فى حاله اذا كان فى طلب على Memory من VMs اللى موجوده على السرفير وال ESXI Server معندوش Memory كفايه عشان يديها لل VMs فى الحاله دى هيلجا الى تنكيك Memory Ballooning عشان يقدر يجمع ويسترد Memory اللى مش مستخدمه من VMs ويقدر بعد كده يعيد استخدمها ويديها الى VMs المحتاجها

عشان نفهم ايه هو Memory Ballooning لازم نعرف الاول ان Memory بتاعتنا هتكون متجزئه الى 3 اجزاء

Host Physical Memory
وده بتكون ال physical RAM الموجوده فى ESXI Host Server بتاعك

Guest Physical Memory
وده بيكون عباره عن Memory المتاحه فى نظام التشغل بتاعك Guest OS

Virtual Memory
وده بيكون Memory اللى بيستخدمهApplication وبيتسجل كجزء من Guest OS Memory

طيب عشان نفهم Memory Ballooning كويس خلينا ناخود مثال ونشرحه عليه عشان نفهم بالزبط هو بيشتغل ازاى

عندنا VM جوه VM فى application ولنفترض ان application ده هيكون لعبه Spiderman

اول ماهنشغل لعبه Spiderman اللعبه هتطلب من Guest OS شويه Memory عشان تقدر تشتغل على طول Guest OS هيديها Memory من الموجوده عنده وهيسجل عنده ان الجزء ده من Memory مستخدمه من process دى اللى هى اللعبه بتاعتنا يعنى نقدر نقول هنا ان virtual memory خدت جزء من guest physical memory بمعنى “virtual memory -> guest physical memory”

زى ما احنا عارفين ان طريقه توزيع Memory فى Virtualization Technology مبنيه على Sharing على طول ال VM بتاعتنا هتروح تاخود شويه Memory من Host physical memory وبناءا عليه ESXI بتاعنا هيديها من Memory اللى عنده “guest physical memory -> host physical memory”

كل اللى فات ده طبيعى المشكله هتبداء هنا اول ما تخلص لعب وتقفل Application اللى هى اللعبه بتاعتنا Spiderman

اول ما هنقفل اللعبه بتاعتنا ال Guest OS هي هيروح على Memory اللى كانت اللعبه مستخدمها وهيخلى حالتها Free بحيث انه يقدر يستخدمها لاى Application تانى المشكله بقى ESXI Server بتاعنا مش هيعرف ان اللعبه اتقفلت وان Memory دى بقت Free لان Hypervisor مالوش access علىVM ومايعرفش ايه اللى بيحصل جواها وهتفضل Memory دى محجزه لل VM علما بان VM خلاص بقت مش محتاجها

هنا يجى دور Memory Ballooning وفى حاله ان ESXI بقى ماعندوش Memory كفايه عشان يقدر يديها لاى VM محتاجه Memory هيبتدى يستخدم تكنيك Memory Ballooning عشان يقدر يجمع ويسترد كل Memory اللى جوه فى VMs ومش مستخدمه عن طريق balloon driver الموجوده جوه VMware Tools وبيكون اسمها (vmmemctl.sys)

فى الحاله دى ESXI عن طريق VMware Tools وبالتحديد balloon driver “vmmemctl.sys” هيدى امر انه يتم نفخ البالونه “balloon inflate” جوه VM عشان يقدريعرف ويجمع كل Free Memory يعنى نقدر نقول مثلا ان عمليه نفخ البالونه دى هتكون زى application وهمي بيروح يشوف ايه Free Memory وبيحددها ويروح يدى المعلومات دى اللى ESXI Server عشان ESXI يقدر يعرف ان Memory مش مستخدمه ويقدريستخدمها مره تانيه

وزى ماقولتلك فى الاول ان ESXI بيلجاء الى تنفذ التكنيك ده فى حاله انه بقى عنده مشكله فى Memory وان Available Memory عنده بقى قليل ولكن لو فى Memory Recourse كفايه مش هينفذ التنكيك ده وبرضوا خليك عارف ان الحد الاقصى لعمليه “balloon inflate” هى 65% بمعنى لو عندنا VM فيها 1000 MB فعمليه نفخ البالون هتكون بحد اقصى 650 MB واخيرلو عاوز تتجنب حدوث عمليه Memory Ballooning على VM معينه بيحث ان Memory دى تبقى مخصصه ليها بغض النظر اذا كانت مستخدمه او لا تقدر تعمل ده عن طريق عمل Memory Reservation من اعدادات VM

وتقدر تشوف معلومات عن Memory Ballooning عندك اذا كان balloon driver موجود ولا لاء وكام balloon size عن طريق الامر ESXTOP مع M او ممكن عن طريق vCenter فى جزئيه host > Monitor > Advanced > Memory

واخيرا احب اقولك ان مش ده التكنيك الوحيد اللى بتستخدمه VMware لتقديم افضل استفاده من Memory ك resource واستخدمها افضل استخدم ولكن يوجود تكنيك تانى اسمه Transparent Page Sharing وده هنتكلم عنه فى المقال القادم ان شاء الله