KVM虛擬化技術方案介紹
1.背景介紹
KVM(Kernel-based Virtual Machine)
開源全虛擬化方案
- 支持體系結構
- x86(32位,64位)、IA64、PowerPC、S390
- 依賴x86硬件支持:Intel VT-x/ AMD-V
- 內核模塊,使得linux內核成為hypervisor
XEN架構
-
domainU:普通用戶虛擬機
-
domain0:特權虛擬機
-
唯一
-
擁有設備驅動,可以直接認識硬件設備
-
擁有后端驅動,可以與眾多普通虛擬機交互,實現IO虛擬化
-
最先啟動。
-
可以管理其他domainU虛擬機
-
早期是半虛擬化,現在是全虛擬化。性能較差,但是安全性較好。
KVM架構:
- KVM:內核中的一個模塊,部署在linux kernel中,使得linux kernel變?yōu)閔ypervisor??梢詫崿FCPU虛擬化、內存虛擬化。無法實現IO虛擬化。運行內核態(tài)。
- QEMU-KVM:實現IO虛擬化。運行在用戶空間中,用戶態(tài)。
優(yōu)點:全虛擬化性能較好
QEMU:與KVM、XEN一樣,也是屬于虛擬化解決方案的一種,也就是說,它能夠實現CPU虛擬化、內存虛擬化、IO虛擬化。輕量級,性能較差。單線程。
KVM調用QEMU實現IO虛擬化,反過來,也可以認為是QEMU調用KVM,增強CPU、內存虛擬化的性能。
KVM使用的QEMU不一樣的。多線程。QEMU-KVM
2.KVM簡介
UVP虛擬化架構中KVM架構
FusionCompute,簡稱FC。有2部分組成:CNA+VRM。
- CNA又由兩部分組成:UVP+VNA。UVP實現底層硬件的虛擬化,VNA實現對接VRM。
- VRM是集群級的一個管理平臺(具體是以2臺虛擬機主備形式部署在2個管理節(jié)點上)。
libvirtd
libvirtd:統(tǒng)一的接口。兼容不同的虛擬化方案,統(tǒng)一管理。
- 南向可以接入不同虛擬化產品。
- 北向提供統(tǒng)一接口,通過不同工具(cli\圖形化),管理虛擬機。
- 通過xml文件,統(tǒng)一定義虛擬機。
CPU虛擬化
X86架構CPU擁有四種等級的指令:
-
ring0特權指令,給操作系統(tǒng)使用
-
ring1\2給驅動程序使用
-
ring3非特權指令,給應用程序使用
操作系統(tǒng)對CPU的認識與管理達成以下兩點認識:
- CPU資源永遠就緒
- OS對CPU具有最高權限
引入虛擬化后出現的問題:
- 多個VM之間共享CPU資源
- 部分指令只有hypervisor有權限使用
-
多個VM之間共享CPU資源的問題?
將VM的vCPU調度到CPU的線程上運行,實現物理CPU資源的分時復用。 -
虛擬機指令越級的問題?
傳統(tǒng)架構中,操作使用ring0,應用程序使用ring3。
在虛擬化架構當中,VM可看作上面的應用程序,只能使用ring3。但里面實際上有OS,需要使用ring0。所以,指令越級。經典虛擬化:特權解除、陷入模擬。
當虛擬機操作系統(tǒng)需要使用ring0指令,解除特權,由host os的ring1模擬。
缺點:在X86架構中,遇到問題:在非特權指令中,有19條敏感指令。
解決方案
1、操作系統(tǒng)輔助的全虛擬化
修改host OS,接收VM全部指令進行處理。優(yōu)點:解決敏感指令的問題。
缺點:1、host OS壓力較大,2、host 0S需要修改,難度較大。
2、半虛擬化
修改guest os,VM不發(fā)出敏感指令。優(yōu)點: host OS壓力較小
缺點:需要修改guest 0S,只有開源可以修改,不能運行閉源操作系統(tǒng)。
3、硬件輔助的全虛擬化:
在CPU層面,引入根與非根,分別擁有ring0-3,根給host os 使用,非根給Guest os
全虛、半虛
區(qū)別:虛擬機操作系統(tǒng)是否修改。如果修改就是半虛,不修改就是全虛
KVM CPU虛擬化
- 非根模式:客戶機模式
- 根模式ring0:內核態(tài)模式
- 根模式ring3:用戶態(tài)模式
vm entry:由內核態(tài)進入客戶機模式
vm exit:由客戶機模式進入內核態(tài)
以上兩個切換,會有切換開銷。本身VMM運行,也需要消耗性能。所以,虛擬化后的性能損耗,來自切換開銷、VMM的性能消耗。
內存虛擬化
操作系統(tǒng)對內存的認識與管理達成以下兩點認識:
- 內存都是從物理地址0開始的
- 內存都是連續(xù)的
引入虛擬化后出現的問題:
- 從物理地址0開始的:物理地址0只有一個,無法同時滿足所有客戶機從0開始的要求;
- 地址連續(xù):雖然可以分配連續(xù)的物理地址,但是內存使用效率不高,缺乏靈活性。
GVA: Guest virtual Address | 客戶機虛擬地址 | 客戶機給應用程序分配地址,可能是真實內存,也可能是硬盤 |
---|---|---|
GPA: Guest Physical Address | 客戶機物理地址 | 客戶機以為真實內存 |
HVA: Host Virtual Address | 宿主機虛擬地址 | 宿主機給應用程序(VM)分配地址,可能是真實內存,也可能是硬盤 |
HPA: Host Physical Address | 宿主機物理地址 | 實際上就是服務器真實內存 |
HPA-》 HVA-》GPA-》GVA
HPA-》HVA 本身OS具有MMU,就可以實現
HVA-》GPA MMU虛擬化
GPA-》GVA VM本身OS也具有MMU,也可以實現
MMU虛擬化**(MMU本質是是內存管理模塊)**
-
軟件 XEN 可以是半虛、全虛
-
直接模式:半虛化,知道自己是處于虛擬化環(huán)境當中,可以直接在hypervisor當中實現HVA-》GVA的轉化。(宿主機虛擬地址-》客戶機虛擬地址)
-
影子列表:全虛化,不知道自己運行··在物理服務器或虛擬化環(huán)境中,可以在hypervisor當中實現HVA-》GPA的轉化。再由虛擬機本身實現GPA-》GVA的轉化。(宿主機虛擬地址-》客戶機物理地址-》客戶機虛擬地址)
-
-
硬件:由CPU直接實現HVA-》GPA的轉化。
- EPT: intel
- NPT: amd
大頁內存
MMU
會擁有內存映射表,記錄物理地址—》虛擬地址(包含真實內存、硬盤)
該表,一般存在于內存當中
為了配置大頁內存把MMU表存放在CPU寄存器上
配置主機大頁內存,優(yōu)化主機內存訪問效率,從而提升性能。大頁虛擬機不支持計算資源調度,無法給出正確的調度策略,建議將大頁虛擬機部署到獨立集群,所在集群無需開啟計算資源調度。
I/O虛擬化
軟件與軟件、硬件的通信:
(需要CPU)——》數據拷進去寫入在拷出來
- Port IO 使用專門的IO空間,由CPU拷貝
- MMIO 使用內存空間,由CPU拷貝
(服務器里面專門負責)——》數據拷進去寫入在拷出來
- DMA 由DMA控制器拷貝
I/0虛擬化需要解決兩個問題
設備發(fā)現:
需要控制各虛擬機能夠訪問的設備訪問截獲:
- 通過I/0端口或者MMIO對設備的訪問
- 設備通過DMA與內存進行數據交換
全模擬(完全由軟件實現)
原理:
- VM中的APP進行IO,通過VM中驅動發(fā)送虛擬設備
- 虛擬設備往外發(fā)送
- KVM攔截
- KVM發(fā)送IO共享環(huán),告訴QEMU,完成操作
- QEMU從IO共享環(huán)中取出
- 通過真實設備驅動,發(fā)送設備
優(yōu)點:兼容很好
缺點:IO路徑長,需要上下文切換,開銷大。性能差
virtio(主流)
原理:
- VM中的APP進行I0,通過前端驅動發(fā)送出去
- 發(fā)送IO共享環(huán),告訴后端驅動,完成操作
- QEMU從IO共享環(huán)中取出
- 通過真實設備驅動,發(fā)送設備
優(yōu)點:相比全模擬,路徑較短,性能較好
缺點:某些操作系統(tǒng)不支持,比如windows默認不支持,需要額外的驅動
vhost
相比virtio,路徑更短,不需要經過qemu,直接由kernel的vhost模塊處理。
缺點:兼容性更差。
對比virtio
Virtio
HW=> Host Kernel
Host Kerne=>qemu
Qemu=>guest
Vhost
HW=> Host Kernel(內核)
Host Kernel=> Guest文章來源:http://www.zghlxwxcb.cn/news/detail-485587.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-485587.html
到了這里,關于云計算運營—03 KVM虛擬化技術方案介紹的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!