مقدمه
مدت زمان بسیار زیادی هستش که هر سایتی به یه نحوی NUMA رو آموزش میده و میگه که ماشین مجازیچجوری باید درست شه و CPU های آنها چجوری باید اختصاص پیدا کنه.
همه بر این اعتقاد هستند که اگر مدلی که اونها میگن ، CPU را اختصاص ندهید نه تنها باعث کندی ماشین مجازی میشید بلکه در نهایت باعث میشه برید جهنم !!!
تو این مطلب آموزشی می خوام برای اولین و آخرین بار این موضوع رو به صورت کامل با هم بررسی کنیم و پروندش رو ببندیم بزاریم کنار( البته تا زمانی که VMware دوباره تغییری روش نده که بعید میدونم بیشتر از ۵ ۶ ماه باشه)
اول از همه NUMA رو ببینیم چیه .
این NUMA چیست ؟
NUMA یا همون Non-Uniform Memory Access مدلی از طراحی سخت افزاره که در سرور های چند CPU استفاده میشه.
کلا حرفش اینه :
استفاده از مموری کاملا بستگی به مکان قرار گرفتن مموری نسبت به CPU داره .
این عکس رو ببنید:
NUMA
اگر قرار باشه CPU بالایی توعکس از رم استفاده کنه، سخت افزار بهش میگه بیا از رم های نزدیک خودت استفاده کن.
پس CPU بالایی تو عکس از رم های بالای خودش استفاده می کنه و سراغ رم های پایین نمیاد.
برای همین میگن پس رم های نزدیک هر CPU میشه Cache local اون CPU . نهایتا باعث میشه سرعت ارتباط رم با پروسس ها خیلی افزایش پیدا کنه.
قبلا اینطوری نبود . از یک تکنولوژی استفاده می کردند به نام SMP یا Symmetric Multi Processing ، تو اون کل رم ها ، میومدن وسط دو تا CPU به صورت کامل Share می شدن و جفت CPU ها ازشون استفاده می کردند.
فکر کنم شکل پایین حق مطلب رو ادا میکنه.
حالا بریم ببینیم وقتی که داریم از NUMA استفاده می کنیم VMware چی میگه؟ چجوری استفاده کنیم که سرعتمون روی ماکزیمم باشه؟
نظر VMWARE درباره NUMA
طبق آخرین داکیومنت VMware در مورد NUMA که برای June سال ۲۰۱۸ هستش، ساختار NUMA رو باید طبق روشی که می خوایم بگیم پیاده سازی کنید.
البته اگر دوست دارید میتونید از این لینک برید و مقاله یک بزرگوار دیگه رو هم راجع تغییرات ۶٫۵ آپدیت ۱ به بعد بخونید :
http://frankdenneman.nl/2016/12/12/decoupling-cores-per-socket-virtual-numa-topology-vsphere-6-5
راستی قبلش بگم که vNuma چیه ؟
اون چیزی که بالا راجع بهش صحبت کردیم NUMA نیست در واقع pNUMA هستش . ما یه چیزی هم داریم به نام vNUMA.
vNUMA زمانی درست میشه که بیشتر از ۸ عدد CPU به یک ماشین مجازی میدیم و ESXi سعی می کنه همانطور که pNUMA داره باعث افزایش سرعت میشه اون قابلیت رو دست ماشین مجازی هم برسونه .
شروع می کنیم
اولین نکته ای که باید در نظر بگیرید اینه که کلا هنگام اختصاص دادن vNuma به ماشین مجازی ، ESXi به مموری شما نگاه نمیکنه.
یعنی خودتون باید دستی حواستون باشه که چقدر مموری دارید به ماشین مجازی اختصاص میدید.
اگر نحوه محاسبه مموری رو میدونید که بگذرید اگر نه این خط های سبز رنگ زیر رو بخونید.
فرض کنید یه سرور دارید که دو تا CPU داره که هر کدوم ۱۰ تا Core دارند سرور جمعا ۲۵۶ گیگ رم داره که تقسیم بر دو کنیم ( با فرض اینکه رم های CPU را به تعداد مساوی نصب کردید) هر CPU مقدار ۱۲۸ گیگ رم داره.
پس هر ۱۰ Core و ۱۲۸ گیگ رم یک pNuma Node میشه.
NUMA
یعنی اگر ماشینی داشته باشیم با ۸ تا CPU و ۱۰۰ گیگ رم، برای این ماشین یک vNuma Node درست می کنه که چون از pNUMA Node کوچکتره در داخل همون قرار می گیره.
درست مثل VM1 تو شکل زیر.
vNUMA NUMA
حالا که چی ؟
یک نگاه به عکس زیر بندازید :
این صفحه مشکل تمام ادمین های مجازی سازی هستش. که تعداد Core ها رو یک بدن یا تعداد Socket ها رو یک بدن یا کلا تعداد همه رو متغیر بدن.
من سه سناریو رو براتون بررسی می کنم که خودتون متوجه شید کدومش بهتره :
صورت مسئله سناریو
سرور فیزیکی ما ۲ عدد CPU داره که هر کدوم ۸ Core دارن و ۱۲۸ گیگ رم داره.
می خواهیم یک ماشین مجازی با Resource بالا بسازیم ، نظر شما در مورد مقدار Ram و CPU آن چیست ؟
راه حل :
اول میریم pNuma Node رو محاسبه می کنیم که سایز اون میشه :
مدل های درست کردن ماشین :
- تعداد رم و CPU را کمتر از یک pNuma Node نگه داریم یعنی ماکزیمم ۸ تا CPU و ۶۴ گیگ رم که برای این ماشین یک vNuma درست می کند که در داخل pNuma ما قرار میگیرد.
- مقدار CPU را زیر ۸ Core نگه داریم ولی مقدار رم را ۱۰۰ گیگ بگیریم : که چون ESXi برای محاسبه NUMA به رم نگاه نمیکنه باز هم برای این ماشین یک vNUMA درست می کنه اما چون رم اون بالاتر از رم یک pNUMA Node هستش مجبور میشه بین دو تا pNuma Node این ماشین رو Share کنه .در مثل VM2 تو شکل زیر :
vNUMA pNUMA
- مدل سوم که بهینه ترین می باشد مدلی هستش که تعداد رم و CPU رو بیشتر از یک pNuma Node بدیم . یعنی به ماشین مجازی ۱۲ Core و ۹۶ گیگ رم بدیم. برای این کانفیگ باید به ماشین بگیم از دو CPU Socket استفاده کنه یعنی :
- ۲ سوکت ۶ Core بهش بدیم
- که در این حالت از هر طرف ۴۸ گیگ رم بر میداره.
عکس زیر رو ببینید.
برای اینکه همیشه بهترین مدل CPU را اختصاص بدیم نکات زیر را همیشه در نظر داشته باشید :
- تنظیمات پیشرفته NUMA رو روی ESXi رو تغییر ندهید.
- همیشه تعداد CPU را محدود به یک Socket و تعداد رم را محدود رم یک pNUMA Node اختصاص بدید در غیر اینصورت تعداد CPU را به صورت موازی پخش کنید ( حواستون باشه که مقدار رم برای محاسبه vNuma Node در گیر نیست باید با تعداد CPU تعداد vNuma Node رو مشخص کنید)
- به هیچ وجه زمانی که تعداد vCPU های شما بیشتر از یک سوکت میشه تعداد vCPU ها را عدد فرد نزنید. یعنی هیچ وقت به ماشین ۷ یا ۹ تا vCPU ندید.
- کلا CPU Hot Add رو روشن نکنید چون با روشن کردنش vNUMA به صورت کامل Disable میشه.
- هیچ وقت ماشینی با تعداد CPU بیشتر از تعداد CPU هاستتون درست نکیند.
در آخر برای اینکه مطلب براتون کاملِ کامل جا بیافته مثال زیر رو ببنید.
مثال آخر
جدول زیر نحوه درست اختصاص CPU به ماشین مجازی در سروری با مشخصات زیر رو نشون میده :
- دو عدد CPU که هر کدوم ۱۰ Core دارند.
یمنبع :
http://aminpourmirza.com/numa-vnuma