Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1026929
  • 博文数量: 361
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 1759
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-22 23:18
个人简介

学海无涯 个人blog lnmps.com 新站

文章分类

全部博文(361)

文章存档

2017年(1)

2015年(2)

2014年(55)

2013年(303)

分类: 虚拟化

2014-11-07 17:58:32


Author:Tony @瀚海书香

转载请注明出处   http://forever.blog.chinaunix.net


1.   测试环境

PowerEdge C6220 II服务器的一个刀片,64G内存,32CPU

千兆网卡

百兆交换机

Dom0 8G 32vcpu

Dom1 8G 8vcpu

2.   虚拟化的类型

XENKVM实现了真正的虚拟化方案;LXC确切来说应该是资源隔离(namespace),并不能提供完整的物理隔离功能。

XEN虚拟化是相对于KVM来说更加成熟的虚拟化方案,像AWSAzure等公有云都是使用的XEN作为虚拟化方案;而随着最近几年KVM的发展以及KVM较好的性能,国内的部分虚拟化厂商开始选择KVM作为新的虚拟化方案,像百度、Intel中国、阿里云等开始逐步向KVM迁移。

LXC通过资源隔离和命名空间实现了伪虚拟化功能,由于LXC较高的性能和不彻底的隔离,越来越多的应用到私有云上。

3.   磁盘IO性能

3.1     XEN磁盘性能

我们知道XEN 虚机中磁盘操作会经过Dom0来中转,那么中转带来的效率损坏有多少呢?这里测试rawLVM两种情况。

3.1.1  Dom0

3.1.1.1.          随机读

fio -filename=/dev/vg0/root-disk  -direct=1 -iodepth 1 -thread -rw=randread -ioengine=sync -bs=2M -size=50G -numjobs=1 -runtime=60 -group_reporting -name=mytest

3.1.1.2.          随机写


3.1.2  DomU使用LVM

3.1.2.1.          随机读

fio -filename=/dev/xvda1 -direct=1 -iodepth 1 -thread -rw=randread -ioengine=sync -bs=2M -size=50G -numjobs=1 -runtime=60 -group_reporting -name=mytest

3.1.2.2.          随机写

fio -filename=/dev/xvda1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=sync -bs=2M -size=50G -numjobs=1 -runtime=60 -group_reporting -name=mytest

Dom0中随机写性能:

 

3.1.3  DomU使用RAW

3.1.3.1.          随机读

fio -filename=/dev/xvda1 -direct=1 -iodepth 1 -thread -rw=randread -ioengine=sync -bs=2M -size=50G -numjobs=1 -runtime=60 -group_reporting -name=mytest

3.1.3.2.          随机写

fio -filename=/dev/xvda1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=sync -bs=2M -size=50G -numjobs=1 -runtime=60 -group_reporting -name=mytest
 

3.1.4  总结

从测试数据可以看出,LVM DomU相较于Dom0,随机读取的吞吐量、IOPS下降10%,时延增加12%;随机写的的吞吐量、IOPS下降22%,时延增加33%

与之相比RAW的性能下降更加明显。XEN虚拟化环境中采用LVM作为存储方案。

3.2     KVM磁盘性能

KVM的磁盘性能由于受到virtio的影响,每次测试结果偏差较大,不在此罗列。

3.3     LXC磁盘性能

根据LXC实现原理,其磁盘操作性能与物理机一致。

4.   网卡性能

根据前段时间现场出现的问题和提供解决方案后的效果,以及理论数据来看,网卡需要采用pci-passthrough或者SR-IOV的模式。

5.   OS性能

5.1     benchmark测试

采用lmbench对操作系统进行整体性能测试,包括非虚拟化场景、虚拟化Dom0且不绑定CPU场景、虚拟化Dom0绑定CPU场景、虚拟化DomU不绑定CPU场景、虚拟化DomU绑定CPU场景、KVM场景、LXC场景。分别对应physical-hostdom0-nopin---dom0-pin8coredomU-nopin--8domU-pin8corekvm-8core----lxc-32core---

具体测试数据参见附件benchmark-real.result

5.1.1  虚机的系统调用性能下降明显

由于虚机中的系统调用路径边长,XEN系统调用的性能下降明显,KVM由于是内核嵌入式虚拟化,性能明显高于XEN

LXC由于与physical-host一样,使用同一个内核,所以LXC的性能与物理机基本相同。


5.1.2  CPU计算能力无差别

5.1.3  绑定CPU后的内存读写效率较高

绑定CPU后,由于cache命中增多,I/O相关的操作效率明显提升。

5.2     总结

要想获得较好的CPU计算性能,对于关键业务的虚机,需要给虚机绑定CPU,一方面可以防止VCPU漂移导致的缓存失效问题,另一方面可以防止由于VCPU调度不均衡导致的部分物理CPU过载的情况。

5.2.1  Dom0绑定cpu

Dom0负责处理DomU与外设的交互,Dom0的性能直接影响DomU的性能,推荐Dom0vcpu不少于4个。

启动参数中添加“dom0_max_vcpus=4 dom0_vcpus_pin

5.2.2  DomU绑定cpu

DomU中绑定CPU时要尽量将一个虚机的物理CPU放到同一个socket上,提高最后一级cache的命中率,同时也可以降低numa访问不同距离内存带来的负面影响。

对于开启超线程的CPU,一定要将两个逻辑CPU分配给同一个DomU,否则可能会因为CPU内硬件争用导致不同DomU之间互相影响。

查看CPU逻辑拓扑的方法可以通过xm info -n或者在Dom0中取消cpu绑定的情况下,通过hitvsupport中的likwid-topology命令。

DomU中指定CPU的方法如下:

vcpus=8

cpus = ["16","17","18","19","20","21","22","23"]

 

6.   虚拟化安装

6.1     XEN

SLES安装XEN PV内核

6.1.1  安装xendom0

yast2->virtualization->install hypervisor and tools

自动安装xendom0,重启并选择XEN启动项。

安装虚拟机

yast2->virtualization->create virtual machines

根据步骤创建虚拟机,这里创建出来的虚拟机就是domU

6.1.2  常用操作

查看主机上的虚拟机

#xm list

停止虚拟机

#xm destroy virtualname

虚拟机的配置存储在Xend store中,磁盘镜像文件默认存储在/var/lib/xen/images目录下。

导出虚拟机配置

       #xm list -l virtualname > virtualname.cfg

删除一个虚拟机

       #xm delete virtualname

根据配置文件添加一个虚拟机

       #xm new -F virtualname.cfg

虚拟机clone

       #virt-clone -o originalvirutal -n newvirtual -f /var/lib/xen/images/newvirtual.disk

进入虚拟机操作

       #xm console virtualname

       退出时用ctrl+]

保存(暂停)虚拟机

       #virsh save virutalname /var/virtualname.img

恢复虚拟机

       #virsh restore /var/virtualname.img

6.2     KVM

SUSEKVM的安装于XEN类似,可以通过yast2图形化界面安装。

6.3     LXC

6.3.1  LXC环境安装

lxc不支持图形化操作,只能通过命令行进行。

安装lxc相关工具包

#zypper install lxc

lxc依赖内核cgroup,需要设置默认启动

#insserv boot.cgroup

手动启动cgroup

#/etc/init.d/boot.cgroup start

6.3.2  LXC虚机安装

这里以创建一个sles虚机为例讲解虚机的安装过程。

1)编写lxc配置文件,配置文件一般存放在/etc/lxc目录下

#cat /etc/lxc/c2.conf

2)以该配置文件创建一个sles虚机

#lxc-create -t sles -f c2.conf -n c2


本质上进行的操作就是copy一个rootfs到目录/var/lib/lxc目录下

3)启动虚机c2

#lxc-start -n c2

4)进入虚机

#lxc-console -n c2

5)查看虚机状态

#lxc-info -n c2

6)设置虚机可使用的内存

设置C1可以使用的内存为2G

#lxc-cgroup -n c1 memory.limit_in_bytes 2G

设置C1超过使用内存后诱发oom

#lxc-cgropu -n c1 memory.oom_control 0

如果有swap空间,当C1的内存使用2G后会使用swap,直到swap用光才会被kill

如果关闭swap后,当C1的内存使用达到2G,再次申请空间就会被kill

说明:由于memsw control的稳定性问题,sles11sp2默认关闭了对虚机使用memoryswap总和的限制。

7.   总结

三种虚拟化性能比较      LXC>>KVM>>XEN

       由于LXC使用cgroup机制,其性能损坏基本为0

三种虚拟化隔离比较      XEN>>KVM>>LXC

       LXC只能虚拟化linux

三种虚拟化内存利用率 LXC>>KVM>>XEN

       由于LXC共用内核,内存利用率最高;其他两种方案每个虚机都需要单独的操作系统占用一部分内存空间。


阅读(1721) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~