اصول کلی عملکرد QEMU-KVM

اصول کلی عملکرد QEMU-KVM

درک فعلی من:

1) KVM

KVM (ماشین مجازی مبتنی بر هسته) یک Hypervisor (VMM - Virtual Machine Manager) است که به عنوان یک ماژول در سیستم عامل لینوکس کار می کند. برای اجرای برخی از نرم افزارها در یک محیط غیر موجود (مجازی) و در عین حال، پنهان کردن سخت افزار فیزیکی واقعی که این نرم افزار روی آن اجرا می شود، به یک Hypervisor نیاز است. Hypervisor به عنوان یک "لایه" بین سخت افزار فیزیکی (میزبان) و سیستم عامل مجازی (میهمان) عمل می کند.

از آنجایی که KVM یک ماژول استاندارد هسته لینوکس است، تمام امتیازات (مدیریت حافظه، زمان‌بندی و غیره) را از هسته دریافت می‌کند. و بر این اساس، در پایان، تمام این مزایا به مهمانان می رسد (زیرا مهمانان روی یک Hypervisor کار می کنند که در / در هسته لینوکس اجرا می شود).

KVM بسیار سریع است، اما به خودی خود برای اجرای یک سیستم عامل مجازی کافی نیست، زیرا این نیاز به شبیه سازی I/O دارد. برای I/O (پردازنده، دیسک، شبکه، ویدئو، PCI، USB، پورت های سریال و غیره) KVM از QEMU استفاده می کند.

2) QEMU

QEMU (Quick Emulator) شبیه ساز دستگاه های مختلف است که به شما امکان می دهد سیستم عامل های طراحی شده برای یک معماری را روی معماری دیگر اجرا کنید (به عنوان مثال، ARM –> x86). علاوه بر پردازنده، QEMU دستگاه های جانبی مختلف را شبیه سازی می کند: کارت های شبکه، HDD، کارت های ویدئویی، PCI، USB و غیره.

اینطوری کار میکنه:

دستورالعمل ها/کد باینری (به عنوان مثال، ARM) با استفاده از مبدل TCG (Tiny Code Generator) به کد مستقل از پلتفرم میانی تبدیل می شود و سپس این کد باینری مستقل از پلت فرم به دستورالعمل ها/کد هدف (مثلا x86) تبدیل می شود.

ARM –> مرحله بندی –> x86

در واقع، می‌توانید ماشین‌های مجازی را روی QEMU روی هر میزبانی اجرا کنید، حتی با مدل‌های پردازنده قدیمی‌تر که از Intel VT-x (فناوری مجازی‌سازی اینتل) / AMD SVM (ماشین مجازی امن AMD) پشتیبانی نمی‌کنند. با این حال، در این مورد، به دلیل این واقعیت که کد باینری اجرایی باید دو بار با استفاده از TCG (TCG یک کامپایلر Just-in-Time است) دوباره کامپایل شود، بسیار کند کار می کند.

آن ها QEMU خود مگا باحال است، اما بسیار کند کار می کند.

3) حلقه های محافظ

اصول کلی عملکرد QEMU-KVM

کد برنامه باینری روی پردازنده ها به همین شکل کار نمی کند، بلکه در سطوح مختلف (حلقه ها / حلقه های حفاظتی) با سطوح مختلف دسترسی به داده ها قرار دارد، از ممتازترین (Ring 0)، محدودترین، تنظیم شده و "با" پیچ های سفت شده» (حلقه 3).

سیستم عامل (هسته سیستم عامل) روی Ring 0 (حالت هسته) اجرا می شود و می تواند هر کاری که می خواهد با هر داده و دستگاهی انجام دهد. برنامه‌های کاربر در سطح Ring 3 (حالت کاربر) کار می‌کنند و حق ندارند هر کاری که می‌خواهند انجام دهند، اما در عوض هر بار باید برای انجام یک یا آن عملیات درخواست دسترسی کنند (بنابراین، برنامه‌های کاربر فقط به داده‌های خود دسترسی دارند و نمی‌توانند "ورود" به "صندوق شنی شخص دیگری"). حلقه 1 و 2 برای استفاده راننده است.

قبل از اختراع Intel VT-x / AMD SVM، هایپروایزرها روی Ring 0 اجرا می شدند و مهمانان روی Ring 1 اجرا می کردند. از آنجایی که Ring 1 دارای حقوق کافی برای عملکرد صحیح سیستم عامل نیست، با هر تماس ممتاز مهمان، هایپروایزر مجبور شد این فراخوان را در همان لحظه تغییر دهد و آن را روی حلقه 0 اجرا کند (مثلاً مانند QEMU). آن ها باینری مهمان NOT مستقیماً بر روی پردازنده اجرا شد و هر بار تغییرات میانی متعددی را در جریان داشت.

سربار قابل توجه بود و یک مشکل بزرگ بود، و سپس تولید کنندگان پردازنده، مستقل از یکدیگر، مجموعه گسترده ای از دستورالعمل ها (Intel VT-x / AMD SVM) را منتشر کردند که به شما امکان می دهد کد سیستم عامل مهمان را اجرا کنید. به طور مستقیم روی پردازنده میزبان (با دور زدن هر مرحله میانی گران قیمت، همانطور که قبلا بود).

با ظهور Intel VT-x / AMD SVM، یک سطح جدید ویژه Ring -1 (منهای یک) ایجاد شد. و اکنون هایپروایزر روی آن اجرا می شود و مهمانان روی Ring 0 اجرا می کنند و دسترسی ممتازی به CPU دارند.

آن ها در نهایت:

  • میزبانی که روی حلقه 0 اجرا می شود
  • مهمانان برای حلقه 0 کار می کنند
  • Hypervisor در حال اجرا بر روی Ring -1

4) QEMU-KVM

KVM به مهمانان امکان دسترسی به Ring 0 را می دهد و از QEMU برای تقلید I/O (پردازنده، دیسک ها، شبکه، ویدئو، PCI، USB، پورت های سریال و غیره که مهمان ها می بینند و با آن کار می کنند) استفاده می کند.

بنابراین QEMU-KVM (یا KVM-QEMU) :)

اعتبارات
عکس برای جلب توجه
حلقه های محافظ تصویر

PS متن این مقاله در ابتدا در کانال تلگرام منتشر شده است @RU_Voip به عنوان پاسخ به سوال یکی از اعضای کانال.

در نظرات بنویسید که من موضوع را درست متوجه نشدم یا چیزی برای اضافه کردن وجود دارد.

با تشکر از شما!

منبع: www.habr.com

اضافه کردن نظر