رضا اردانه
۰۸ آبان ۱۳۹۷

واقعیت مصرف حافظه اصلی در ESXi

۰ دیدگاه
مقاله آموزشی
امتیاز دهید

فرآیند استفاده از حافظه اصلی در ESXi یک فرآینده پیچیده اما جالب می باشد. تکنولوژی های متعددی در زمینه مدیریت مصرف حافظه اصلی در ESXi تعبیه شده است که می خواهیم در این مقاله آنها را بررسی کنیم.

محصول ESXi در زمینه مدیریت حافظه اصلی بسیار قدرتمند عمل می کند. شما می توانید با داشتن یک هاست با میزان 128 گیگابایت حافظه اصلی، ماشینی با میزان حافظه 256 گیگابایت ایجاد نمایید. این امکان با استفاده از تکنیک های متعددی فراهم می شود که نیاز است تا با آنها آشنا شویم. اما لازم است تا قبل از اینکه به بررسی این تکنولوژی ها بپردازیم با برخی مفاهیم در زمینه مدیریت حافظه اصلی در این سیستم آشنا شویم.

Host Physical Memory

این مفهوم در واقع همان حافظه Memory است که به صورت سخت افزاری درون سرور فیزیکی ما نصب شده است. به طور مثال اگر ما 8 ماژول 16 گیگابایتی حافظه اصلی داشته باشیم در مجموع 128 گیگابایت Host Physical Memory خواهیم داشت.

Guest Physical Memory

این مفهوم میزان حافظه اصلی است که به صورت مجازی در اختیار یک ماشین مجازی قرار می گیرد. در واقع بخشی از Host Physical Memory است که به یک Guest OS تخصیص داده شده است.

Guest Virtual Memory

این مفهوم میزان حافظه ای است که برای اجرا شدن یک اپلیکیشن توسط Guest OS از بخش Guest Physical Memory در اختیار آن اپلیکیشن مربوطه قرار داده شده است. به طور مثال زمانیکه می خواهیم نرم افزار Word را بر روی ماشین مجازی خود باز کنیم، میزان 20 مگابایت فضای حافظه اصلی در اختیار این اپلیکیشن قرار داده می شود.

این 3 مفهوم ذکر شده در بالا با یکدیگر ارتباط مستقیم دارند. این ارتباط به این شکل است که میزان GVM تخصیص داده شده به اپلیکیشن بر روی GPM اصطلاحا Mapped شده است و میزان GPM نیز بر روی HPM فرآیند Mapping خود را شکل داده است. لذا هاست ESXi می داند که چه بخشی از حافظه اصلی فیزیکی را در اختیار یک ماشین مجازی قرار داده است، اما از اینکه چه مقدار از این حافظه در اختیار چه اپلیکیشنی قرار داده شده است مطلع نیست.
در هاست ESXi در زمینه مدیریت بخش حافظه اصلی، State های مختلفی قرار داده شده است. این State ها به 5 سطح مختلف تقسیم می شوند:

  • High State
  • Clear State
  • Soft State
  • Hard State
  • Low State

در هر کدام از این سطوح یک یا چند تکنولوژی مشخص فراخوانی می شوند. قبل از اینکه بخواهیم وارد مبحث تکنولوژی ها شویم لازم است بدانیم که هاست ESXi در چه شرایطی تغییر State می دهد. در ابتدا جهت مشاهده وضعیت State هاست خود دستور esxtop را بر روی هاست خود اجرا کرده و با زدن دکمه m به بخش مانیتورینگ مرتبط با Memory بروید. از توضیحات بالای صفحه نمایش داده شده می توانید متوجه شوید که هاست شما در چه State مشخصی قرار دارد.

Memory States

تغیر State از بالا به پایین رابطه مستقیم با میزان منابع آزاد Memory بر روی هاست شما دارد. در هاست ESXi مقداری با عنوان minFree جهت محاسبه میزان حافظه خالی هاست شما وجود دارد. این مقدار به پیکربندی سطح Memory هاست شما وابسته است. محاسبه این مقدار بسیار ساده می باشد. برای 28 گیگابایت ابتدایی حافظه اصلی هاست شما مقدار minFree برابر با عدد 899 مگابایت بعلاوه 1 درصد از باقیمانده حافظه اصلی هاست نسبت به 28 گیگابایت ابتدایی است. به طور مثال برای یک هاست با مقدار 128 گیگابایت حافظه اصلی داریم:

128 – 28 = 100 GB

minFree = 899 + 1024 = 1923 MB

مقدار  نهایی عدد minFree تعیین کننده State هاست شما می باشد. این مقدار به ازای هر State به شرح زیر است:

high state: enough free memory available

clear state: <100% of minFree

soft state: <64% of minFree

hard state: <32% of minFree

low state: <16% of minFree

حال که با وضعیت State هاست خود آشنا شدید، می خواهیم به شرح تکنولوژی های مختلف در هر State بپردازیم.

تکنولوژی TPS یا Transparent Page Sharing

یکی از قدرت های هاست ESXi در مدیریت منابع Memory وجود تکنولوژی TPS می باشد. با کمک این تکنولوژی هاست ESXi می تواند از قابلیت اشتراکی فضای Memory بین ماشین های مجازی بهره ببرد. اما این تکنولوژی به چه شکل کار می کند؟ زمانیکه شما ماشین های مجازی متعددی بر روی هاست خود ایجاد می کنید، یک جدول با عنوان Global Hash Table جهت انجام فرآیند Mapping آدرس های مجازی به آدرس های فیزیکی بر روی هاست ESXi شما ایجاد می گردد. هر آدرس مجازی که از سمت ماشین مجازی جهت Map شدن بر روی آدرس فیزیکی به سمت هایپروایزر ارسال می گردد، یک مقدار Hash شده از خود درون این جدول خواهد داشت. حال زمانیکه دو مقدار Hash شده کاملا یکسان در این جدول ایجاد شود، هاست ESXi اقدام به حذف یکی از آنها کرده (Identical Pages of Memory) و دو آدرس مشابه را به یک نقطه بر روی حافظه اصلی فیزیکی Map می کند. با اینکار آن بخش از آدرس فیزیکی بین دو یا چند ماشین مجازی به اصطلاح Share شده است. مقدار این Share را می توانید در خروجی دستور esxtop در بخش مانیتورینگ Memory مشاهده نمایید.

TPS

نکته: از توضیحات بالا می توان نتیجه گرفت که هرچقدر ماشین های مجازی شما از لحاظ ساختار به هم شبیه باشند، میزان Share حافظه اصلی بین ماشین های مجازی شما بیشتر شده و در نتیجه در فرآیند مدیریت حافظه اصلی موفق تر عمل کرده اید. از این رو در ارائه بهترین راهکارهای ایجاد ماشین های مجازی همیشه این نکته تاکید شده است تا حتی المقدور سیستم عامل های ماشین های مجازی شما از یک جنس و از یک نسخه باشند. به طور مثال برای ماشین های مجازی خود که می خواهید سیستم عامل ویندوز نصب نمایید، از نسخه Windows Server 2012 R2 استفاده کرده و برای آن دسته از ماشین های مجازی خود که می خواهید از سیستم عامل لینوکس استفاده نمایید نسخه CentOS 7 را انتخاب نمایید. سپس با ایجاد دسته بندی های مختلف اقدام به گروه بندی ماشین های مجازی خود از نظر جنس سیستم عامل کرده و با کمک قوانین DRS اقدام به جداسازی آنها از یکدیگر نمایید. این فرآیند بعضا تا سطح سرویس و اپلیکیشن نیز ادامه می یابد، بدین معنا که شما می توانید از نرم افزارهای یکسان بر روی ماشین های مجازی خود نیز استفاده نمایید تا فرآیند یکسان سازی ماشین های مجازی دقیق تر عمل کند. به طور مثال در صورتیکه چند ماشین مجازی با نرم افزار MS SQL Server دارید، تمام آنها را از یک نسخه نصب نمایید.

pShare

نکته: به فرآیندی که توسط TPS طی می شود Memory Deduplication گفته می شود.

نکته: این تکنیک در تمام State های هاست ESXi فراخوانی می شود.

تکنولوژی Memory Ballooning

این تکنولوژی در Soft State فراخوانی می شود. زمانیکه این تکنولوژی فراخوانی شود، برخی از ماشین های مجازی به عنوان کاندیدا برای اجرای تکنیک های مرتبط با Memory Ballooning در نظر گرفته می شوند. برای اینکه بدانید چه ماشین هایی مستعد کاندیدا شدن می باشند، دستور esxtop را اجرا کنید و با زدن دکمه m به بخش مانیتورینگ Memory بروید. در صفحه نمایش داده شده دکمه f را جهت مدیریت ستون ها فشار دهید. از لیست نمایش داده شده دکمه j را فشار دهید تا ستون مرتبط با MCTL برای شما نمایش داده شود. تمام ماشین های مجازی که در این ستون مقدار Y را دارند، می توانند به عنوان کاندید اجرای Memory Ballooning انتخاب شوند.

MCTL

اما این تکنولوژی به چه صورت فعالیت خود را انجام می دهد؟ فرآیند Memory Ballooning فرآیندی است که در آن هاست ESXi مقداری از حافظه تخصیص داده شده به ماشین های مجازی که به صورت idle قرار دارند را بازپس گرفته و در اختیار ماشین هایی قرار می دهد که نیاز به منابع از جنس Memory دارند. این کار از طریق یک درایور بر روی سیستم عامل Guest OS انجام می شود. زمانیکه شما VMware Tools را بر روی ماشین مجازی خود نصب می کنید، یک درایور به نام vmmemctl بر روی سیستم عامل نصب می شود. زمانیکه هاست به حالت Soft می رود، دستور بازپس گیری حافظه idle تخصیص داده شده به ماشین های مجازی را صادر می کند که این دستور توسط این درایور در سطح سیستم عامل مدیریت می شود. اما علت این امر چیست؟

VMMEMCTL

زمانیکه شما یک ماشین مجازی ایجاد می کنید و میزان 8 گیگابایت حافظه در اختیار آن قرار می دهید، از منظر Guest OS این میزان حافظه به صورت فیزیکی تخصیص داده شده است. این نگاه براساس تعریف ساختار مجازی سازی Hardware Assisted Virtualization قابل توجیه است. حال زمانیکه ماشین مجازی نیاز به بهره برداری از فضای حافظه اصلی خود را دارد، فرآیند Mapping حافظه مجازی به حافظه اصلی توسط هاست ESXi انجام می گیرد، البته باید توجه داشته باشید که در صورتیکه CPU شما از ویژگی SLAT پشتیبانی کند، سربار این فرآیند از روی هاست ESXi برداشته خواهد شد. زمانیکه یک آدرس فیزیکی به آدرس مجازی Mapped شد و در اختیار ماشین مجازی قرار گرفت، پس از پایان فرآیند استفاده Guest OS از این حافظه، آن آدرس با مارک Free از طرف سیستم عامل مشخص می شود، اما این فرآیند درون ماشین مجازی رخ می دهد و هاست ESXi از آن بی اطلاع می باشد. لذا از منظر هاست ESXi آدرس فیزیکی تخصیص داده شده به ماشین مجازی همچنان اشغال است. حال زمانیکه هاست ESXi در حالت Soft تکنیک Memory Ballooning را فراخوانی می کند، بازپس گیری حافظه اصلی از ماشین مجازی توسط درایور vmmemctl از آدرس هایی انجام می شود که مارک Free را دریافت کرده اند. هاست ESXi به درایور دستور inflate شدن را صادر می کند و اطلاعات مربوط به آدرس های مجازی مارک شده با عنوان Free را جمع آوری میکند. در نهایت هاست ESXi با توجه به مقادیر جدول TLB اقدام به آزاد کردن آدرس های فیزیکی Mapped شده به آن آدرس های مجازی می کند و در نهایت آن مقدار فضای آزاد شده را در اختیار ماشین مجازی مورد نظر قرار میدهد.

Memory Ballooning

نکته: باید در نظر داشته باشید که فرآیند Memory Ballooning برای ماشین های مجازی که وظیفه ارائه سرویس هایی از نوع Memory-Intensive را بر عهده دارند می تواند منجر به از مدار خارج شدن سرویس کند. لذا برای آن دست از ماشین های مجازی می توانید با کمک این لینک اقدام به غیر فعال کردن این تکنیک نمایید.

نکته: تکنیک Memory Ballooning نهایتا 65 درصد از حافظه اصلی تخصیص داده شده به یک ماشین مجازی را باز پس میگیرد.

نکته: در صورتیکه تکنیک Memory Ballooning نتواند میزان Memory درخواست شده را از ماشین های مجازی دریافت کند، اقدام به SWAP کردن بخشی از Memory ماشین های مجازی می کند. اینکار منجر به کاهش کارآیی سیستم خواهد شد.

نکته: اطلاعات مربوط به میزان Memory Ballooning هر ماشین مجازی را می توانید از طریق خروجی دستور esxtop در بخش Memory از MEMCTL/MB دریافت نمایید. این اطلاعات در کنسول مانیتورینگ vCenter شما نیز قابل مشاهده است.

MCTLSZ

تکنولوژی Memory Compression

این تکنولوژی در حالت Hard فراخوانی می شود. زمانیکه این تکنولوژی فراخوانی شود، Virtual Page ها توسط هاست ESXi فشرده سازی شده و در Memory نگهداری می شوند. به صورت کلی دسترسی به اطلاعات فشرده شده در حافظه نسبت به اطلاعات SWAP شده بر روی دیسک سریعتر صورت می گیرد، به همین دلیل در این حالت نیز شما با افت شدید کارآیی ماشین های مجازی خود مواجه نخواهید شد. شما می توانید این تکنیک را در هاست خود فعال یا غیرفعال نمایید.

MemCompression

جهت مدیریت آن مراحل زیر را طی نمایید:

  • وارد صفحه Web Client سرویس vCenter یا هاست ESXi خود شوید.
  • در بخش تنظیمات هاست بر روی گزینه Advanced System Settings کلیک کنید.
  • دکمه Edit را فشرده و مقدار Mem.MemZipEnable را جستجو کنید.
  • عدد 1 بیانگر فعال بودن و عدد 0 بیانگر غیر فعال بودن این تکنیک می باشد، لذا بسته به نیاز خود یکی از این دو عدد را وارد نمایید.

MemZipEnable

همچنین می توانید اقدام به تغییر اندازه میزان Maximum کش مربوط به فشرده سازی نمایید. در همان بخش بالا به جای عبارت ذکر شده عبارت Mem.MemZipMaxPct را جستجو نمایید. مقداری که در این بخش تنظیم می کنید در واقع درصدی است از میزان حافظه اصلی تخصیص داده شده به ماشین مجازی که میزان پیش فرض آن 10 درصد می باشد. این مقدار می تواند بین 5 تا 100 تعیین شود. این عدد معرف این است که هاست ESXi می تواند به میزان تعیین شده در این بخش، فضایی از Memory فیزیکی را به عنوان Cache جهت قرار دادن Virtual Page های فشرده شده استفاده نماید.

MemZipMaxPCT

نکته: زمانیکه فرآیند فشرده سازی انجام شده و مقادیر فشرده شده در جایی مشخص از Memory قرار داده می شود، زمانیکه ماشین مجازی نیاز به این مقادیر داشته باشد می بایست فرآیند خارج کردن اطلاعات از حالت فشرده طی شده و سپس اطلاعات در اختیار ماشین مجازی قرار داده شود.

تکنولوژی Swapping

این تکنولوژی به صورت کلی در حالت Low فراخوانی می شود. زمانیکه این تکنولوژی فراخوانی شود، در واقع میزان فضای خالی Memory بر روی هاست شما به کمترین مقدار ممکن رسیده است و اطلاعات از روی Memory می بایست بر روی دیسک Swap شوند. به صورت خلاصه می توان گفت این اتفاق می تواند بدترین اتفاقی باشد که در سطح Memory برای ماشین های مجازی رخ می دهد. این تکنیک در ابتدا اقدام به Swap کردن اطلاعات Memory بر روی Host Cache می کند. این فضا می بایست از قبل پیکربندی شده باشد. شما می توانید از دیسک های SSD جهت مدیریت این فضا استفاده نمایید تا در نهایت با افت کارآیی کمتری مواجه شوید. جهت مدیریت این فضا می توانید در بخش پیکربندی هاست خود گزینه Virtual Flash Host Swap Cache Configuration را تنظیم نمایید.

VFHSC

حال اگر این فضا وجود نداشت و یا فضای خالی آن پاسخگوی میزان اطلاعات موجود بر روی حافظه اصلی نبود، فرآیند Swap کردن اطلاعات بر روی ماشین های مجازی آغاز می شود. این فرآیند بر روی فایل vswp ماشین مجازی صورت می گیرد. به صورت پیش فرض محل نگهداری فایل Swap ماشین مجازی در مسیری است که ماشین مجازی در آن ایجاد شده است. شما می توانید این مسیر را از طریق تنظیمات ماشین مجازی تغییر دهید.

Swapped

حال که با تکنیک های مختلف آشنا شدید، در جدول زیر می توانید ارتباط بین State ها و تکنیک ها را مشاهده کنید. همانطور که قبلا گفته شد، هر State متشکل از یک یا چند تکنیک می شود:

Memory States

امتیاز دهید

دیدگاهتان را بنویسید