虛擬化概念與KVM簡述
一: 虛擬化概念
1.1 虛擬化簡述
虛擬化是雲計算的核心技術之一。就是將x 個物理資源虛擬化為y 個邏輯資源, 一般說x 是小於y。通過虛擬化技術,我們可以在一台計算機上運行多個邏輯計算機(虛擬機)。
每個虛擬機之間是完全隔離的。它們可以獨立交互並運行裝不同的操作系統。應用程序也都是在相互獨立的空間內運行,不受影響。所有虛擬機共享主機資源。
虛擬化利用單台計算機或服務器創建多個資源,在減少整體服務器使用數、降低能源消耗以及削減基礎結構成本和維護的同時,提高了可伸縮性和工作負荷。
虛擬化的目的可以用一句話來概述:虛擬化技術的目的是希望能夠截獲上層操作系統應用對硬件資源的訪問,然后重定向到 VMM 的資源池中,再由 VMM 來對片上資源進行管理;
1.2 虛擬化技術分類
虛擬化技術主要分為以下幾個大類 :
- 平台虛擬化(Platform Virtualization),針對計算機和操作系統的虛擬化。
- 資源虛擬化(Resource Virtualization),針對特定的系統資源的虛擬化,比如內存、存儲、網絡資源等。
- 應用程序虛擬化(Application Virtualization),包括仿真、模擬、解釋技術等。
我們通常所說的虛擬化主要是指平台虛擬化技術,通過使用控制程序(Control Program,也被稱為 Virtual Machine Monitor 或 Hypervisor),隱藏特定計算平台的實際物理特性,為用戶提供抽象的、統一的、模擬的計算環境(稱為虛擬機)。
虛擬機中運行的操作系統被稱為客戶機操作系統(Guest OS),運行虛擬機監控器的操作系統被稱為主機操作系統(Host OS),當然某些虛擬機監控器可以脫離操作系統直接運行在硬件之上(如 VMWARE 的 ESX 產品)。運行虛擬機的真實系統我們稱之為主機系統。
常見的平台虛擬化技術有,完全虛擬化;部分虛擬化(半虛擬化);硬件輔助的虛擬化
-
全虛擬化:
- 全虛擬化是指虛擬機模擬了完整的底層硬件,包括cpu,物理內存,外設等,使得為原始硬件設計的操作系統或其它系統軟件完全不做任何修改就可以在虛擬機中運行
- 將非內核態指令模擬成內核態指令再交給cpu處理,中間要經過兩重轉換,因此效率低,一般用於科研,不適合商業推廣
- 優點是不會修改GuestOS,所以全虛擬化的VMM可以安裝絕大部分操作系統
- 全虛擬代表軟件:VMware Workstation; Hyper-V; KVM-x86, Sun Virtual Box,Oracle VM,QEMU
-
部分虛擬化(半虛擬化)
- VMM 只模擬部分底層硬件,因此客戶機操作系統不做修改是無法在虛擬機中運行的,其它程序可能也需要進行修改
- 使用Hypervisor(虛擬機管理程序)分享存取底層的硬件
- 半虛擬化系統性能可以接近在裸機上的性能。
- 半虛擬化代表軟件:Xen(也可全虛擬化)
-
硬件輔助虛擬化
- 硬件輔助虛擬化是指借助硬件(主要是主機處理器)的支持來實現高效的全虛擬化
- 主要有Intel-VT; AMD-V
1.3 虛擬化的優勢
- 減少服務器數量,降低硬件采購成本
- 資源利用最大化
- 硬件資源可動態調整,提高企業IT業務靈活性
- 高可用性
- 在不中斷服務的情況下進行物理硬件調整
- 降低管理成本
- 具備更高效的災備能力
1.4 虛擬化的三種通用模型
虛擬化模型:
- 第一種模型:
- OS+VMM 實現了Hypervisor的功能。這種是工作站中常見的模型
- 典型的有VMware Workstations。
- 第二種模型:
- VMM直接運行在硬件層之上,並提供硬件所需要的所有驅動,同時還提供了一個OS內核所必須的各種功能,但這些功能通常是專門為運行在其上的虛擬機而設計的,如:創建,刪除虛擬機等。
- 典型的有:VMware ESX,和VMware ESXi
- 第三種模型:Xen模型
- Xen這種模型比較特殊,它雖然直接運行於硬件層之上,但它卻並沒有提供驅動所有硬件的驅動,它僅僅提供了主要設備CPU,Interrupt(中斷),Memory的驅動,因此它采用了一種取巧的方式,要安裝Xen就先安裝一個主虛擬機,由它來驅動底層硬件;而所有虛擬機要訪問CPU,Interrupt,內存時,Xen才自己來調度,為每個VM提供服務;在Xen中每台VM都被稱為一個Domain,它們安照順序排列Dom0是Xen中在主VM,它也是特權VM。
1.5 虛擬機的特征
虛擬機是物理機的一種高效隔離的復制,有以下三個典型特征:
- 同質,虛擬機的運行環境和物理機的環境本質上相同,但是表現上能夠有一些差異;
- 高效,虛擬機中運行的軟件需要有接近物理機(native)中運行的性能;
- 資源受控,VMM 需要對系統資源有完全控制能力和管理權限,資源的分配 / 監控 / 回收;
二:KVM概述
2.1. KVM 的簡述
KVM(Kernel-based Virtual Machine),基於內核的虛擬機,是一個開源的系統虛擬化模塊,於2007 年2月被集成到Linux2.6.20內核中,成為Linxu內核的一部分。
是X86架構且硬件支持虛擬化技術(Intel VT或AMD-V)的Linux的全虛擬化解決方案。它是Linux的一個很小的模塊,利用Linux做大量的事,如任務調度、內存管理與硬件設備交互等。
KVM可以改進虛擬網絡的支持,虛擬存儲的支持,增加安全性,高可用性,容錯性,電源管理,HPC/實時支持,虛擬CPU可伸縮等方面。
2.2KVM 的虛擬化原理與架構
2.2.1 KVM虛擬化的原理
KVM是基於硬件的全虛擬化解決方案,在KVM中,虛擬機其實就是一個Linux進程,由CPU進行調度運行。
虛擬機的每個虛擬CPU就是一個Linux線程,這使得KVM能夠使用Linux 內核已有的功能。
KVM 模塊是KVM虛擬機的核心部分,其主要功能包括初始化CPU硬件,打開虛擬化模式,將虛擬客戶機運行在虛擬機模式下,對虛擬客戶機的運行提供一定的支持。
KVM驅動提供處理器、內存的虛擬化,以及客戶機I/O的攔截,guest的I/O被攔截后,交由Qemu處理
Qemu利用接口libkvm調用(ioctl) 虛擬機設備接口/dev/kvm來分配資源、管理、維護虛擬機
2.2.2 KVM虛擬機架構
- 在KVM架構中,最底層的是硬件系統,包括處理器,內存,輸入輸出設備等。
- 在硬件系統之上就是Linux操作系統,KVM是Linux 內核的一個模塊。
- 再向上就是基於Linux的應用程序,同時也包括基於KVM模塊虛擬出來的客戶機。
2.2.3 KVM工作流程
用戶模式的Qemu利用接口libkvm通過ioctl系統調用進入內核模式。KVM驅動為虛擬機創建 虛擬CPU和虛擬內存,然后執行VMLAU.NCH指令進入客戶模式,裝載Guest OS並運行。Guest OS運行過程中如果發生異常,則暫停Guest OS的運行並保存當前狀態同時退出到內核模式來處理這些異常。
內核模式處理這些異常時如果不需要/O則處理完成后重新進入客戶模式。如果需要I/O則進入到用戶模式,則由Qemu來處理I/O,處理完成后進入內核模式,再進入客戶模式
vm接口設置一個客戶機虛擬服務器地址空間,向它提供模擬I/O,並將它的運行過程與結果映射回宿主機的顯示屏,以完成整個虛擬化過程.
注意:KVM本省不執行任何模擬,用戶空間程序(如QEMU)通過/dev/kvm接口設置一個客戶機虛擬服務器地址空間,向它提供模擬I/O,並將它的運行過程與結果映射回宿主機的顯示屏,以完成整個虛擬化過程
2.3 KVM虛擬化架構/三種模式
-
客戶模式(guestOS):VM中的OS為GuestOS
- 客戶機在操作系統中運行的模式,客戶機分為內核模式和用戶模式,作用如下:
-
用戶模式:
- 為用戶提供虛擬機管理的用戶空間工具以及代表用戶執行I/O,Qemu_ 工作在此模式下(Qemu的主要功能)
-
linux內核模式
- 模擬CPU、內存,實現客戶模式切換,處理從客戶模式的推出,KVM即運行在此模式下
2.4 主要的虛擬化軟件
系列 | PC/服務器版代表 |
---|---|
VMware | VMware Workstation,vSphere |
Microsoft | VirtualPC,Hyper-V |
RedHat | KVM,RHEV |
Citrix | Xen |
Oracle | Oracle VM VirtualBox |