QEMU

自由的虛擬化與模擬軟體

QEMU(Quick Emulator)是一款免費開源模擬器,由法布里斯·貝拉(Fabrice Bellard)等人編寫。其與BochsPearPC類似,但擁有高速(配合KVM)、跨平台的特性。

QEMU
在Linux上使用Qemu執行OpenIndiana作業系統
在Linux上使用Qemu執行OpenIndiana作業系統
開發者Fabrice Bellard
目前版本
  • 9.1.1(2024年10月21日;穩定版本)[1]
編輯維基數據連結
原始碼庫 編輯維基數據連結
作業系統WindowsLinuxMac OS XFreeBSD
類型模擬器
許可協定多種授權
網站www.qemu.org/ 編輯維基數據

QEMU是一個寄存的虛擬機器,它使用動態二進制轉換技術來模擬處理器,並且提供多種硬件和外設模型,這使它能夠執行多種未修改的客戶機作業系統,能與KVM配合以接近本地速度執行虛擬機器(接近真實電腦的速度)。

QEMU可以執行用戶級的行程仿真,從而可以使為某一架構編譯的程式在另一架構上執行(通過 VMM 的形式實現)。

系統模組

編輯

QEMU有多種模式[2]

  • User mode:又稱作「用戶模式」,在這種模式下,QEMU執行針對不同指令編譯的單個LinuxDarwin/macOS程式。系統呼叫與32/64位元介面適應。在這種模式下,我們可以實現交叉編譯(cross-compilation)與交叉偵錯(cross- debugging)。
  • System mode:「系統模式」,在這種模式下,QEMU模擬一個完整的電腦系統,包括外圍裝置。它可以用於在一台電腦上提供多台虛擬電腦的虛擬主機。 QEMU可以實現許多客戶機OS的引導,比如x86,MIPS,32-bit ARMv7,PowerPC等等。
  • KVM Hosting:QEMU在這時處理KVM鏡像的設置與遷移,並參加硬件的仿真,但是客戶端的執行則由KVM完成。
  • Xen Hosting:在這種寄存下,客戶端的執行幾乎完全在Xen中完成,並且對QEMU封鎖。QEMU只提供硬件仿真的支援。

架構

編輯

QEMU的架構由純軟件實現,並在Guest與Host中間,來處理Guest的硬件請求,並由其轉譯給真正的硬件。

然而因為QEMU是純軟件實現的,所有的指令都要經過QEMU,使得效能很差,而配合KVM則可以解決這一問題。

QEMU虛擬化的思路是:提取Guest代碼,翻譯為TCG中間代碼,而後翻譯為Host代碼。相當於實現了一個「中間人」的角色。

特性

編輯

QEMU可以在執行所有程式的情況下儲存和恢復虛擬機器的狀態。客戶作業系統(Guest Operating System)不需要修補就可以在QEMU中執行。

QEMU支援仿真各種體系結構,包括:

  • IA-32(x86)個人電腦
  • ARM開發板(Integrator / CP和Versatile / PB)
  • PowerPC(PReP和Power Macintosh)

虛擬機器可以連接多種類型的實體主機硬件,包括硬碟CD-ROM網卡音效卡USB裝置。USB裝置可以是完全模擬的,也可以使用主機的USB裝置(但這需要管理員權限,而且並非所有裝置皆適用)。

虛擬磁碟映像可以以特殊格式(qcow或qcow2)儲存,只佔用虛擬機器作業系統實際使用的磁碟空間。此時模擬的120 GB硬碟可能僅佔用主機硬碟幾百MB的空間。QCOW2格式還允許建立覆蓋映像,以記錄與另一個(未修改的)基本映像檔案的區別。如此便可能將模擬磁碟的內容恢復到較早狀態。例如,基本映像檔案可以儲存已知可順利運作的全新安裝系統,但操作時使用覆蓋映像。萬一訪客系統故障(如因病毒攻擊,意外的系統破壞等),用戶可以刪除覆蓋映像,使用較早的模擬磁碟映像版本就行了。


QEMU可以通過網絡地址轉換模擬共用主機系統連接的網卡(不同型號),從而有效地允許guest虛擬機器使用與主機相同的網絡。虛擬網卡還可以連接到其他QEMU實例的網卡或本地TAP介面。通過使用主機OS的橋接功能,將QEMU使用的TUN / TAP介面與主機OS上的非虛擬乙太網路介面橋接,也可以實現網絡連接。

QEMU整合了多種服務以允許主機和訪客系統進行通訊;例如,整合的SMB伺服器和網絡埠重新導向(以允許傳入連接到虛擬機器)。它也可以在沒有引導程式的情況下引導Linux內核。

QEMU不依賴主機系統上的圖形輸出方法。相反,它可以允許通過整合的VNC伺服器訪問客戶作業系統的螢幕。它還可以使用模擬的串行線,而不使用任何螢幕和適用的作業系統。

模擬多個CPU進行對稱多處理(Symmetrical Multi-Processing)也是可能的。

QEMU不需要管理員權限執行,但在使用了某些提高速度的內核模組(如KQEMU),或者使用某些網絡連接模組時,則需要管理員權限。

微型碼產生器

編輯

微型碼產生器(TCG)旨在消除依賴特定版本的GCC或編譯器的缺點,並將編譯合併到QEMU的執行時任務中。因此,整個翻譯階段由兩部分組成:目標碼塊(TB)以TCG指令(一種機器無關的中間符號)重寫 ,隨後TCG為宿主機架構執行編譯。可選的最佳化在這兩步之間傳遞。

TCG需要專用的代碼來支援每個體系結構。它還要求重寫目標指令集翻譯過程以利用TCG指令,而不是以前使用的dyngen指令。

加速器

編輯

KQEMU是一個Linux內核模組,由Fabrice Bellard撰寫,它明顯加快了在具有相同CPU架構的平台上模擬x86或x86-64程式的速度。這可以通過直接在主機CPU上執行用戶模式代碼(以及可選的某些內核代碼)以及僅對內核模式和真實模式代碼使用處理器與外設模擬來實現。即使宿主機CPU不支援硬件輔助虛擬化,KQEMU也可以從多個客戶作業系統執行代碼。QEMU支援大容量主記憶體,這使得它們與KQEMU不相容。較新的QEMU版本已完全取消對KQEMU的支援。

由於缺乏對KQEMU和QVM86的支援,基於內核的虛擬機器(KVM)已經基本成為基於Linux的硬件輔助虛擬化解決方案,與QEMU一起使用。

英特爾的硬件加速執行管理器(HAXM)是KVM在Windows和MacOS上基於x86的硬件輔助虛擬化的開源替代品。2013年,英特爾使用QEMU來進行Android開發。

硬件輔助仿真

編輯

MIPS相容的龍芯3處理器增加了200條新指令來幫助QEMU翻譯x86指令,這些新指令降低了在MIPS管線化中執行x86 / CISC風格指令的開銷。由於中國科學院對QEMU進行了進一步改進,龍芯3在9個基準測試中,執行x86二進制檔案的同時,執行本機二進制檔案的平均效能達到70%。 [4]

並列仿真

編輯

使用QEMU的虛擬化解決方案能夠並列執行多個虛擬CPU。 對於用戶模式仿真,QEMU將仿真線程對映到宿主線程。 對於全系統仿真,QEMU能夠為每個虛擬CPU執行一個主機線程。 前提是客戶端已經更新到可以支援並列系統仿真,目前可以支援的CPU是ARMAlpha。否則QEMU將使用單個線程以迴圈方式模擬執行每個虛擬CPU。

與其他虛擬機器的整合

編輯

VirtualBox

VirtualBox,發佈於2007年1月,使用了一些QEMU的虛擬硬件裝置,並且有內建的基於QEMUdede動態再編譯器。與KQEMU一樣,VirtualBox通過VMM(虛擬機器管理器)在宿主機上本地執行幾乎所有客戶代碼,並將再編譯僅僅用作回退機制——例如,當客戶代碼以實地址模式執行時。 [5]另外,VirtualBox使用內建的反組譯程式進行了大量的代碼分析和修補,以儘量減少再編譯。除某些功能外,VirtualBox是免費且開源的(在GPL許可下)。

Xen-HVM

Xen是虛擬機器監視器,可以使用Intel VT-x或AMD-V硬件x86虛擬化擴充以及ARM Cortex-A7和Cortex-A15虛擬化擴充在HVM(硬件虛擬機器)模式下執行。 [6]這意味着,面對domU以使用真實的裝置驅動程式進行交談的是一組真實的虛擬硬件,而不是半虛擬化裝置。

QEMU包含幾個組件:CPU仿真器,仿真裝置,通用裝置,機器描述符,用戶介面和除錯器。 QEMU中的仿真器件和通用器件組成了虛擬I/O的器件模型。它們包括PIIX3 IDE,Cirrus Logic或純VGA模擬影片,RTL8139或E1000網絡仿真以及ACPI支援。Xen提供APIC支援。

Xen-HVM具有基於QEMU專案的裝置仿真功能,可為虛擬機器提供虛擬I/O。硬件通過執行在dom0後端的「QEMU裝置模型」守護行程來模擬。與其他QEMU執行模式(動態轉換或KVM)不同,虛擬CPU完全由管理程式管理,管理程式負責在QEMU模擬主記憶體對映I/O訪問時停止虛擬CPU。

KVM

KVM(基於內核的虛擬機器)是FreeBSD和Linux的內核模組,它允許用戶空間程式訪問各種處理器的虛擬化硬件特性,這個特點使得QEMU可以為x86,PowerPC和S/390客戶提供虛擬化。當目標體系結構與主機相同時,QEMU可以使用KVM特有的功能,比如加速功能。

Win4Lin Pro Desktop

在2005年初,Win4Lin推出了Win4Lin Pro Desktop,它基於QEMU和KQEMU的已調諧版本,並且寄存了Windows的NT版本。 在2006年6月, [7]Win4Lin發佈了基於相同代碼庫的Win4Lin虛擬桌面伺服器。 Win4Lin虛擬桌面伺服器為來自Linux伺服器的精簡客戶機提供Microsoft Windows對談服務。

2006年9月,Win4Lin宣佈將公司名稱更改為Virtual Bridges,並發佈了Win4BSD Pro Desktop,該產品的一個埠用於FreeBSD和PC-BSD。在2007年5月發佈了Win4Solaris Pro Desktop和Win4Solaris虛擬桌面伺服器後,提供了Solaris支援。[8]

SerialICE

SerialICE是一款基於QEMU的韌體除錯工具,可在QEMU內部執行系統韌體,同時通過與主機系統的串行連接訪問真實硬件。這可以用作硬件ICE的廉價替代品。

WinUAE

WinUAE Amiga仿真器在3.0.0版本中引入了對使用QEMU PPC內核的CyberStorm PPC和Blizzard 603e開發板的支援。[9]

硬件平台模擬

編輯

QEMU可模擬多種硬件裝置

鍵盤 SCSI控制器(AMD PCscsi和Tekram DC-390控制器中的LSI MegaRAID SAS 1078,LSI53C895A,NCR53C9x) 串行介面 音效卡(Sound Blaster 16,ES1370 PCI,Gravis Ultrasound,AC97和Intel HD Audio) 看門狗定時器(Intel 6300 ESB PCI或iB700 ISA) USB 1.x / 2.x / 3.x控制器(UHCI,EHCI,xHCI) USB裝置:音頻,藍牙配接器,HID(鍵盤/滑鼠/平板電腦),MTP,串行介面,CAC智能卡讀卡器,儲存(僅批次傳輸和USB連接SCSI),Wacom數碼板

arm

QEMU使用NEON擴充模擬ARMv7指令集。它模擬整合系統/ CP板,多功能底板,RealView仿真底板,基於XScale的PDA,Palm Tungsten | E PDA,諾基亞N800和諾基亞N810互聯網平板電腦等完整系統.QEMU還為Android SDK提供支援,該模擬器屬於Android SDK 。三星選擇了QEMU來幫助開發仿真'Wave'裝置。

基於Xilinx Cortex A9的Zynq SoC採用以下元素進行建模仿真:

Zynq-7000 ARM Cortex-A9 CPU Zynq-7000 ARM Cortex-A9 MPCore 三重計時器 DDR主記憶體控制器 DMA控制器(PL330) 靜態記憶體控制器(NAND / NOR快閃記憶體) SD / SDIO外設控制器(SDHCI) Zynq千兆乙太網路控制器 USB控制器(僅限EHCI - 主機支援) Zynq UART控制器 SPI和QSPI控制器 I2C控制器

衍生版本

編輯
 
UTM 2.0在iPadOS 14上的螢幕截圖

UTM虛擬機器(UTM Virtual Machine)是一款基於QEMU的虛擬機器,支援iOSiPadOSmacOS作業系統。[10]基於QEMU的UTM虛擬機器[11],可支援模擬30多個架構,例如x86_64ARM64,以及RISC-V[12]

目前UTM支援在系統版本 iPadOS 13以上、iOS 11以上、macOS Big Sur 以上的裝置上執行。

參見

編輯

參考文獻

編輯
  1. ^ [ANNOUNCE] QEMU 9.1.1 Stable released. 2024年10月21日 [2024年10月21日]. 
  2. ^ QEMU Internals. qemu.weilnetz.de. [永久失效連結]
  3. ^ QEMU PRIP 1 - support for MIPS64 Release 6 - PRPL. wiki.prplfoundation.org. [2019-01-20]. (原始內容存檔於2017-04-21). 
  4. ^ Godson-3: A Scalable Multicore RISC Processor with x86 Emulation. IEEE. [2009-04-16]. [失效連結]
  5. ^ VirtualBox Developer FAQ. [2015-02-02]. (原始內容存檔於2015-03-26). 
  6. ^ Xen ARM with Virtualization Extensions. [2019-01-20]. (原始內容存檔於2018-11-16). 
  7. ^ win4lin VDS announcement. [2019-01-20]. (原始內容存檔於2008-02-10). 
  8. ^ Win4Solaris announcement. [2019-01-20]. (原始內容存檔於2007-12-23). 
  9. ^ WinUAE 3.0.0. English Amiga Board. 2014-12-17 [2016-03-25]. (原始內容存檔於2016-04-06). 
  10. ^ UTM. getutm.app. [2021-11-20]. (原始內容存檔於2022-01-13). 
  11. ^ UTM Virtual Machines 2.4.0 Cracked for macOS. Haxmac. 2021-11-02 [2021-12-06]. (原始內容存檔於2021-12-06) (美國英語). 
  12. ^ Documentation/Platforms - QEMU. wiki.qemu.org. [2021-11-20]. (原始內容存檔於2021-11-20). 

外部連結

編輯