در قسمت اول از سری مقالات عملکرد ورودی خروجی ساختار مجازی سازی شده با Hyper-V، عملکرد I/O نسبت به استفاده از IDE کنترلرها، ISCSI کنترلر ها، HBAها بررسی شد و خلاصه ای از دیسکهای مجازی مورد استفاده در Hyper-V تعریف و شرح داده شد. در این قسمت به عملکرد این دیسکها پرداخته خواهد شد.
هارد دیسک مجازی با فضای ثابت
فضای VHD همان ابتدا پس از ایجاد فایل VHD اختصاص داده میشود. احتمال قطعه قطعه شدن این نوع فایل VHD کمتر است، که منجر به کاهش توان عملیاتی هنگام تقسیم شدن یک I/O به چندین I/O میشود. این نوع فایل VHD به این دلیل که برای خواندن و نوشتن به مشاهدهی Mapping آن بلوک نیاز ندارد، پایینترین سربار CPU را در میان سه نوع دیگر داراست.
هارد دیسک مجازی با فضای Dynamic
فضا برای این نوع VHD به صورت On-Demand اختصاص داده میشود. بلوکهای درون دیسک به صورت بلوکهای اختصاص داده نشده هستند و هیچ فضای واقعیای در فایل برای آنها وجود ندارد. وقتی برای اولین بار در یک بلوک داده نوشته میشود، Stack مجازیسازی باید فضای داخل فایل VHD را برای بلوک اختصاص داده و سپس Metadata را بهروز کند. این باعث افزایش تعداد I/Oهای مورد نیاز دیسک برای نوشتن و همچنین افزایش مصرف CPU میشود. خواندن و نوشتن در بلوکهای موجود، دسترسی به دیسک و سربار CPU را در هنگام جستجو و Mapping آن بلوک در Metadata را به همراه خواهد داشت.
هارد دیسک مجازی با فضای Differencing
VHD ایجاد شده به یک فایل VHD اصلی اشاره میکند. هر عمل نوشتاری در بلوکهایی که تا به حال چیزی در آنها نوشته نشده است، مانند VHDهای Dynamic، باعث اختصاص داده شدن فضا در فایل VHD میشوند. اگر در بلوک چیزی نوشته شده باشد، عمل خواندن از فایل VHD انجام شده و در غیر این صورت از فایل VHD اصلی انجام میشود. در هر دو مورد، Metadata برای تعیین Mapping آن بلوک خوانده میشود. خواندن و نوشتن در این VHD میتواند CPU بیشتری را مصرف کند و منجر به I/O بیشتری نسبت به یک فایل VHD ثابت شود.
ملاحظات مربوط به اندازه بلوک
اندازه بلوک میتواند به طور قابلتوجهی عملکرد را تحتتاثیر قرار دهد. انطباق اندازه بلوک به الگوهای تخصیص بارکاری که از دیسک استفاده میکند مطلوب خواهد بود. به عنوان مثال، اگر یک برنامه در تکههای 16 مگابایت توزیع شود، اندازه بلوک هارد دیسک مجازی 16 مگابایت بهینه خواهد بود. به عنوان مثال، اگر یک برنامه به صورت قسمتهای 16 مگابایتی اختصاص داده شود، داشتن یک هارد دیسک مجازی با اندازه 16 مگابایت مطلوب خواهد بود. اندازه بلوک کمتر از 2 مگابایت تنها بر روی هارد دیسکهای مجازی با فرمت VHDX امکانپذیر خواهد بود. داشتن اندازه بلوک بزرگتر از الگوی تخصیص برای یک بارکاری I/O، به طور قابلتوجهی استفاده از فضا را در Host افزایش خواهد داد.
پیامدهای اندازه Sector
اندازهی استاندارد Sectorها در صنعت نرمافزار 512 بایت است، اما اندازه 4 کیلوبایتی درحال گرفتن جای این استاندارد میباشد. برای کاهش مشکلات سازگاری که ممکن است از تغییر اندازه Sector به وجود آیند، فروشندگان هارد درایو یک اندازه انتقالی را به عنوان درایوهای شبیه ساز 512 (512 emulation drives و یا 512e) معرفی کردهاند. این درایوهای شبیه ساز برخی از مزایای ارائه شده توسط درایوهای 4 کیلوبایتی Native را مانند بهبود کارایی فرمت و طرح بهبود یافته برای کدهای اصلاح خطا (Error Correction Codes و یا به اختصار ECC)، ارائه میدهند. آنها با مشکلات سازگاری کمتری نسبت به Sectorهای 4 کیلوبایتی قرار داده شده در رابط دیسک مواجه میشوند.
پشتیبانی از دیسکهای 512e
یک دیسک 512e میتواند یک عمل نوشتار را فقط در یک Sector فیزیکی انجام دهد، به عبارت دیگر، نمیتواند به طور مستقیم یک Sector 512 بایتی که برای آن صادر شده است را بنویسد. فرآیند داخلی دیسک که این نوشتارها را امکانپذیر میسازد، به این نحو میباشد:
- دیسک Sector فیزیکی 4 کیلوبایتی را به حافظه Cache داخلی خود میخواند، که حاوی Sector منطقی 512 بایتی است که در نوشتار ذکر شده است.
- دادههای موجود در Buffer 4 کیلوبایتی برای در بر گرفتن Sector 512 بایتیِ بهروز شده، اصلاح میشوند.
نام این فرایند (Read-Modify-Write (RMW میباشد. تاثیر کلی عملکرد فرآیند RMW به بارکاری بستگی دارد. فرایند RMW به دلایل زیر موجب کاهش عملکرد در هارد دیسک مجازی میشود:
- هارد دیسک مجازی Dynamic و Differencing یک Bitmap که 512 بایتی است در مقابل Payload دادههای خود دارند. علاوه بر این، Header، Footer، و Parent Locatorها به یک Sector 512 بایتی تراز میشوند. برای درایورهای هارد دیسکهای مجازی صدور دستورالعملهای نوشتار 512 بایتی برای بهروزرسانی این ساختارها که موجب فرایند RMW میشوند، بسیار رایج است.
- برنامههای کاربردی به طور معمول در حال صادر کردن دستورهای خواندن و نوشتن در اندازههای مضرب 4 کیلوبایت (اندازه Cluster پیش فرض NTFS) میباشند. از آنجا که یک طرح بیت Sector 512 بایتی در مقابل بلوک Payload داده هارد دیسکهای مجازی Dynamic و Differencing وجود دارد، بلوک 4 کیلوبایتی به مرز فیزیکی 4 کیلوبایتی تراز نمیشود.
هر فرمان نوشتار 4 کیلوبایتی که توسط جداساز حاضر صادر میشود تا Payload داده بهروزرسانی کند، موجب دو عمل خواندن در دو بلوک بر روی دیسک شده، که سپس بهروزرسانی شده و متعاقبا دوباره بر روی دو بلوک دیسک نوشته میشوند. Hyper-V در Windows Server 2016 برخی از تاثیرات عملکردی روی دیسکهای 512e بر روی VHD Stack را با آماده کردن ساختارهای قبلا ذکر شده برای تراز شدن با مرزهای 4 کیلوبایتی در فرمت VHD، کاهش میدهد. این امر از تاثیر RMW هنگام دسترسی به دادهها در داخل فایل هارد دیسک مجازی و به هنگام بهروزرسانی ساختار Metadata هارد دیسک مجازی اجتناب میکند. همانطور که قبلا ذکر شد، VHDهایی که از نسخههای قبلی Windows Server کپی میشوند، به طور خودکار با ساختار 4 کیلوبایتی تراز نخواهند شد. شما میتوانید با استفاده از گزینه کپی دیسک از منبع (Copy from Source) که در رابط VHD موجود است، آنها را به طور دستی تبدیل کرده تا به صورت بهینه تراز شوند. به طور پیشفرض، VHDها در معرض Sector فیزیکی با اندازه 512 بایتی قرار میگیرند. این کار برای اطمینان از این امر انجامشده که برنامههای کاربردی وابسته به Sector فیزیکی زمانی که برنامه و VHDها از یک نسخه قبلی Windows Server منتقل میشوند، تحتتاثیر قرار نمیگیرند.
به طور پیشفرض، دیسکهای VHDX با اندازه Sector فیزیکی 4 کیلوبایتی ایجاد میشوند تا عملکرد خود را برای دیسکهای معمولی و دیسکهای با Sector بزرگ بهینه کنند. برای استفاده کامل از Sectorهای 4 کیلوبایتی، استفاده از فرمت VHDX توصیه میشود.
پشتیبانی از دیسکهای 4 کیلوبایتی Native
Hyper-V در Windows Server 2012 R2 و نسخههای پس از آن از دیسکهای 4 کیلوبایتی Native پشتیبانی میکند، اما امکان ذخیره دیسک VHD بر روی دیسک 4 کیلوبایتی Native وجود دارد. این کار با اجرای یک الگوریتم RMW نرمافزاری در لایه Stack ذخیرهسازی مجازی انجام میشود که دسترسی 512 بایتی و درخواستهای بهروزرسانی ها را به 4 کیلوبایتی تبدیل میکند.
از آنجا که فایل VHD تنها میتواند خود را به عنوان دیسکهای با اندازه 512 بایت نشان دهد، بسیار محتمل است که برنامههایی وجود داشته باشند که درخواستهای I/O 512 بایتی صادر کنند. در این موارد، لایه RMW نیاز این درخواستها را برطرف کرده و موجب افت عملکرد میشود. این نیز برای دیسکی که با VHDX قالببندی شدهاست اما دارای اندازه Sector منطقی 512 بایتی میباشد نیز صادق است.
پیکربندی یک فایل VHDX میتواند به عنوان یک دیسک با اندازه Sector منطقی ۴ کیلوبایتی نشان داده شود، و در زمانی که دیسک Host یک دستگاه فیزیکی 4 کیلوبایتی است، این پیکربندی برای عملکرد بهینه است. باید دقت شود که Guest و برنامهی کاربردی که از دیسک مجازی استفاده میکنند توسط اندازه Sector منطقی 4 کیلوبایت پشتیبانی میشوند. فرمت VHDX بر روی یک دستگاه با اندازه Sector منطقی 4 کیلوبایت به درستی کار خواهد کرد.