《KVM實戰:原理、進階與性能調優》一2.2 KVM架構概述
2.2 KVM架構概述

上一節介紹了CPU、內存、I/O等硬件虛擬化技術。KVM就是在硬件輔助虛擬化技術之上構建起來的虛擬機監控器。當然,并非要所有這些硬件虛擬化都支持才能運行KVM虛擬化,KVM對硬件最低的依賴是CPU的硬件虛擬化支持,比如:Intel的VT技術和AMD的AMD-V技術,而其他的內存和I/O的硬件虛擬化支持,會讓整個KVM虛擬化下的性能得到更多的提升。
KVM虛擬化的核心主要由以下兩個模塊組成:
1)KVM內核模塊,它屬于標準Linux內核的一部分,是一個專門提供虛擬化功能的模塊,主要負責CPU和內存的虛擬化,包括:客戶機的創建、虛擬內存的分配、CPU執行模式的切換、vCPU寄存器的訪問、vCPU的執行。
2)QEMU用戶態工具,它是一個普通的Linux進程,為客戶機提供設備模擬的功能,包括模擬BIOS、PCI/PCIE總線、磁盤、網卡、顯卡、聲卡、鍵盤、鼠標等。同時它通過ioctl系統調用與內核態的KVM模塊進行交互。
KVM是在硬件虛擬化支持下的完全虛擬化技術,所以它能支持在相應硬件上能運行的幾乎所有的操作系統,如:Linux、Windows、FreeBSD、MacOS等。KVM的基礎架構如圖2-8所示。在KVM虛擬化架構下,每個客戶機就是一個QEMU進程,在一個宿主機上有多少個虛擬機就會有多少個QEMU進程;客戶機中的每一個虛擬CPU對應QEMU進程中的一個執行線程;一個宿主機中只有一個KVM內核模塊,所有客戶機都與這個內核模塊進行交互。
2.3 KVM內核模塊
KVM內核模塊是標準Linux內核的一部分,由于KVM的存在讓Linux本身就變成了一個Hypervisor,可以原生地支持虛擬化功能。目前,KVM支持多種處理器平臺,它支持最常見的以Intel和AMD為代表的x86和x86_64平臺,也支持PowerPC、S/390、ARM等非x86架構的平臺。
KVM模塊是KVM虛擬化的核心模塊,它在內核中由兩部分組成:一個是處理器架構無關的部分,用lsmod命令中可以看到,叫作kvm模塊;另一個是處理器架構相關的部分,在Intel平臺上就是kvm_intel這個內核模塊。KVM的主要功能是初始化CPU硬件,打開虛擬化模式,然后將虛擬客戶機運行在虛擬機模式下,并對虛擬客戶機的運行提供一定的支持。
KVM僅支持硬件輔助的虛擬化,所以打開并初始化系統硬件以支持虛擬機的運行,是KVM模塊的職責所在。以KVM在Intel公司的CPU上運行為例,在被內核加載的時候,KVM模塊會先初始化內部的數據結構;做好準備之后,KVM模塊檢測系統當前的CPU,然后打開CPU控制寄存器CR4中的虛擬化模式開關,并通過執行VMXON指令將宿主操作系統(包括KVM模塊本身)置于CPU執行模式的虛擬化模式中的根模式;最后,KVM模塊創建特殊設備文件 /dev/kvm 并等待來自用戶空間的命令。接下來,虛擬機的創建和運行將是一個用戶空間的應用程序(QEMU)和KVM模塊相互配合的過程。
/dev/kvm 這個設備可以被當作一個標準的字符設備,KVM模塊與用戶空間QEMU的通信接口主要是一系列針對這個特殊設備文件的loctl調用。當然,每個虛擬客戶機針對/dev/kvm文件的最重要的loctl調用就是“創建虛擬機”。在這里,“創建虛擬機”可以理解成KVM為了某個特定的虛擬客戶機(用戶空間程序創建并初始化)創建對應的內核數據結構。同時,KVM還會返回一個文件句柄來代表所創建的虛擬機。針對該文件句柄的loctl調用可以對虛擬機做相應的管理,比如創建用戶空間虛擬地址和客戶機物理地址及真實內存物理地址的映射關系,再比如創建多個可供運行的虛擬處理器(vCPU)。同樣,KVM模塊會為每一個創建出來的虛擬處理器生成對應的文件句柄,對虛擬處理器相應的文件句柄進行相應的loctl調用,就可以對虛擬處理器進行管理。
針對虛擬處理器的最重要的loctl調用就是“執行虛擬處理器”。通過它,用戶空間準備好的虛擬機在KVM模塊的支持下,被置于虛擬化模式中的非根模式下,開始執行二進制指令。在非根模式下,所有敏感的二進制指令都會被處理器捕捉到,處理器在保存現場之后自動切換到根模式,由KVM決定如何進一步 ? 處理(要么由KVM模塊直接處理,要么返回用戶空間交由用戶空間程序處理)。
除了處理器的虛擬化,內存虛擬化也是由KVM模塊實現的,包括前面提到的使用硬件提供的EPT特性,通過兩級轉換實現客戶機虛擬地址到宿主機物理地址之間的轉換。
處理器對設備的訪問主要是通過I/O指令和MMIO,其中I/O指令會被處理器直接截獲,MMIO會通過配置內存虛擬化來捕捉。但是,外設的模擬一般不由KVM模塊負責。一般來說,只有對性能要求比較高的虛擬設備才會由KVM內核模塊來直接負責,比如虛擬中斷控制器和虛擬時鐘,這樣可以大量減少處理器模式切換的開銷。而大部分的輸入輸出設備交給下一節將要介紹的用戶態程序QEMU來負責。
KVM 虛擬化 應用性能調優
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。