图12 demo虚拟机配置文件修改前
图13 demo虚拟机配置文件修改后
(8) 挂载大页,然后重新启动libvirtd-bin。
root@xjy-pc:/dev# mount -t hugetlbfs hutetlbfs /dev/hugepages root@xjy-pc:/dev# mount|tail -l ??
hutetlbfs on /dev/hugepages type hugetlbfs (rw) root@xjy-pc:/dev# /etc/init.d/libvirt-bin restart
* Restarting libvirt management daemon /usr/sbin/libvirtd ...done.
(9) 使用“virsh start demo”重新开启虚拟机后查看结果。从以下代码可以看
出,共消耗了520个大页,每个大页默认大小为2M,正好是demo所有的内存。
root@xjy-pc:/dev# cat /proc/meminfo|grep -i HugePage AnonHugePages: 34816 kB HugePages_Total: 2000 HugePages_Free: 1480 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB
(10) 如果关闭demo的话,所有大页将被释放,代码如下:
root@xjy-pc:/dev# virsh shutdown demo
Domain demo is being shutdown
root@xjy-pc:/dev# cat /proc/meminfo|grep -i HugePage AnonHugePages: 34816 kB HugePages_Total: 2000 HugePages_Free: 2000 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB
(11) 另外,透明大页的开启使用命令“echo always >
/sys/kernel/mm/transparent_hugepage/enabled”,关闭使用“echo never >/sys/kernel/mm/transparent_hugepage/enabled”。
KSM技术:
(1) KSM(Kernel SamePage Merging),也叫相同页面内存压缩技术。KSM服务
在Linux系统里默认是开启的,它的作用就是让内存利用的更加高效。内存是分页的,如果多个程序中用的内存都是相同的页面,那么KSM就会把相同的内存合并,这样就能腾出更多的空间。
(2) KSM在系统里有个守护进程ksmd,它的作用就是不断的扫描宿主机的内存情
况,检测有相同的页面就会合并,当然这或多或少会消耗点CPU。查看ksmd进程代码如下:
root@xjy-pc:~# ps aux|grep ksmd|grep -v grep
root 68 0.4 0.0 0 0 ? SN 09:16 0:13 [ksmd]
(3) 如果宿主机的环境,内存资源比较丰富,建议这个功能不开启。如果不够,
又想跑多一点的虚拟机,那么可以打开这个功能,但是一定要清楚,这个是一种内存超用的方案,假如大部分虚拟机内存变化比较频繁(比如内存使用率一下高,一下低),那么不建议开启,因为内存不够时,就会用到SWAP,那么KSM会严重影响虚拟机性能。
(4) 在宿主机KSM服务打开的情况下,如果不想让虚拟机受宿主机KSM的影响,
可以进行如下操作:
编辑虚拟机的XML文件,添加:
这样,KSM就不会去合并这个虚拟机的内存了
6、磁盘I/O优化
(1) I/O调度算法,也叫电梯算法。通常有Noop,Deadline和CFQ几种。Noop
Scheduler是一个简单的FIFO队列,一个最简单的调度算法,由于会产生读I/O的阻塞,一般使用在SSD硬盘,此时不需要调度,I/O效果非常好。Deadline Scheduler是按照截止时间的调度算法,为了防止出现读取被饿死的现象,按照截止时间进行调整,默认的是读期限短于写期限,这样就不会产生饿死的状况。CFQ(Complete Fair Queueing Schedule)是完全公平的
排队的I/O调度算法,保证每个进程相对特别公平的使用I/O。
(2) 查看宿主机Ubuntu14.04支持的调度算法,默认采用Deadline Scheduler,
代码如下:
root@xjy-pc:/dev# dmesg|grep -i \[ 0.378025] io scheduler noop registered
[ 0.378027] io scheduler deadline registered (default) [ 0.378048] io scheduler cfq registered
(3) 临时修改宿主机sda磁盘的I/O调度算法,将deadling修改为CFQ模式,
代码如下:
root@xjy-pc:/dev# cat /sys/block/sda/queue/scheduler noop [deadline] cfq
root@xjy-pc:/dev# echo cfq > /sys/block/sda/queue/scheduler root@xjy-pc:/dev# cat /sys/block/sda/queue/scheduler noop deadline [cfq]
(4) 虚拟机的磁盘只不过是宿主机的一个文件,所以其I/O调度并无太大意义,反
而会影响I/O效率,所以可以通过将客户机的I/O调度策略设置为NOOP来提高性能。NOOP就是一个FIFO队列,不做I/O调度。
五、实验代码
无
虚拟化技术
案例二、虚拟机迁移
一、实验目的
(1) 掌握虚拟机迁移的概念。
(2) 掌握虚拟机的静态迁移方式和动态迁移方式。 (3) 掌握NFS服务器的配置和使用。
二、实验原理
静态迁移是指在虚拟机关闭或暂停的情况下,将源宿主机上虚拟机的磁盘文件和配置文件拷贝到目标宿主机上。这种方式需要显式的停止虚拟机运行,对服务可用性要求高的需求不合适。
动态迁移无需拷贝虚拟机配置文件和磁盘文件,但是需要迁移的主机之间有相同的目录结构放置虚拟机磁盘文件,可以通过多种方式实现,本例采用基于共享存储动态迁移,通过NFS来实现。
三、实验环境
服务器操作系统:Ubuntu14.04版本。
源宿主机为节点1,主机名xjy-pc,桥接IP为192.168.10.221,NFS挂载目录/home/kvm。
目标宿主机为节点2,主机名为lib,桥接IP为192.168.10.215,NFS挂载目录/home/kvm。
静态迁移测试虚拟机:demo,IP为192.168.10.210,虚拟磁盘文件为ubuntu.raw。
动态迁移测试虚拟机:demo3,IP为192.168.10.210,虚拟磁盘文件为ubuntu.raw。
NFS服务器:操作系统版本:OEL5.8x64,桥接IP为192.168.10.161,服务目录为/mnt/vg/。
四、实验内容及步骤
1、虚拟机静态迁移
(1) 静态迁移也叫做常规迁移、离线迁移(Offline Migration)。是在虚拟机
关机或暂停的情况下,拷贝虚拟机磁盘文件与配置文件到目标虚拟主机中,实现的从一台物理机到另一台物理机的迁移。因为虚拟机的文件系统建立在
虚拟机镜像文件上面,所以在虚拟机关机的情况下,只需要简单的迁移虚拟机镜像和相应的配置文件到另外一台物理主机上即可。如果需要保存虚拟机迁移之前的状态,那么应该在迁移之前将虚拟机暂停,然后拷贝状态至目的主机,最后在目的主机重建虚拟机状态,恢复执行。这种方式的迁移过程需要显式的停止虚拟机的运行。从用户角度看,有明确的一段停机时间,虚拟机上的服务不可用。这种迁移方式简单易行,适用于对服务可用性要求不严格的场合。
(2) 在节点1上进行操作,首先确定demo虚拟机状态为关闭,如图1所示。
图1 查看虚拟机状态
(3) 准备迁移demo虚拟机,使用命令“virsh domblklist demo”查看demo虚
拟机的磁盘文件,如图2所示。
图2虚拟机的磁盘文件
(4) 导出虚拟机配置文件,如图3所示。
图3 导入虚拟机配置文件
(5) 拷贝配置文件到目标宿主机上,目标宿主机IP地址为192.168.10.215。如
图4所示。
图4 拷贝配置文件