بررسی قابلیت (NUMA (Non-Uniform Memory Access در مجازی سازی

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

(NUMA (Non-Uniform Memory Access

همانطور که می دانید این  کلمه مخفف می باشد و به صورت غیر مخفف Non-Uniform Memory Access است ولی معنی آن در واقع چیست ؟ باید بدانید که هر CPU از مموری Local  خودش به خودش Assign می کند که به این ترکیب یک NUMA Node می گویند. در واقع  :

**Local MEM + CPU CORES = NUMA Node**

شکل زیر تفاوت بین سیستم هایی را نشان می دهد که از ساختار NUMA آگاه هستند و سیستم هایی که نمی دانند این قابلیت چیست .

 

checking-numa-non-uniform-memory-access-virtualization-1_Technet24NUMA بسیار اهمیت دارد زیرا هر CPU را قادر می سازد که از مموری Local خود با سرعت بسیار بالاتری نسبت به مموری غیر Local( مموری که برای یک CPU دیگر می باشد و یا بین دو CPU به صورت shared وجود دارد) خود بهره ببرد.

 

vNUMA چیست ؟

این قابلیت شفافیت و نمایان ساختن NUMA بین ماشین مجازی و سیستم عامل را از بین می برد و این قابلیت را به صورت مستقیم در اختیار سیستم عامل می گذارد. اگر در بحث تکنولوژی جایی صحبت از Wide NUMA نیز شنیدید همین vNUMA مد نظر می باشد. همانطور که تا به حال متوجه شده اید امکان این وجود دارد که یک ماشین مجازی بین چند NUMA Node جابجا شود اما وقتی یک ماشین مجازی روشن می شود و معماری NUMA به سیستم عامل آن Present می شود ، سیستم عامل ساختار NUMA را برای نرم افزار های خود قفل می کند که این امر مسبب بالا رفتن سرعت و بهره وری نرم افزار ها می شود .فقط در نظر داشته باشید در صورتی که ماشین مجازی بین سرور ها vMotion شود دو حالت زیر اتفاق خواهد افتاد :

  • معماری NUMA در CPU به صورت یکسان باشد : هیچ تغییری بر روی Performance نرم افزار های سیستم عامل مربوط صورت نمی گیرد
  • معماری NUMA در CPU ها یکسان نباشد : در این صورت سرعت و بهره وری نرم افزار ها حتما دستخوش تغییر منفی خواهد شد.

نکته ای که در این مورد باید بدانید این است که NUMA در ورژن ۴ قابلیت Hot Add برای CPU نداشت زیرا وقتی این اتفاق صورت می گیرد متاسفانه Node های NUMA تغییر پیدا می کنند و در ورژن ۴ نمی توانستند این موضوع را مدیریت کنند.Hot Add مموری نیز در ورژن ۵٫۰ از بستر مجازی سازی کار نمی کرد و تنها در ورژن مجازی سازی ۶٫۰ قابلیت بهره برداری را دارا می باشد.

checking-numa-non-uniform-memory-access-virtualization-2_Technet24

 NUMA چرا اهمیت دارد ؟

پیاده سازی هر تکنولوژی در بستر مجازی باعث ایجاد هزنیه های Performance ای می شود.برای سیستم NUMA اگر اطلاع از وضعیت کارکرد این تکنولوژی نداشته باشید باعث می شود بر روی تراکنش های ماشین مجازی شما Latency یا تاخیر خواهد افتاد ، زیرا ماشین مجازی سعی خواهد کرد تا مموری خود را از مموری های Remote استفاده کند(از مموری سایر Node های NUMA استفاده می کند) که این مطلب باعث ایجاد تاخیر در تراکنش ها می شود.

آیا مقدار این تاخیر یا Latency نگران کننده است ؟

بله، زمانی که می خواهید بر روی ماشین مجازی از نرم افزاری های Multi-Thread استفاده کنید این تاخیر ها چند برابر می شود و این مطلب باعث می شود که سازمان ها تنوانند از مجازی سازی Performance مناسبی دریافت کنند.

پس نکته غلطی که در ذهن بسیاری از کسانی که با مجازی سازی آشنایی ندارند شکل گرفته است به شرح زیر می باشد :

“استفاده کردن از Virtual Socket و Virtual CPU تاثیری بر کارایی و سرعت ماشین های مجازی نسبت به حالت فیزیکی ندارد ، تنها اشتباه تنظیم کردن بستر باعث کاهش سرعت می شود.”

ملزومات Performace

برای اینکه بتوانید بیشترین بهره وری و سرعت را داشته باشید باید در نظر بگیرید که تعداد نود های NUMA سرور فیزیکی چه مقدار می باشد و مقدار اختصاص یافته رم و CPU را به صورت درست انتخاب کنیم. اگر به تعداد و اندازه نود های NUMA توجه نکنیم باعث استفاده از Remote Memory می شود که در نهایت باعث ایجاد Latency بسیار زیاد خواهد شد.

Best Practice برای استفاده از NUMA

  • اندازه NUMA بر روی سرور خود را بدانید.از همه مهمتر زمانی که می خواهید سرور خریداری کنید از سایز NUMA حتما آگاه باشید زیرا این مطلب باعث می شود که تا بدانید چه مقدار رم و CPU برای سرور خود تهیه کنید.
  • اگر از CPU های نسل جدید استفاده می کنید محدودیت های بسیار کمتری برای استفاده از NUMA خواهید داشت،
    اما اگر از CPU های نسل های قدیم تری استفاده می کنید مانند Dual-Core ها و Dual-Socket ها باید بسیار دقیق تر کار کنید زیرا در حال حاضر اغلب ماشین های مجازی نیاز به بیشتر از ۴ عدد CPU برای پیاده سازی دارند.
  • در استفاده از رم نیز اگر بر روی هر سرور مقدار کمی رم دارید ولی تعداد سرور هایتان زیاد است باز هم دچار مشکل خواهید شد ، زیرا در حال حاضر نرم افزار ها به مقدار زیادی رم برای پیاده سازی احتیاج دارند.پس حالت بهتر داشتن رم های زیاد بر روی سرور ها و در صورت امکان تعداد سرور های زیاد برای قابلیت Fail دادن است.
  • ماشین های مجازی خود را بهینه تنظیم کنید به عنوان مثال در سیستمی که دارای ۶ Core می باشد می توانید ماشین های مجازی خود را طوری پیاده سازی کنید که مقدار CPU های آن کسر صحیحی از CPU باشد یعنی ۲ یا ۳ یا ۶Core باشد . در این مورد تنظیم کردن CPU ماشین مجازی بر روی ۴ کار اشتباهی می باشد.
  • زمانی که Hyper Threading را بر روی سرور خود روشن می کنید باید به ESXi و یا ماشین مجازی و یا هر دوی آنها بفهمانید که از این قابلیت استفاده کنند و به ماشین های مجازی بگویید که CPU ها را در کنار هم قرار دهند که در قسمت سوم از این مطلب آموزشی این مورد را آموزش خواهم داد.smile icon
5 دیدگاه
  1. BlackRoze says

    جناب مهندس عالی بود
    نفرمودید که چه طوری راه اندازی کنیم

  2. Psycho says

    طبق معمول عالی!!!
    من وب سایت شما رو بیشتر از اینستاگرامم چک میکنم 🙂 موفق باشید

  3. maryam says

    ممنون

  4. vahid_elec says

    عالی بود ، متشکر ، ادامه شو حتما بزارین خیلی مفیده

  5. ketan says

    سلام عالی بود بسیار ممنون .فقط یه زحمت قسمت اولشو میشه لینکشو بزارین.ممنون

دیدگاه

آدرس ایمیل شما منتشر نخواهد شد.