KVM虚拟化之嵌套虚拟化nested
本文测试物理机为centos6.5
物理机使用Intel-V虚拟化架构,安装qemu-kvm版本0.12
我们知道,在Intel处理器上,KVM使用Intel的vmx(virtul machine eXtensions)来提高虚拟机性能, 即硬件辅助虚拟化技术, 现在如果我们需要测试一个openstack集群,又或者单纯的需要多台具备"vmx"支持的主机, 但是又没有太多物理服务器可使用, 如果我们的虚拟机能够和物理机一样支持"vmx",那么问题就解决了,而正常情况下,一台虚拟机无法使自己成为一个hypervisors并在其上再次安装虚拟机,因为这些虚拟机并不支持"vmx"
嵌套式虚拟nested是一个可通过内核参数来启用的功能。它能够使一台虚拟机具有物理机CPU特性,支持vmx或者svm(AMD)硬件虚拟化,关于nested的具体介绍,可以看这里
1.首先查看一台普通的KVM虚拟机CPU信息
[root@localhost ~]# lscpu
Architecture: x86_64
...
Vendor ID: GenuineIntel
Hypervisor vendor: KVM
Virtualization type: full
... [root@localhost ~]# cat /pro/cpuinfo
processor :
vendor_id : GenuineIntel
cpu family :
model :
model name : QEMU Virtual CPU version (cpu64-rhel6)
...
flags : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm unfair_spinlock pni cx16 hypervisor lahf_lm
可以看到,这个虚拟机使用为全虚拟化,使用的CPU为QEMU模拟出来的CPU,并且不支持硬件虚拟化(flags中没有vmx)
2.物理服务器上开启nested支持
要使物理机内核支持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.-.el6.elrepo.x86_64.rpm #修改grub.conf
default=0 #使用新内核
timeout=
splashimage=(hd0,)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (3.18.-.el6.elrepo.x86_64)
root (hd0,)
kernel /vmlinuz-3.18.-.el6.elrepo.x86_64 ro root=UUID=9c1afc64-f751-473c-aaa6-9161fff08f6f rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF- rd_NO_MD SYSFONT=latarcy
rheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet kvm-intel.nested=1
...
上面修改之后,重启系统,用"uname -r"查看系统内核,并检查nested是否支持
3. 建立一台支持"vmx"的虚拟机
如果你使用libvirt管理虚拟机,需要修改虚拟机xml文件中CPU的定义,下面三种定义都可以
#可以使用这种
<cpu mode='custom' match='exact'>
<model fallback='allow'>core2duo</model>
<feature policy='require' name='vmx'/>
</cpu>
#这种方式为虚拟机定义需要模拟的CPU类型"core2duo",并且为虚拟机添加"vmx"特性
#也可以使用这种
<cpu mode='host-model'>
<model fallback='allow'/>
</cpu>
#或者这样
<cpu mode='host-passthrough'>
<topology sockets='2' cores='2' threads='2'/>
</cpu>
#CPU穿透,在虚拟机中看到的vcpu将会与物理机的CPU同样配置,这种方式缺点在于如果要对虚拟机迁移,迁移的目的服务器硬件配置必须与当前物理机一样
如果你使用qemu-kvm命令行启动虚拟机,那么可以简单的添加
-enable-kvm -cpu qemu64,+vmx
#设置虚拟机CPU为qemu64型号,添加vmx支持
然后启动虚拟机,查看配置
#下面虚拟机CPU定义为"host-model"
cat /proc/cpuinfo
processor :
vendor_id : GenuineIntel
cpu family :
model :
model name : Intel Core i7 9xx (Nehalem Class Core i7)
...
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc unfair_spinlock pni vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic
...
本文出自http://www.cnblogs.com/jython/p/4458807.html,转载请注明出处
参考文章
http://kashyapc.com/2012/01/14/nested-virtualization-with-kvm-intel/
http://networkstatic.net/nested-kvm-hypervisor-support/
KVM虚拟化之嵌套虚拟化nested的更多相关文章
- 在 Centos7 的KVM上启用嵌套虚拟化
1.嵌套虚拟化意味着在虚拟机内配置虚拟化环境.换句话说,我们可以说嵌套虚拟化是虚拟机管理程序hypervisor的一个特性,它允许我们通过虚拟化管理程序(宿主机)的硬件加速在虚拟服务器内安装和运行虚拟 ...
- VMware虚拟机配置嵌套虚拟化
VMware虚拟机下创建kvm-sever,server下继续创建kvm虚拟机(嵌套虚拟化),返回libvirt错误解决办法:SSH连接VMwarevi /etc/vmware/config增加一行设 ...
- KVM嵌套虚拟化
1. 检查环境 $ grep -E 'svm|vmx' /proc/cpuinfo ~]# lsmod | grep kvm kvm_intel 170181 0 kvm ...
- KVM硬件辅助虚拟化之 EPT in Nested Virtualization
在嵌套虚拟环境(Nested Virtualization)下,执行在hypervisor上的Virtual Machine仍能够作为hypervisor去执行其他的Virutal Machine,而 ...
- KVM虚拟机嵌套虚拟化
KVM虚拟机嵌套虚拟化 背景介绍 在Arch linux的 KVM 虚拟机上启动来部署开源Iaas系统zstack时,需要开启虚拟机嵌套虚拟化. 解决 KVM 嵌套式虚拟 Nested 是一个 ...
- [ kvm ] 嵌套虚拟化
1. 前言 在学习 kvm 的过程中,需要在虚拟机中再次开启虚拟机,这里就需要使用到嵌套虚拟化,做个记录吧. 2. 配置嵌套虚拟化 2.1 查看物理机是否支持嵌套虚拟化 cat /sys/module ...
- KVM 开启嵌套虚拟化
问题 在 CentOS KVM 上启动虚拟机来部署 OpenStack 测试环境,在启动具有 CPU 绑定.NUMA 亲和的虚拟机时触发错误: libvirtError: Requested oper ...
- 由CloudStack项目引起的ESXI嵌套虚拟化引起的二级虚拟机无法被访问
关于这个问题,主要以文字描述为主,最终解决方法其实就一个步骤. 问题描述: 某客户需要部署某企业的云平台,但是由于年前没有足够的物理机资源,所以提供的资源均为虚拟机,现在让我们做技术评估. 其实观察整 ...
- KVM 介绍(3):I/O 全虚拟化和准虚拟化 [KVM I/O QEMU Full-Virtualizaiton Para-virtualization]
学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...
随机推荐
- Python爬虫笔记安装篇
目录 爬虫三步 请求库 Requests:阻塞式请求库 Requests是什么 Requests安装 selenium:浏览器自动化测试 selenium安装 PhantomJS:隐藏浏览器窗口 Ph ...
- UIView的intrinsicContentSize方法,在按钮中重写
场景,一个有图片有文字的按钮在其父控件上加了上左的约束,然后,有需要要调整按钮与图片之间的间距,第一想法就是设置title insets 的left. 然后问题出现了,这个按钮的文字居然显示不全了,也 ...
- 多个进程间通信之Queue
多个进程间通信之Queue 实现数据传递 #!coding:utf-8 from multiprocessing import Process, Queue import os,time,random ...
- C++ ActiveX开发的问题讨论
最近在一个项目中需要开发一个ocx插件,在开发过程中发现了一些问题,所以在此记录一下. 我想讨论的主要是函数的参数问题,我分别使用c++,JavaScript,C#对ocx插件做了测试,发现不同的参数 ...
- Django文档阅读之查询
创建对象 为了在Python对象中表示数据库表数据,Django使用直观的系统:模型类表示数据库表,该类的实例表示数据库表中的特定记录. 要创建对象,请使用模型类的关键字参数对其进行实例化,然后调用s ...
- mac自带ssh在哪
打开Finder,前往> 前往文件夹,输入 ~/.ssh 回车就到ssh目录了. 点击Mac顶部菜单-->“苹果”图标-->最近使用的项目-->终端--输入 open ~/.s ...
- npm,umi,yarn
npm 是什么? npm 为你和你的团队打开了连接整个 JavaScript 天才世界的一扇大门.它是世界上最大的软件注册表,每星期大约有 30 亿次的下载量,包含超过 600000 个 包(pack ...
- EditPlus配置ftp连接linux
选择文件/FTP下面的设置FTP服务器 1.点击添加 2.填写名称.ftp服务器.用户名.密码信息 3.点击高级设置 4.选择加密方式为sftp,端口22,如果不填端口号,默认也是22,确定 5.确定 ...
- 第二篇:彻底搞清楚 Spring Boot 的配置文件 application.properties
前言 在Spring Boot中,配置文件有两种不同的格式,一个是properties,另一个是yaml. 虽然properties文件比较常见,但是相对于properties而言,yaml更加简洁明 ...
- session知识点小结
Session: 1. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象HttpSession中. 2. 快速入门: 1. 获取HttpSession对象: Http ...