嵌套虛擬化整理

一、關於虛擬化概念

cpu支持虛擬化, 虛擬機軟件(例如kvm)是全虛擬化,僅需要模擬一部分硬件指令,虛機性能更高。

cpu不支持虛擬化, 虛擬機軟件(例如xen)是半全虛擬化,需要模擬全部硬件指令,虛機性能要差些。

半虛擬化(Para-Virtualization),全虛擬化 

1、KVM的虛擬化需要硬件支持(如IntelVT技術或者AMDV技術)。是基於硬件的完全虛擬化。

2、Xen早期則是基於軟件模擬的Para-Virtualization,新版本則是基於硬件支持的完全虛擬化。但Xen本身有自己到進程調度器,存儲管理模塊等,所以代碼較爲龐大。

3、廣爲流傳的商業系統虛擬化軟件VMwareESX系列也是基於軟件模擬的Para-Virtualization。

 

關於KVM:

·        KVM是開源軟件,全稱是kernel-based virtual machine(基於內核的虛擬機)。

·        是x86架構且硬件支持虛擬化技術(如 intel VT 或 AMD-V)的Linux全虛擬化解決方案。

·        它包含一個爲處理器提供底層虛擬化 可加載的核心模塊kvm.ko(kvm-intel.ko或kvm-AMD.ko)。

·        KVM還需要一個經過修改的QEMU軟件(qemu-kvm),作爲虛擬機上層控制和界面。

·        KVM能在不改變linux或windows鏡像的情況下同時運行多個虛擬機,(它的意思是多個虛擬機使用同一鏡像)併爲每一個虛擬機配置個性化硬件環境(網卡、磁盤、圖形適配器……)。

·        在主流的Linux內核,如2.6.20以上的內核均已包含了KVM核心。

二、檢查是否支持KVM

[1] 硬件支持

KVM需要虛擬機宿主(host)的處理器帶有虛擬化支持(對於Intel處理器來說是VT-x,對於AMD處理器來說是AMD-V)。你可以通過以下命令來檢查你的處理器是否支持虛擬化:

$ lscpu

如果你的處理器支持虛擬化,輸出結果中會有一行Virtualization的信息。

你也可以運行:

$ grep -E "(vmx|svm)" --color=always /proc/cpuinfo

如果運行後沒有顯示,那麼你的處理器支持硬件虛擬化,你不能使用KVM

注意: 您可能需要在BIOS中啓用虛擬化支持

 

[2] KVM模塊

如果你的內核是用 CONFIG_IKCONFIG_PROC 這個選項編譯的話,你可以通過以下命令來檢查你的內核是否已經包含了支持虛擬化所必須的模塊(kvmkvm_amdkvm_intel這兩者中的任意一個):

$ zgrep KVM /proc/config.gz

如果模塊設置不等於 ym,則該模塊可用。

三、嵌套虛擬化nested

嵌套虛擬化就是在基於宿主機A搭建的虛擬機B上再跑一個虛擬機C。主要問題在於,虛擬機B是否支持硬件虛擬化,否則KVM無法啓用。

 

[1]方法一

在宿主機A啓用kvm_intel模塊的嵌套虛擬化功能:

# modprobe -r kvm_intel
# modprobe kvm_intel nested=1

使嵌套虛擬化永久生效:

/etc/modprobe.d/modprobe.conf
options kvm_intel nested=1

檢驗嵌套虛擬化功能是否已被激活:

$ systool -m kvm_intel -v | grep nested
    nested              = "Y"

使用以下命令來運行guest虛擬機B

$ qemu-system-x86_64 -enable-kvm -cpu host

啓動虛擬機B並檢查是否有vmx標誌:

$ grep vmx /proc/cpuinfo

 

[2]方法二

要使物理機內核支持nested,第一步需要升級系統內核到Linux 3.X版本,第二步要爲內核添加新的引導參數

默認情況下,系統並不支持nested

#查看當前系統是否支持nested
systool -m kvm_intel -v   | grep -i nested
nested              = "N"
#或者這樣查看
cat /sys/module/kvm_intel/parameters/nested 
N

第一步升級內核,用3.18內核做測試,升級內核很簡單,下載編譯好的內核rpm包,這裏是下載地址,安裝,然後修改grub.conf默認引導內核爲新內核

第二步添加引導參數同樣很簡單,只需要在 kernel 那一行的末端加上 "kvm-intel.nested=1"

 

#升級內核

rpm -ivh kernel-ml-3.18.3-1.el6.elrepo.x86_64.rpm

 

#修改grub.conf

default=0             #使用新內核

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux Server(3.18.3-1.el6.elrepo.x86_64)

    root (hd0,0)

    kernel/vmlinuz-3.18.3-1.el6.elrepo.x86_64 roroot=UUID=9c1afc64-f751-473c-aaa6-9161fff08f6f rd_NO_LUKS rd_NO_LVMLANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcy

rheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgbquiet kvm-intel.nested=1
...

 

上面修改之後,重啓系統,用"uname -r"查看系統內核,並檢查nested是否支持

 

[3]方法三(對於在vmware workstation上的虛擬機)

在workstation上實現嵌套虛擬化,需要編輯虛擬機的vmx文件,添加

vhv.enable= "TRUE"

找到虛擬機安裝文件,帶有.vmx後綴,添加即可。

通過命令行查看,是否包含vmx:

# cat/proc/cpuinfo |grep flags

 

參考鏈接:

https://wiki.archlinux.org/index.php/KVM_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

http://www.cnblogs.com/jython/p/4458807.html?utm_source=tuicool&utm_medium=referral

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章