หลักการทำงานทั่วไปของ QEMU-KVM

หลักการทำงานทั่วไปของ QEMU-KVM

ความเข้าใจปัจจุบันของฉัน:

1) เควีเอ็ม

KVM (เครื่องเสมือนที่ใช้เคอร์เนล) คือไฮเปอร์ไวเซอร์ (VMM – Virtual Machine Manager) ที่ทำงานเป็นโมดูลบน Linux OS จำเป็นต้องมีไฮเปอร์ไวเซอร์เพื่อเรียกใช้ซอฟต์แวร์บางตัวในสภาพแวดล้อมที่ไม่มีอยู่จริง (เสมือน) และในขณะเดียวกันก็ซ่อนฮาร์ดแวร์จริงจริงที่ซอฟต์แวร์นี้ทำงานจากซอฟต์แวร์นี้ ไฮเปอร์ไวเซอร์ทำหน้าที่เป็น “ตัวเว้นวรรค” ระหว่างฮาร์ดแวร์กายภาพ (โฮสต์) และระบบปฏิบัติการเสมือน (แขก)

เนื่องจาก KVM เป็นโมดูลมาตรฐานของเคอร์เนล Linux จึงได้รับคุณสมบัติที่จำเป็นทั้งหมดจากเคอร์เนล (การจัดการหน่วยความจำ ตัวกำหนดเวลา ฯลฯ) และด้วยเหตุนี้ ในท้ายที่สุด ผลประโยชน์ทั้งหมดเหล่านี้ก็จะตกเป็นของแขก (เนื่องจากแขกทำงานบนไฮเปอร์ไวเซอร์ที่ทำงานบน/ในเคอร์เนล Linux OS)

KVM นั้นเร็วมาก แต่โดยตัวมันเองแล้ว การรันระบบปฏิบัติการเสมือนนั้นไม่เพียงพอ เพราะ... สิ่งนี้จำเป็นต้องมีการจำลอง I/O สำหรับ I/O (CPU, ดิสก์, เครือข่าย, วิดีโอ, PCI, USB, พอร์ตอนุกรม ฯลฯ) KVM ใช้ QEMU

2) คิวอีมู

QEMU (Quick Emulator) เป็นโปรแกรมจำลองสำหรับอุปกรณ์ต่างๆ ที่ช่วยให้คุณสามารถรันระบบปฏิบัติการที่ออกแบบมาสำหรับสถาปัตยกรรมแบบหนึ่งบนอีกสถาปัตยกรรมหนึ่งได้ (เช่น ARM -> x86) นอกจากโปรเซสเซอร์แล้ว QEMU ยังจำลองอุปกรณ์ต่อพ่วงต่างๆ เช่น การ์ดเครือข่าย, HDD, การ์ดแสดงผล, PCI, USB เป็นต้น

มันทำงานดังนี้:

คำแนะนำ/รหัสไบนารี่ (เช่น ARM) จะถูกแปลงเป็นรหัสที่ไม่ขึ้นกับแพลตฟอร์มระดับกลางโดยใช้ตัวแปลง TCG (ตัวสร้างรหัสขนาดเล็ก) จากนั้นรหัสไบนารี่ที่ไม่ขึ้นกับแพลตฟอร์มนี้จะถูกแปลงเป็นคำสั่ง/รหัสเป้าหมาย (เช่น x86)

ARM -> รหัสกลาง -> x86

โดยพื้นฐานแล้ว คุณสามารถรันเครื่องเสมือนบน QEMU บนโฮสต์ใดก็ได้ แม้ว่าโปรเซสเซอร์รุ่นเก่าจะไม่รองรับ Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine) อย่างไรก็ตาม ในกรณีนี้ มันจะทำงานช้ามาก เนื่องจากจำเป็นต้องคอมไพล์รหัสไบนารี่ที่เรียกใช้งานใหม่ทันทีสองครั้ง โดยใช้ TCG (TCG เป็นคอมไพเลอร์แบบ Just-in-Time)

เหล่านั้น. QEMU นั้นเจ๋งมาก แต่มันทำงานช้ามาก

3) วงแหวนป้องกัน

หลักการทำงานทั่วไปของ QEMU-KVM

รหัสโปรแกรมไบนารี่บนโปรเซสเซอร์ใช้งานได้ด้วยเหตุผล แต่อยู่ในระดับที่แตกต่างกัน (วงแหวน / วงแหวนป้องกัน) โดยมีระดับการเข้าถึงข้อมูลที่แตกต่างกัน ตั้งแต่สิทธิพิเศษสูงสุด (วงแหวน 0) ไปจนถึงระดับที่จำกัดที่สุด ได้รับการควบคุมและ "โดยขันน็อตให้แน่น ” (แหวนที่ 3 )

ระบบปฏิบัติการ (เคอร์เนล OS) ทำงานบน Ring 0 (โหมดเคอร์เนล) และสามารถทำทุกสิ่งที่ต้องการด้วยข้อมูลและอุปกรณ์ใดก็ได้ แอปพลิเคชันผู้ใช้ทำงานที่ระดับ Ring 3 (โหมดผู้ใช้) และไม่ได้รับอนุญาตให้ทำอะไรก็ตามที่ต้องการ แต่จะต้องขอเข้าถึงในแต่ละครั้งเพื่อดำเนินการเฉพาะ (ดังนั้นแอปพลิเคชันผู้ใช้จะเข้าถึงได้เฉพาะข้อมูลของตนเองและไม่สามารถ "รับ" เข้าไปใน” แซนด์บ็อกซ์ของคนอื่น) วงแหวน 1 และ 2 มีไว้สำหรับผู้ขับขี่

ก่อนการประดิษฐ์ Intel VT-x / AMD SVM ไฮเปอร์ไวเซอร์ทำงานบน Ring 0 และแขกทำงานบน Ring 1 เนื่องจาก Ring 1 ไม่มีสิทธิ์เพียงพอสำหรับการทำงานปกติของระบบปฏิบัติการ ด้วยการเรียกสิทธิพิเศษแต่ละครั้งจากระบบแขก ไฮเปอร์ไวเซอร์ต้องแก้ไขการโทรนี้ทันทีและดำเนินการบน Ring 0 (เหมือนกับที่ QEMU ทำ) เหล่านั้น. ไบนารีของแขก ไม่ ถูกดำเนินการโดยตรงบนโปรเซสเซอร์ และแต่ละครั้งจะต้องผ่านการแก้ไขระดับกลางหลายครั้งทันที

ค่าใช้จ่ายมีความสำคัญและนี่เป็นปัญหาใหญ่ จากนั้นผู้ผลิตโปรเซสเซอร์ซึ่งแยกจากกันก็ได้ออกชุดคำสั่งเพิ่มเติม (Intel VT-x / AMD SVM) ที่อนุญาตให้เรียกใช้โค้ด guest OS โดยตรง บนโปรเซสเซอร์โฮสต์ (ข้ามขั้นตอนกลางที่มีค่าใช้จ่ายสูง ดังที่เคยเป็นมา)

ด้วยการถือกำเนิดของ Intel VT-x / AMD SVM จึงมีการสร้าง Ring ระดับใหม่พิเศษ -1 (ลบหนึ่ง) และตอนนี้ไฮเปอร์ไวเซอร์ทำงานบนมัน และแขกทำงานบน Ring 0 และได้รับสิทธิพิเศษในการเข้าถึง CPU

เหล่านั้น. ในท้ายที่สุด:

  • โฮสต์ทำงานบนวงแหวน 0
  • แขกทำงานใน Ring 0
  • ไฮเปอร์ไวเซอร์ทำงานบน Ring -1

4) QEMU-KVM

KVM ช่วยให้แขกสามารถเข้าถึง Ring 0 และใช้ QEMU เพื่อจำลอง I/O (โปรเซสเซอร์, ดิสก์, เครือข่าย, วิดีโอ, PCI, USB, พอร์ตอนุกรม ฯลฯ ที่แขก “เห็น” และทำงานด้วย)

ดังนั้น QEMU-KVM (หรือ KVM-QEMU) :)

เครดิต
รูปภาพเพื่อดึงดูดความสนใจ
รูปภาพของวงแหวนป้องกัน

ป.ล. ข้อความของบทความนี้เผยแพร่ครั้งแรกในช่อง Telegram @RU_Voip เป็นการตอบคำถามจากหนึ่งในผู้เข้าร่วมช่อง

เขียนความคิดเห็นที่ฉันไม่เข้าใจหัวข้ออย่างถูกต้องหรือหากมีสิ่งใดเพิ่มเติม

ขอบคุณ!

ที่มา: will.com

เพิ่มความคิดเห็น