openstack项目【day23】:KVM介绍
閱讀目錄
一 什么是kvm
KVM 全稱 Kernel-Based Virtual Machine。也就是說 KVM 是基于 Linux 內核實現的,這就使得linux內核本身就相當于一個Hypervisor。
Hypervisor即vmm,主要功能就是用來控制生成vm,并管理多個vm的運行,不同的vm中可以安裝不同的操作系統,這些操作系統共用一臺硬件主機,
因為直接使用linux內核的調度器進行管理,所以比xen的代碼少很多
二 為何要用kvm
虛擬化是云計算的基礎之一,而無論是在部署,還是在研發、測試方面,kvm都是排在第一位的Hypervisor(即vmm)。
kvm以高性能,可擴展性、高安全性,以及低成本而深受用戶喜愛,這一切也與他基于linux內核實現有關。
三 kvm的功能
kvm用一個個進程來運行虛擬機。
最主要的功能:
其余功能:
- 支持CPU 和 memory 超分(Overcommit)
- 支持半虛擬化I/O (virtio)
- 支持熱插拔 (cpu,塊設備、網絡設備等)
- 支持對稱多處理(Symmetric Multi-Processing,縮寫為?SMP?)
- 支持 PCI 設備直接分配和?單根I/O 虛擬化 (SR-IOV)
- 支持 內核同頁合并 (KSM?)
- 支持 NUMA (Non-Uniform Memory Access,非一致存儲訪問結構?)
四 常見虛擬化模式
按照Hypervisor的實現方式和位置不同,常見的形式分兩種
1. 全虛擬化
物理機上首先安裝常規的操作系統( Redhat、Ubuntu 和 Centos等),然后在操作系統上安裝kvm,kvm即Hypervisor,它會 作為 OS 上的一個程序模塊運行,并對管理虛擬機進行管理。除此之外:VirtualBox 和 VMWare Workstation 都屬于這個類型。
?
2. 半虛擬化
Hypervisor 直接安裝在物理機上,多個虛擬機在 Hypervisor 上運行。Hypervisor 實現方式一般是一個特殊定制的 Linux 系統。Xen 和 VMWare 的 ESXi 都屬于這個類型。
五 KVM架構
openstack可以兼容很多虛擬化解決方案,其中最主要的就是針對x86平臺的kvm。
KVM 全稱 Kernel-Based Virtual Machine。也就是說 KVM 是基于 Linux 內核實現的,這就使得linux內核本身就相當于一個Hypervisor。
具體的:
基于kvm創建的vm就是一個普通的linux進程,由linux內核調度程序進行調度,vm因此可以使用linux內核已有的功能。vm的執行本質就是vm中cpu的執行,因此vm的每個cpu就是普通的linux進程。
KVM有一個內核模塊叫 kvm.ko,只提供 CPU 和內存的虛擬化,而針對于IO及其他硬件設備(網絡及存儲等)的虛擬化,則是交給qemu實現,qemu運行在用戶態通過/dev/kvm接口設置一個客戶機虛擬機服務器的地址空間,向kvm提供模擬的I/O,并且將它的視頻顯示映射回宿主的顯示屏。
其實qemu本身就是一種虛擬化技術,它與kvm的區別如下
1. 上圖的左側:完全基于Qemu純軟件(不包含操作系統內核)實現的虛擬化。kqemu是通過kqemu模塊實現內核態的加速,在用戶態的qemu通過訪問/dev/kqemu設備文件接口調用改進加速。不過,此類模式主要針對Guest os與Host os屬于統一cpu架構(比如都是x86的架構)。一個明顯的缺點是性能低下。
2. 上圖的右側:qemu+kvm實現的虛擬化(即qemu-kvm)。具體的,KVM并不能算是一個完整的虛擬化解決方案,kvm只是Linux標準內核加載了一個據說有幾萬行代碼的模塊kvm.ko。也就是說KVM僅可以在VT技術的基礎上,提供虛擬的處理器和虛擬內存,至于IO硬件的模仿都交給qemu去做。
創建虛擬機流程
總結:
KVM 是實現攔截虛機的 I/O 請求的原理:
現代 CPU 本身實現了對特殊指令的‘截獲’和‘重定向’的硬件支持,甚至新的硬件會提供額外的資源來幫助軟件實現對關鍵硬件資源的虛擬化從而提高性能。以 X86 平臺為例,支持虛擬化技術的 CPU ?帶有特別優化過的指令集來控制虛擬化過程。通過這些指令集,VMM 很容易將客戶機置于一種受限制的模式下運行,一旦客戶機視圖訪問物理資源,硬件會暫停客戶機的運行,將控制權交回給 VMM?處理。VMM?還可以利用硬件的虛級化增強機制,將客戶機在受限模式下對一些特定資源的訪問,完全由硬件重定向到 VMM 指定的虛擬資源,整個過程不需要暫??蛻魴C的運行和 VMM 的參與。由于虛擬化硬件提供全新的架構,支持操作系統直接在上面運行,無需進行二進制轉換,減少了相關的性能開銷,極大簡化了VMM的設計,使得VMM性能更加強大。從 2005 年開始,Intel 在其處理器產品線中推廣 Intel Virtualization Technology 即?IntelVT 技術。QEMU-KVM:
其實 QEMU 原本不是 KVM 的一部分,它自己就是一個純軟件實現的虛擬化系統,所以其性能低下。但是,QEMU 代碼中包含整套的虛擬機實現,包括處理器虛擬化,內存虛擬化,以及 KVM需要使用到的虛擬設備模擬(網卡、顯卡、存儲控制器和硬盤等)。
為了簡化代碼,KVM 在 QEMU 的基礎上做了修改。VM 運行期間,QEMU 會通過 KVM 模塊提供的系統調用進入內核,由 KVM 負責將虛擬機置于處理的特殊模式運行。遇到虛機進行 I/O 操作,KVM 會從上次的系統調用出口處返回?QEMU,由 QEMU 來負責解析和模擬這些設備。
從 QEMU 的角度看,也可以說是 QEMU 使用了 KVM 模塊的虛擬化功能,為自己的虛機提供了硬件虛擬化加速。除此以外,虛機的配置和創建、虛機運行說依賴的虛擬設備、虛機運行時的用戶環境和交互,以及一些虛機的特定技術比如動態遷移,都是 QEMU 自己實現的。
KVM:
KVM 內核模塊在運行時按需加載進入內核空間運行。KVM 本身不執行任何設備模擬,需要 QEMU 通過 /dev/kvm 接口設置一個 GUEST OS 的地址空間,向它提供模擬的 I/O 設備,并將它的視頻顯示映射回宿主機的顯示屏。它是KVM 虛機的核心部分,其主要功能是初始化?CPU 硬件,打開虛擬化模式,然后將虛擬客戶機運行在虛擬機模式下,并對虛機的運行提供一定的支持。以在 Intel 上運行為例,KVM 模塊被加載的時候,它:
四 KVM工具集合
Libvirt:簡單說就是 KVM 的管理工具。并且Libvirt 除了能管理 KVM 這種 Hypervisor,還能同時管理 vmware,XEN,Hyper-v, LXC,QEMU 等多種Hypervisor。
Libvirt 本質就是一組API,通常部署完libvirt后,都會包含 3 樣東西:一個API 庫,一個后臺守護進程libvirtd和一個命令行工具virsh。
一:libvirt實現在一臺物理機上同時跑多個虛擬機監控程序vmm
libvirt期初是專門為Xen設計的一種管理API,后來被擴展為可支持多個VMM,libvirt以一組API的形式存在,負責與每個vmm通信,完成API請求?
左圖是沒有引入libvirt時,一臺機器只能運行一個Hypervisor/vmm,右圖是引入了libvirt時,一臺機器可以同時運行多個Hypervisor/vmm,此時需要注意的是,libvirt把物理主機稱作節點,將來賓操作系統(guest os)稱為域Domain,而libvirt及其應用程序在宿主機Domain 0中運行
二 libvirtd提供從遠程應用程序訪問本地域的方式
?
三 libvrt api與相關驅動程序的層次結構。
libvirt 已經為表 1 所列舉出來的的虛擬機監控程序實現了驅動程序。隨著新的虛擬機監控程序在開源社區出現,其他驅動程序無疑也將可用。
?
四 libvirt主要功能總結
ps:libvirt使用 C 語言編寫,可以由 Python,Ruby, Perl, PHP, Java 等語言調用,OpenStack 底層也使用 libvirt。更詳細猛擊這里
?
除此之外還包含下列工具:
virt-v2v:虛機格式遷移工具
virt-* 工具:包括 virt-install(創建KVM虛機的命令行工具),virt-viewer(連接到虛機屏幕的工具),virt-clone(虛機克隆工具),virt-top 等
sVirt:安全工具
?
?
轉載于:https://www.cnblogs.com/luoahong/p/7204677.html
總結
以上是生活随笔為你收集整理的openstack项目【day23】:KVM介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 循环 基本类型
- 下一篇: 行车闭塞