天天看點

KVM虛拟化

kvm為2型虛拟化

kvm.ko 負責cpu和記憶體的虛拟化支援(負責cpu、記憶體、中斷控制台、時鐘)

linux核心和qemu負責外設和io的支援(模拟網卡、顯示卡、存儲控制台和硬碟等)

一個 KVM 虛機在主控端中其實是一個 qemu-kvm 程序,與其他 Linux 程序一樣被排程;虛機中的每一個虛拟 vCPU 則對應 qemu-kvm 程序中的一個線程;KVM 需要實作 VA(虛拟記憶體) -> PA(實體記憶體) -> MA(機器記憶體)之間的位址轉換

虛拟化實作方式

純軟體仿真(qemu)

虛拟化翻譯(hypervisor:kvm)

沒有硬體輔助的全虛拟化(基于二進制翻譯的全虛拟化):hypervisor運作在ring0;guest os運作在ring1;guest app運作在ring3;機制:異常、捕獲、翻譯(guest os執行特權指令的時候)

半虛拟化:hypervisor運作在ring0;guest os不能運作在ring0上,需要對kernel進行修改,将運作在ring0上的指令轉為調用hypervisor;guest app運作在ring3上(xen,虛拟機知道自己運作在虛拟化上)

硬體輔助的全虛拟化:Intel VT和AMD-V建立了一個新的ring -1單獨給hypervisor使用;hypervisor運作在ring -1;guest os運作在ring0;guest app運作在ring3(kvm)

容器技術

Storage Pool

KVM 所有可以使用的 Storage Pool 都定義在主控端的 /etc/libvirt/storage 目錄下,每個 Pool 一個 xml 檔案

<code>virsh pool-list --all</code>

<code>virsh pool-define /etc/libvirt/storage/HostVG.xml</code>

<code>virsh pool-start HostVG</code>

virt-install

通過kickstart安裝

<code>virt-install --name=vm --disk path=/vm/vm-disk.qcow2 --vcpus=1 --ram=1024 --network network=default --graphics vnc,listen=0.0.0.0 --os-type=linux --os-variant=rhel6 --location /iso/centos.iso --extra-args="ks=http://xxxx/mini.txt"</code>

通過pxe安裝

<code>virt-install --hvm --connect qemu:///system --network=bridge:br0 --pxe --graphics spice --name=rhel6-machine --ram=1024 --vcpu=2 --disk path=/var/lib/libvirt/images/rhel6.img,size=50</code>

半虛拟化驅動virtio

使用半虛拟化驅動virtio,是為了提高記憶體、硬碟、網絡的性能

沒有virtio的io通路路徑:虛拟機app -&gt; 虛拟機驅動 -&gt; KVM(捕獲)-&gt; QEMU(IO控制器 &amp; 裝置) -&gt; 主控端(裝置驅動) -&gt; 實體機硬體

使用virtio的io通路路徑:虛拟機app -&gt; VirtIO驅動(安裝到虛拟機中) -&gt; 傳輸Transport -&gt; QEMU(VirtIO控制器 &amp; 裝置) -&gt; 主控端(裝置驅動) -&gt; 實體機硬體

安裝方式

紅帽RHEL 4.8之後自動安裝和加載virtio驅動

Windows作業系統需要額外安裝virtio的驅動,可以從社群上擷取,virtio-win:http://www.linux-kvm.org/page/Downloads

Qemu guest agent

如果VM中安裝了guest agent,Host就可以使用libvirt向VM發送指令,例如 當機、釋放檔案系統、虛拟機CPU的熱添加或移除等

RHEL/Centos中安裝包:qemu-guest-agent-xxx.rpm

Windows:在virtio-win中有安裝包

通過libvirt來使用Qemu guest agent(增強功能)

virsh shutdown --mode=agent // 比--mode=acpi更加安全地關閉作業系統

virsh snapshot-create -quiesce // 在建立快照之前将緩存的内容刷入到磁盤

....

KVM

繼續閱讀