《KVM實戰:原理、進階與性能調優》一1.3 KVM簡介
1.3 KVM簡介
1.3.1 KVM的歷史
KVM全稱是Kernel-based Virtual Machine,即基于內核的虛擬機,是采用硬件虛擬化技術的全虛擬化解決方案。
KVM最初是由Qumranet公司的Avi Kivity開發的,作為他們的VDI產品的后臺虛擬化解決方案。為了簡化開發,Avi Kivity并沒有選擇從底層開始新寫一個Hypervisor,而是選擇了基于Linux kernel,通過加載模塊使Linux kernel本身變成一個Hypervisor。2006年10月,在先后完成了基本功能、動態遷移以及主要的性能優化之后,Qumranet正式對外宣布了KVM的誕生。同月,KVM模塊的源代碼被正式納入Linux kernel,成為內核源代碼的一部分。作為一個功能和成熟度都遜于Xen的項目,在這么快的時間內被內核社區接納,主要原因在于:
1)在虛擬化方興未艾的當時,內核社區急于將虛擬化的支持包含在內,但是Xen取代內核由自身管理系統資源的架構引起了內核開發人員的不滿和抵觸。
2)Xen誕生于硬件虛擬化技術出現之前,所以它在設計上采用了半虛擬化的方式,這讓Xen采用硬件虛擬化技術有了更多的歷史包袱,不如KVM新兵上陣一身輕。
2008年9月4日,Redhat公司以1.07億美元收購了Qumranet公司,包括它的KVM開源項目和開發人員。自此,Redhat開始在其RHEL發行版中集成KVM,逐步取代Xen,并從RHEL7開始,正式不支持Xen。
1.3.2 KVM的功能概覽
KVM從誕生開始就定位于基于硬件虛擬化支持的全虛擬化實現。它以內核模塊的形式加載之后,就將Linux內核變成了一個Hypervisor,但硬件管理等還是通過Linux kernel來完成的,所以它是一個典型的Type 2 Hypervisor,如圖1-7所示。
一個KVM客戶機對應于一個Linux進程,每個vCPU則是這個進程下的一個線程,還有單獨的處理IO的線程,也在一個線程組內。所以,宿主機上各個客戶機是由宿主機內核像調度普通進程一樣調度的,即可以通過Linux的各種進程調度的手段來實現不同客戶機的權限限定、優先級等功能。
客戶機所看到的硬件設備是QEMU模擬出來的(不包括VT-d透傳的設備,詳見6.2節),當客戶機對模擬設備進行操作時,由QEMU截獲并轉換為對實際的物理設備(可能設置都不實際物理地存在)的驅動操作來完成。
下面介紹一些KVM的功能特性。
1.內存管理
KVM依賴Linux內核進行內存管理。上面提到,一個KVM客戶機就是一個普通的Linux進程,所以,客戶機的“物理內存”就是宿主機內核管理的普通進程的虛擬內存。進而,Linux內存管理的機制,如大頁、KSM(Kernel Same Page Merge,內核的同頁合并)、NUMA(Non-Uniform Memory Arch,非一致性內存架構)、通過mmap的進程間共享內存,統統可以應用到客戶機內存管理上。
早期時候,客戶機自身內存訪問落實到真實的宿主機的物理內存的機制叫影子頁表(Shadow Page Table)。KVM Hypervisor為每個客戶機準備一份影子頁表,與客戶機自身頁表建立一一對應的關系。客戶機自身頁表描述的是GVA→GPA的映射關系;影子頁表描述的是GPA→HPA的映射關系。當客戶機操作自身頁表的時候,KVM就相應地更新影子頁表。比如,當客戶機第一次訪問某個物理頁的時候,由于Linux給進程的內存通常都是拖延到最后要訪問的一刻才實際分配的,所以,此時影子頁表中這個頁表項是空的,KVM Hypervisor會像處理通常的缺頁異常那樣,把這個物理頁補上,再返回客戶機執行的上下文中,由客戶機繼續完成它的缺頁異常。
影子頁表的機制是比較拗口,執行的代價也是比較大的。所以,后來,這種靠軟件的GVA→GPA→HVA→HPA的轉換被硬件邏輯取代了,大大提高了執行效率。這就是Intel的EPT或者AMD的NPT技術,兩家的方法類似,都是通過一組可以被硬件識別的數據結構,不用KVM建立并維護額外的影子頁表,由硬件自動算出GPA→HPA。現在的KVM默認都打開了EPT/NPT功能。
2.存儲和客戶機鏡像的格式
嚴格來說,這是QEMU的功能特性。
KVM能夠使用Linux支持的任何存儲來存儲虛擬機鏡像,包括具有IDE、SCSI和 SATA的本地磁盤,網絡附加存儲(NAS)(包括NFS和SAMBA/CIFS),或者支持iSCSI和光線通道的SAN。多路徑I/O可用于改進存儲吞吐量和提供冗余。
由于KVM是Linux內核的一部分,它可以利用所有領先存儲供應商都支持的一種成熟且可靠的存儲基礎架構,它的存儲堆棧在生產部署方面具有良好的記錄。
KVM還支持全局文件系統(GFS2)等共享文件系統上的虛擬機鏡像,以允許客戶機鏡像在多個宿主機之間共享或使用邏輯卷共享。磁盤鏡像支持稀疏文件形式,支持通過僅在虛擬機需要時分配存儲空間,而不是提前分配整個存儲空間,這就提高了存儲利用率。KVM 的原生磁盤格式為QCOW2,它支持快照,允許多級快照、壓縮和加密。
3.實時遷移
KVM支持實時遷移,這提供了在宿主機之間轉移正在運行的客戶機而不中斷服務的能力。實時遷移對用戶是透明的,客戶機保持打開,網絡連接保持活動,用戶應用程序也持續運行,但客戶機轉移到了一個新的宿主機上。
除了實時遷移,KVM支持將客戶機的當前狀態(快照,snapshot)保存到磁盤,以允許存儲并在以后恢復它。
4.設備驅動程序
KVM支持混合虛擬化,其中半虛擬化的驅動程序安裝在客戶機操作系統中,允許虛擬機使用優化的 I/O 接口而不使用模擬的設備,從而為網絡和塊設備提供高性能的 I/O。
KVM 使用的半虛擬化的驅動程序是IBM和Redhat聯合Linux社區開發的VirtIO標準;它是一個與Hypervisor獨立的、構建設備驅動程序的接口,允許多種Hypervisor使用一組相同的設備驅動程序,能夠實現更好的對客戶機的互操作性。
同時,KVM也支持Intel的VT-d 技術,通過將宿主機的PCI總線上的設備透傳(pass-through)給客戶機,讓客戶機可以直接使用原生的驅動程序高效地使用這些設備。這種使用是幾乎不需要Hypervisor的介入的。
5.性能和可伸縮性
KVM也繼承了Linux的性能和可伸縮性。KVM在CPU、內存、網絡、磁盤等虛擬化性能上表現出色,大多都在原生系統的95%以上。KVM的伸縮性也非常好,支持擁有多達288個vCPU和4TB RAM的客戶機,對于宿主機上可以同時運行的客戶機數量,軟件上無上限。
這意味著,任何要求非常苛刻的應用程序工作負載都可以運行在KVM虛擬機上。
KVM 應用性能調優
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。