همزمان با اعلام شرکت vmware در رابطه با انتشار نسخه 7 محصول vSphere، بر آن شدیم تا در پست های مختلف در رابطه با قابلیت های جدید و بهبودهای این محصول، مطالبی را با استناد به وبلاگ های معتبر این شرکت، ارایه کنیم. در همین راستا در مطلب ذیل در مورد بهبودهای بسیار مهمی که در رابطه با قابلیت vMotion ایجاد شده است، مقاله ای را ارایه خواهیم داد.
قابلیت vMotion:
همانطور که می دانیم، تکنولوژی vMotion یکی از فناوری های منحصر به فرد شرکت vmware است که با استفاده از آن میتوان ماشین های مجازی یا VM ها را بدون Downtime بین هاست های فیزیکی جا به جا کرد. این عملیات می تواند به صورت دستی یا اتوماتیک توسط DRS صورت گیرد. نام دیگر این تکنولوژی ، Live Migration است که از این موضوع نشات میگیرد که ماشین مجازی میتواند در حالت روشن و بدون downtime به هاست مقصد منتقل شود.
این قابلیت در طول سال های متمادی از زمان اولین ارایه در سال 2004 تاکنون، پیشرفت ها و بهبودهای بسیاری را شاهد بوده است که تصویر ذیل به صورت شفاف نمایانگر این مسیر است.
نکته 1:
به صورت خاص، vMotion به جا به جایی لایه Compute و Network اطلاق می شود، یعنی با تکیه بر این نکته که دیسک ماشین مجازی بر روی Shared Storage قرار دارد و فضای shared storage، برای همه هاست ها در محیط مجازی در دسترس می باشد، نیازی به جا به جایی دیسک ماشین وجود نخواهد داشت.
اما همانطور که در تصویر بالا نیز مشخص است، از سال 2012 امکانی به این فناوری افزوده شد تا بتواند به صورت کامل ماشین مجازی را جا به جا کند، یعنی حتی زمانی که دیسک ماشین بر روی دیسک لوکال هاست قرار داشت و برای دیگر هاست ها در دسترس نبود، بتوان با استفاده از آن، ماشین مجازی را به هاست دیگرمنتقل کرد. بدیهی است در این روش دیسک ماشین مجازی به همراه لایه compute یا همان CPU و RAM به هاست مقصد منتقل خواهد شد. به جا به جایی دیسک svmotion یا storage vmotion میگویند، یعنی در حالت فوق vMotion و svmotion با هم صورت میگیرند.
بهبودهای ایجاد شده در vSphere 7 مربوط به vMotion در لایه Compute می باشد.
در جا به جاییِ لایه Compute یک ماشین مجازی باید پردازش های مربوط به CPU و Memory و همچنین ترافیک های جاری در کارت شبکه آن بدون کوچکترین تغییر و به صورت live، به هاست مقصد منتقل شود .
با توجه به اینکه بخشی از این پروسه عملیاتِ انتقال مموری ماشین مجازی می باشد، لازم است برای درک بهترِ این موضوع، ابتدا در مورد نحوه map شدن دیتا از روی مموری ماشین مجازی بر روی مموری هاست فیزیکال مطالبی را بدانیم تا بتوانیم درک بهتری نسبت به فرایند تغییرات حاصل شده در vmotion داشته باشیم.
اگر شما به عنوان مثال 4 گیگابایت RAM برای یک ماشین مجازی در نظر بگیرید، این مموری از نظر سیستم عامل داخل ماشین مجازی به صورت پیوسته و یکپارچه می باشد اما به احتمال بسیار زیاد بر روی مموری هاست فیزیکال به صورت رندوم در جاهای مختلفی قرار دارد و اینگونه نیست که روی هاست فیزیکی هم 4 گیگابایت رم به صورت پیوسته به این ماشین اختصاص داده شده باشد. از اینرو بسیار مهم است که محتویات حافظه RAM در داخل ماشین مجازی چگونه به حافظه RAM در داخل هاست فیزیکی map شود.
پروسه map شدن دیتا از روی مموری ماشین مجازی بر روی مموری هاست فیزیکال به این ترتیب است که از یک نوع ابزار کمکی به نام TLB یا Translated Lookaside Buffer در کنار واحد MMU یا Memory Management Unit، استفاده میشود.
TLB و MMU:
TLBدر واقع به عنوان cache در اختیار واحد MMU قرار میگیرد و همانطور که از نام آن پیداست قرار است به طور موقت دیتایی را که به صورت پیوسته روی مموری ماشین مجازی نوشته شده است و هنوز روی مموری هاست فیزیکی قرار نگرفته است در اختیار داشته باشد.
MMU واحدی است در دسترس برای CPU که از آن برای جلوگیری از دسترسی مستقیم اپلیکیشن ها به مموری سرورهای فیزیکی و جلوگیری از حملاتی همچون Memory overflow استفاده می شود. یعنی اپلیکیشن ها به صورت مستقیم اجازه دسترسی به مموری هاست فیزیکال را ندارند بلکه از فضاهایی که MMU در اختیار آنها قرار میدهد به عنوان رم استفاده می کنند و MMU در فرصت مناسب این اطلاعات را روی مموری هاست قرار میدهد.
در مورد مجازی سازی قضیه کمی متفاوت است یعنی خود MMU که به عنوان حافطه موقت در کنار CPU قرار گرفته است، از یک آیتم دیگر به نام TLB برای نگهداری موقت دیتاهای مربوط به مموری ماشین های مجازی استفاده میکند. اینجا دقیقا همان جایی است که Memory mapping با کنترل CPU بر روی مموری هاست فیزیکی انجام می شود.
خود MMU میتواند نرم افزاری یا سخت افزاری باشد — اگر سخت افزاری باشد به عنوان یک چیپ ست در کنار CPU تعبیه می شود و اگر نرم افزاری باشد توسط خود و با استفاده از VMM مدیریت می شود.
نکته 3:
در صورتی که میخواهید بدانید که CPU روی سرور شما قابلیت کار کردن با TLB را دارد باید در هنگام خرید CPU، توجه کنید که دارای فناوری EPT یا RVI باشد. در غیر اینصورت خود ESXi از طریق software MMU و با استفاده از shadow page tables این کار را برای شما انجام خواهد داد که باعث به وجود آمدن Memory overhead بر روی هاست ها خواهد شد.
نکته 4:
دیتایی که قبل از نوشته شدن بر روی MMU در اختیار TLB قرار می گیرد، در واحدی به نام PTE یا Page Table Entries نگهداری می شود.
vMotion چگونه کار میکند؟
در جا به جاییِ لایه Compute یک ماشین مجازی باید پردازش های مربوط به CPU و Memory و همچنین ترافیک های جاری در کارت شبکه آن بدون کوچکترین تغییر به هاست مقصد منتقل شود. برای دستیابی به این مهم، یک ماشین مجازی با مشخصات ماشین مجازی مبدا در هاست مقصد ایجاد میگردد که به آن Shadow VM میگویند.
نکته 5:
فناوری vMotion یک تکنولوژی Memory centric است بدین معنی که تمرکز عملیات بر روی انتقال محتویات مموری است تا بتوان حالت یا state فعلی ماشین را جا به جا کرد.
تغییراتی که در پروسه vMotion، بر روی Memory، صورت میگیرد، به صورت کلی به این صورت است:
- دسترسی ماشین مجازی از رایت کردن بر روی مموری هاست گرفته می شود.
- Page های مربوط به ماشین مبدا توسط VMkernel به ماشین مقصد انتقال پیدا میکنند.
- در حین عملیات vMotion، هر گونه رایت جدید بر روی مموری هاست فیزیکی از طریق VMM صورت میگیرد.
نکته 6:
VMM یا Virtual Mahine monitor مسئول کنترل هر گونه ورودی و خروجی لایه Compute یا همان CPU و Memory بر روی VM می باشد.
- واحد VMM، کرنل ESXi را از dirty page ها یا page هایی که پس از آغاز پروسه vMotion لمس یا touch شده اند آگاه می سازد.
نکته 7:
کرنل از این اطلاعات برای انتقال dirty page ها به ماشین مقصد یا همان Shadow VM استفاده خواهد کرد.
- پس از انتقال دیتای قدیمی، نوبت به انتقال recently touched page ها یا همان page هایی میرسد که پس از آغاز vMotion لمس شده اند.
در این قسمت، VMkernel به صورت مداوم شروع به انتقال این page ها میکند تا جایی که فاصله میان رایت جدید و انتقال دیتا به ماشین مقصد کنتر از 500ms بشود. در صورتی که به این عدد رسید، VM مبدا suspend می شود و vm مقصد روشن میشود
- هاست مبدا یک checkpoint به همراه یک bitmap، به هاست مقصد ارسال میکند تا از sync بودن اطلاعات اطمینان پیدا کند.
نکته 8:
کل عملیات پس از suspend شدن ماشین مبدا و ارسال checkpoint در حد میلی ثانیه می باشد.
- ماشین مبدا خاموش و پاک می شود و ماشین مقصد شروع به کار میکند.
نکته:
کرنل از این اطلاعات برای انتقال dirty page ها به ماشین مقصد یا همان Shadow VM استفاده خواهد کرد.
- پس از انتقال دیتای قدیمی، نوبت به انتقال recently touched page ها یا همان page هایی میرسد که پس از آغاز vMotion لمس شده اند.
در این قسمت، VMkernel به صورت مداوم شروع به انتقال این page ها میکند تا جایی که فاصله میان رایت جدید و انتقال دیتا به ماشین مقصد کنتر از 500ms بشود. در صورتی که به این عدد رسید، VM مبدا suspend می شود و vm مقصد روشن میشود
- هاست مبدا یک checkpoint به هاست مقصد ارسال میکند تا از sync بودن اطلاعات اطمینان پیدا کند.
نکته:
کل عملیات پس از suspend شدن ماشین مبدا و ارسال ودریافت checkpoint در حد میلی ثانیه می باشد.
- ماشین مبدا خاموش و پاک می شود و ماشین مقصد شروع به کار میکند.
تغییراتی که در پروسه vMotion، بر روی CPU، صورت میگیرد، به صورت کلی به این صورت است:
- ابتدا تمامی vCPU ها برای مدت بسیار کوتاهی (در حد میکرو ثانیه) به حالت تعلیق یا Stop در می آیند و هیچ عملیاتی روی آنها انجام نمی شود. توقف vCPU ها به منظور نصب Page Trace بر روی آنهاست.
نکته 9:
درواقع کلیه عملیاتی که بر روی CPUها صورت میگیرد، به منظور کنترل دیتایی است که بر روی Memory نوشته می شود. پس نصب page trace در واقع بخشی از مورد چهارم در قسمت بالا می باشد.یعنی برای اطلاع از اینکه کدام Page ها بعد از آغاز عملیات dirty شده اند، نیاز به trace کردن آنها از طریق CPU داریم.
- کلیه PTE ها به صورت همزمان به حالت Read Only در می آیند. این مرحله نیز در واقع متناظر با همان مرحله اول در قسمت بالاست. یعنی منظور از جلوگیری از دسترسی مستقیم ماشین مجازی به هاست فیزیکی انجام این مرحله می باشد.
- واحدهای cache برای MMU یا همان TLB ها به صورت همزمان تخلیه می شوند تا اطمینان حاصل شود دیتایی در مسیر پردازش وجود ندارد.
توضیح:
ترافیک مربوط به شبکه نیز، از فرایندی همانند فرایند کپی شدن مموری استفاده میکند که چون موضوع مطلب امروز نمی باشد، به این موضوع در مطالب دیگر پرداخته خواهد شد.
نکته 10 – بسیار مهم:
همانطور که در بالا ذکر شد، آغاز عملیات vMotion، مستلزم Stop شدن لحظه ای کل vCPU ها برای نصب page trace ها می باشد، که این امر برای ماشین های مجازی بزرگ مشکلاتی را ایجاد خواهد کرد. تکنولوژی به کار گرفته شده در این نوع vMotion، از نوع Stop based page trace install می باشد.
این نقطه دقیقا نقطه ایجاد بهبود در عملیات vMotion در vSphere 7 می باشد و به جای تکننولوژی Stop based page trace install از تکنولوژی Loose page trace install استفاده خواهد شد که در ادامه به آن خواهیم پرداخت.
تغییرات صورت گرفته در فناوری جدید در چند لایه صورت گرفته است که به شرح زیر می باشد:
1: بهینه سازی در عملیات Page trace install با تغییر به Loose page trace install:
- به جای اینکه تمامی vCPU ها برای لحظات کوتاه به حالت Stop در بیایند، تنها یک vCPU مسئول trace کردن dirty page ها خواهد بود. این یکی از تغییرات مهم در vMotion است که loose page trace install نام گرفته است.
- با اینکه PTE ها مجددا به صورت Readonly در می آیند اما، TLB ها به صورت همزمان تخلیه نمی شوند، بلکه در بازه های زمانی مختلف و با توجه به اینکه کدام vCPU در حال Trace شدن می باشد تخلیه میگردند. این مورد تاثیر به سزایی در حفظ پرفورمنس ماشین مجازی خواهد داشت.
2: کارآمدتر کردن عملیات vMotion با تغییر سایز page هایی که read-only می شوند:
در نسخه های پیشین، سایز page هایی که توسط VMM بر روی مموری هاست فیزیکال read-only می شدند، معادل 4KB بود، بدین معنی که اگر تغییری به اندازه 4KB صورت میگرفت، VMM دستور read-only شدن این فضا را بر روی مموری هاست فیزیکی صادر میکرد. این نرخ تغییر در نسخه 7 به 1GB افزایش یافته است و این موضوع باعث می شود که در فواصل زمانی بیشتری دستورات از طرف VMM به مموری هاست ارسال گردد که باعث افزایش پرفورمنس خواهد شد.
3: Compacted Bitmap:
همانطور که اشاره شد، پس از انتقال کامل دیتای روی مموری ماشین مبدا به ماشین مقصد، یک checkpoint به همراه یک bitmap که نشان دهنده کلیه page هایی است که تغییر کرده بودند به هاست مقصد ارسال میگردد، همانطور که در تصویر ذیل مشخص است، در نسخه های پیشین bitmap به صورت فول ارسال میگردید، اما در نسخه 7، bitmap به صورت فشرده ارسال میگردد که stun time یا switch over time را سریع تر خواهد کرد.
نسخه های پیشین:
نهایتا در شکل زیر مقایسه عملیات vMotion را در نسخه های 6.7 و نسخه 7 شاهد هستیم.
این تست بر روی یک large VM، با 72 عدد vCPU و 512 گیگابایت مموری تست شده است. بر روی این ماشین مجازی نرم افزار hammerDB نصب شده است.
در این تصویر خط آبی نمایانگر vmotion در نسخه 6.7 و خط سبز نمایانگر نسخه 7 می باشد.
همانطور که مشاهده می کنید، با بهبود عملکرد در هنگام عملیات trace install ، شاهد 66 درصد بهبود عملکرد هستیم و از طرفی به صورت کلی بر روی این ماشین، عملیت انتقال 20 ثانیه زودتر صورت گرفته است.
نتیجه گیری:
به صورت کلی تغییراتی که در این نسخه بر روی vMotion صورت گرفته است در لایه های CPU و Memory می باشد و تاثیر آن بر روی ماشین های مجازی بزرگ یا large VM ها به خوبی قابل لمس است.
منابع:
https://blogs.vmware.com/vsphere/2020/03/vsphere-7-vmotion-enhancements.html
https://blogs.vmware.com/vsphere/2019/09/how-to-tune-vmotion-for-lower-migration-times.html
https://blogs.vmware.com/vsphere/2020/03/how-is-virtual-memory-translated-to-physical-memory.html
https://www.youtube.com/watch?v=KdI7-FJEEmk