微吼云上線多路互動直播服務 加速多場景互動直播落地
1126
2025-03-31
2.4 QEMU用戶態設備模擬
QEMU原本就是一個著名的開源虛擬機軟件項目,而不是KVM虛擬化軟件的一部分。與KVM不同,QEMU最初實現的虛擬機是一個純軟件的實現,通過二進制翻譯來實現虛擬化客戶機中的CPU指令模擬,所以性能比較低。但是,其優點是跨平臺,QEMU支持在Linux、Windows、FreeBSD、Solaris、MacOS等多種操作系統上運行,能支持在QEMU本身編譯運行的平臺上就實現虛擬機的功能,甚至可以支持客戶機與宿主機并不是同一個架構(比如在x86平臺上運行ARM客戶機)。作為一個存在已久的虛擬機監控器軟件,QEMU的代碼中有完整的虛擬機實現,包括處理器虛擬化、內存虛擬化,以及KVM也會用到的虛擬設備模擬(比如網卡、顯卡、存儲控制器和硬盤等)。
除了二進制翻譯的方式,QEMU也能與基于硬件虛擬化的Xen、KVM結合,為它們提供客戶機的設備模擬。通過與KVM的密切結合,讓虛擬化的性能提升得非常高,在真實的企業級虛擬化場景中發揮重要作用,所以我們通常提及KVM虛擬化時就會說“QEMU/KVM”這樣的軟件棧。
最早期的KVM開發者們為了簡化軟件架構和代碼重用,根據KVM特性在QEMU的基礎上進行了修改(當然這部分修改已經合并回QEMU的主干代碼,故現在的QEMU已原生支持KVM虛擬化特性)。從圖2-8可以看出,每一個虛擬客戶機在宿主機中就體現為一個QEMU進程,而客戶機的每一個虛擬CPU就是一個QEMU線程。虛擬機運行期間,QEMU會通過KVM模塊提供的系統調用進入內核,由KVM 模塊負責將虛擬機置于處理器的特殊模式下運行。遇到虛擬機進行I/O操作時,KVM模塊會從上次的系統調用出口處返回QEMU,由QEMU來負責解析和模擬這些設備。
從QEMU角度來看,也可以說QEMU使用了KVM模塊的虛擬化功能,為自己的虛擬機提供硬件虛擬化的加速,從而極大地提高了虛擬機的性能。除此之外,虛擬機的配置和創建,虛擬機運行依賴的虛擬設備,虛擬機運行時的用戶操作環境和交互,以及一些針對虛擬機的特殊技術(如:動態遷移),都是由QEMU自己實現的。
QEMU除了提供完全模擬的設備(如:e1000網卡、IDE磁盤等)以外,還支持virtio協議的設備模擬。virtio是一個溝通客戶機前端設備與宿主機上設備后端模擬的比較高性能的協議,在前端客戶機中需要安裝相應的virtio-blk、virtio-scsi、virtio-net等驅動,而QEMU就實現了virtio的虛擬化后端。QEMU還提供了叫作virtio-blk-data-plane的一種高性能的塊設備I/O方式,它最初在QEMU 1.4版本中被引入。virtio-blk-data-plane與傳統virtio-blk相比,它為每個塊設備單獨分配一個線程用于I/O處理,data-plane線程不需要與原QEMU執行線程同步和競爭鎖,而且它使用 ioeventfd/irqfd 機制,同時利用宿主機Linux上的AIO(異步I/O)來處理客戶機的I/O請求,使得塊設備I/O效率進一步提高。
總之,QEMU既是一個功能完整的虛擬機監控器,也在QEMU/KVM的軟件棧中承擔設備模擬的工作。
KVM 虛擬化 應用性能調優
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。