سؤال الفرق بين KVM و QEMU


لقد كنت أقرأ عن KVM و Qemu لبعض الوقت. حتى الآن لدي فهم واضح لما يفعلونه.

يدعم KVM الأجهزة الظاهرية لتوفير أداء قريب من الأم إلى أنظمة تشغيل Guest. من ناحية أخرى ، يحاكي QEmu نظام التشغيل المستهدف.

ما أكون مرتبكًا هو مستوى التنسيقين. مثل

  1. من يدير مشاركة ذاكرة الوصول العشوائي و / أو الذاكرة؟
  2. من يقوم بجدولة عمليات الإدخال / الإخراج؟

112
2017-12-03 08:42


الأصل




الأجوبة:


كيمو:

QEmu هو برنامج كامل ومستقل بذاته. يمكنك استخدامه لمحاكاة الآلات ، وهي مرنة جدا ومحمولة. أساسا أنها تعمل عن طريق "recompiler" خاص الذي يحول رمز ثنائي مكتوب لمعالج معين في واحد آخر (على سبيل المثال ، لتشغيل التعليمات البرمجية MIPS على ماك PPC ، أو ARM في جهاز كمبيوتر x86).

لمحاكاة أكثر من مجرد المعالج ، يتضمن Qemu قائمة طويلة من المحاكيات الطرفية: القرص ، الشبكة ، VGA ، PCI ، USB ، المنافذ التسلسلية / المتوازية ، إلخ.

ككيمو:

في الحالة المحددة حيث يكون كل من المصدر والهدف هما نفس البنية (مثل الحالة الشائعة لـ x86 على x86) ، فإنه لا يزال عليه تحليل الشفرة لإزالة أي "تعليمات مميزة" واستبدالها بمفاتيح تبديل السياق. ولجعلها أكثر فعالية في لينكس x86 ، توجد وحدة kernel تسمى KQemu والتي تتعامل مع هذا.

كونها وحدة kernel ، تكون KQemu قادرة على تنفيذ معظم التعليمات البرمجية دون تغيير ، لتحل محل تعليمات الحلقة الأقل مستوى فقط. في هذه الحالة ، لا يزال المستخدم Qemu يخصص كل ذاكرة الوصول العشوائي (RAM) للجهاز الذي تمت مضاهاته ، ويقوم بتحميل الرمز. الفرق هو أنه بدلاً من إعادة تجميع الرمز ، فإنه يستدعي KQemu لمسح / تصحيح / تنفيذ ذلك. تتم كافة مضاهاة الأجهزة الطرفية في Qemu.

هذا أسرع بكثير من Qemu عادي لأن معظم الشفرة لم تتغير ، ولكن لا يزال يتعين تحويل رمز ring0 (معظم التعليمات البرمجية في نواة VM) ، لذلك لا يزال الأداء يعاني.

KVM:

إن KVM هي شيئان: الأول هو وحدة نواة لينكس - التي يتم تضمينها الآن في mainline - والتي تقوم بتحويل المعالج إلى حالة "ضيف" جديدة. لدى حالة الضيف مجموعة خاصة به من الحلقات ، ولكن يتم إرجاع إرشادات ring0 المميزة إلى رمز hypervisor. نظرًا لأنه وضع معالج جديد للتنفيذ ، لا يلزم تعديل الشفرة بأي طريقة.

وبصرف النظر عن تبديل حالة المعالج ، فإن وحدة kernel تتعامل أيضًا مع بعض الأجزاء منخفضة المستوى من المضاهاة مثل سجلات MMU (المستخدمة للتعامل مع VM) وبعض أجزاء من أجهزة PCI المحاكية.

ثانيا ، KVM هو شوكة من Qemu للتنفيذ. يعمل كلا الفريقين بنشاط للحفاظ على الفروق عند الحد الأدنى ، وهناك تقدم في الحد منها. في النهاية ، الهدف هو أن Qemu يجب أن تعمل في أي مكان ، وإذا كانت وحدة KVM kernel متاحة ، يمكن أن تستخدم تلقائيا. ولكن في المستقبل المنظور ، يركز فريق Qemu على مضاهاة الأجهزة وقابليتها للحمل ، بينما يركز KVM على وحدة النواة (في بعض الأحيان يتحرك أجزاء صغيرة من المضاهاة هناك ، إذا كان يحسن الأداء) ، والتفاعل مع بقية كود المستخدمين.

يعمل kvm-qemu القابل للتنفيذ مثل Qemu العادي: يخصص ذاكرة الوصول العشوائي ، ويحمّل الرمز ، وبدلاً من إعادة تحويله ، أو استدعاء KQemu ، فإنه يولد مؤشر ترابط (وهذا مهم). يستدعي مؤشر الترابط وحدة KVM kernel للتبديل إلى وضع الضيف وتتابع تنفيذ كود VM. على تعليمة مميزة ، يتم التبديل مرة أخرى إلى وحدة KVM kernel ، والتي ، إذا لزم الأمر ، تشير إلى مؤشر Qemu لمعالجة معظم مضاهاة الأجهزة.

واحدة من الأشياء الرائعة في هذه الهندسة المعمارية هي أن رمز الضيف يتم محاكاته في سلسلة من الحلقات التي يمكنك إدارتها باستخدام أدوات لينكس العادية. إذا كنت تريد VM مع 2 أو 4 نواة ، kvm-qemu يخلق 2 أو 4 سلاسل ، كل واحد منهم يستدعي وحدة KVM kernel لبدء التنفيذ. إن التزامن - إذا كان لديك عدد كافٍ من النوى الحقيقية - أو الجدولة - إن لم تكن - يتم إدارته من قبل جدولة لينكس العادية ، مع الاحتفاظ بكود صغير ومفاجآت محدودة.


155
2017-12-03 14:40



وللشخص الذي لا يوجد لديه وحدة المعالجة المركزية (CPU) مع دعم VT ، أخبار سيئة (حسنا ، إذا كان ذلك يمكن أن يسمى "الأخبار") - لم يعد KQEMU مدعومًا في Ubuntu. لا يعمل KVM مع وحدة المعالجة المركزية بدون هذا الدعم. - Hi-Angel


عند العمل معًا ، يحكم KVM الوصول إلى وحدة المعالجة المركزية والذاكرة ، وتحاكي QEMU موارد الأجهزة (القرص الصلب ، الفيديو ، USB ، إلخ). عند العمل بمفرده ، يحاكي QEMU كل من وحدة المعالجة المركزية والأجهزة.


76
2017-12-03 08:46



@ إجابة Javier مفصّلة ويجب أن تكون الإجابة المقبولة بالطبع ، لكن إجابتك تمكنت من إعطائي بضعة جمل بالضبط ما أحتاج إلى معرفته ، لذا أرسل +1 وشكراً. - Bill The Ape


QEMU أبطأ و KVM هناك لمساعدة QEMU لتحقيق سرعة الأجهزة بسرعة كبيرة لتوفير أفضل أداء للنظام. QEMU هو hypervisor / المحاكي.


-1
2017-11-14 10:58