Sự khác biệt giữa KVM và QEMU


138

Tôi đã đọc về KVMQemuđôi khi. Đến bây giờ tôi đã hiểu rõ về những gì họ làm.

KVM hỗ trợ ảo hóa phần cứng để cung cấp hiệu suất gần với các hệ thống điều hành khách. Mặt khác, QEmu mô phỏng hệ điều hành mục tiêu.

Điều tôi bối rối là hai cấp độ này phối hợp với nhau. Như

  1. Ai quản lý việc chia sẻ RAM và / hoặc bộ nhớ?
  2. Ai lên lịch hoạt động I / O?

Câu trả lời:


194

Qemu :

QEmu là một phần mềm hoàn chỉnh và độc lập của riêng mình. Bạn sử dụng nó để mô phỏng máy móc, nó rất linh hoạt và di động. Chủ yếu nó hoạt động bởi một 'trình biên dịch lại' đặc biệt để chuyển đổi mã nhị phân được viết cho một bộ xử lý nhất định thành một bộ xử lý khác (giả sử, để chạy mã MIPS trên máy Mac PPC hoặc ARM trong PC x86).

Để mô phỏng không chỉ bộ xử lý, Qemu bao gồm một danh sách dài các trình giả lập ngoại vi: đĩa, mạng, VGA, PCI, USB, cổng nối tiếp / song song, v.v.

KQemu :

Trong trường hợp cụ thể trong đó cả nguồn và đích là cùng một kiến ​​trúc (như trường hợp chung của x86 trên x86), nó vẫn phải phân tích mã để loại bỏ bất kỳ 'hướng dẫn đặc quyền' nào và thay thế chúng bằng các chuyển đổi ngữ cảnh. Để làm cho nó hiệu quả nhất có thể trên x86 Linux, có một mô-đun hạt nhân gọi là KQemu xử lý việc này.

Là một mô-đun hạt nhân, KQemu có thể thực thi hầu hết các mã không thay đổi, chỉ thay thế các hướng dẫn chỉ ring0 ở mức thấp nhất. Trong trường hợp đó, không gian người dùng Qemu vẫn phân bổ tất cả RAM cho máy được mô phỏng và tải mã. Sự khác biệt là thay vì biên dịch lại mã, nó gọi KQemu để quét / vá / thực thi nó. Tất cả các mô phỏng phần cứng ngoại vi được thực hiện trong Qemu.

Tốc độ này nhanh hơn nhiều so với Qemu đơn giản vì hầu hết mã không thay đổi, nhưng vẫn phải chuyển đổi mã ring0 (hầu hết mã trong kernel của VM), do đó hiệu năng vẫn bị ảnh hưởng.

KVM :

KVM là một vài điều: đầu tiên, đó là mô-đun hạt nhân Linux, giờ đây được bao gồm trong dòng máy chính, bộ chuyển đổi bộ xử lý sang trạng thái 'khách' mới. Trạng thái khách có tập hợp các trạng thái vòng riêng, nhưng các lệnh ring0 đặc quyền lại rơi vào mã hypanneror. Vì nó là chế độ thực thi bộ xử lý mới, nên mã không phải sửa đổi theo bất kỳ cách nào.

Ngoài việc chuyển đổi trạng thái bộ xử lý, mô-đun hạt nhân cũng xử lý một số phần mô phỏng cấp thấp như các thanh ghi MMU (được sử dụng để xử lý VM) và một số phần của phần cứng giả lập PCI.

Thứ hai, KVM là một nhánh của thực thi Qemu. Cả hai đội làm việc tích cực để giữ sự khác biệt ở mức tối thiểu, và có những tiến bộ trong việc giảm bớt nó. Cuối cùng, mục tiêu là Qemu sẽ hoạt động ở bất cứ đâu và nếu có sẵn mô-đun hạt nhân KVM, nó có thể được sử dụng tự động. Nhưng trong tương lai gần, nhóm Qemu tập trung vào mô phỏng phần cứng và tính di động, trong khi người dùng KVM tập trung vào mô-đun hạt nhân (đôi khi di chuyển các phần nhỏ của mô phỏng ở đó, nếu nó cải thiện hiệu suất) và giao tiếp với phần còn lại của mã không gian người dùng.

Bộ thực thi kvm-qemu hoạt động như Qemu bình thường: phân bổ RAM, tải mã và thay vì biên dịch lại hoặc gọi KQemu, nó sinh ra một luồng (điều này rất quan trọng). Chuỗi này gọi mô-đun hạt nhân KVM để chuyển sang chế độ khách và tiến hành thực thi mã VM. Theo một hướng dẫn đặc quyền, nó chuyển trở lại mô-đun hạt nhân KVM, nếu cần, sẽ báo hiệu cho luồng Qemu để xử lý hầu hết các mô phỏng phần cứng.

Một trong những điều hay của kiến ​​trúc này là mã khách được mô phỏng theo một chuỗi posix mà bạn có thể quản lý bằng các công cụ Linux thông thường. Nếu bạn muốn một VM có 2 hoặc 4 lõi, kvm-qemu tạo 2 hoặc 4 luồng, mỗi luồng gọi mô-đun hạt nhân KVM để bắt đầu thực thi. Bộ xử lý đồng thời nếu bạn có đủ số lõi thực sự hoặc lập lịch cho bộ phận nếu không có bộ xử lý Linux thông thường, giữ cho mã nhỏ và các bất ngờ bị hạn chế.


3
Và đối với những người như tôi không có CPU có hỗ trợ VT, tin xấu (tốt, nếu đó có thể được gọi là «tin tức») - KQEMU không còn được hỗ trợ trong Ubuntu . KVM không hoạt động với CPU mà không có sự hỗ trợ đó.
Hi-Angel

100

Khi làm việc cùng nhau, KVM phân xử quyền truy cập vào CPU và bộ nhớ và QEMU mô phỏng các tài nguyên phần cứng (đĩa cứng, video, USB, v.v.). Khi làm việc một mình, QEMU mô phỏng cả CPU và phần cứng.


9
Tất nhiên câu trả lời của @ là chi tiết và nên được chấp nhận, nhưng câu trả lời của bạn đã giúp tôi đưa ra một vài câu chính xác những gì tôi cần biết, vì vậy +1 và cảm ơn.
Bill Ape

-2

QEMU chậm hơn và KVM có mặt để giúp QEMU đạt được tốc độ phần cứng rất nhanh để cung cấp hiệu suất tốt nhất cho hệ thống. QEMU là trình ảo hóa / Trình giả lập.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.