设为首页 收藏本站
查看: 1542|回复: 0

[经验分享] 虚拟化性能分析(XEN/KVM/LXC)

[复制链接]

尚未签到

发表于 2015-12-24 15:42:09 | 显示全部楼层 |阅读模式
  

Author:Tony @瀚海书香
转载请注明出处   http://forever.blog.iyunv.com


1.   测试环境
PowerEdge C6220II服务器的一个刀片,64G内存,32颗CPU。
千兆网卡
百兆交换机
Dom0 8G 32vcpu
Dom1 8G 8vcpu
2.   虚拟化的类型
XEN和KVM实现了真正的虚拟化方案;LXC确切来说应该是资源隔离(namespace),并不能提供完整的物理隔离功能。
XEN虚拟化是相对于KVM来说更加成熟的虚拟化方案,像AWS、Azure等公有云都是使用的XEN作为虚拟化方案;而随着最近几年KVM的发展以及KVM较好的性能,国内的部分虚拟化厂商开始选择KVM作为新的虚拟化方案,像百度、Intel中国、阿里云等开始逐步向KVM迁移。

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

3.   磁盘IO性能
3.1     XEN磁盘性能
我们知道XEN 虚机中磁盘操作会经过Dom0来中转,那么中转带来的效率损坏有多少呢?这里测试raw和LVM两种情况。
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
DSC0000.png

3.1.1.2.          随机写
DSC0001.png
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
DSC0002.png
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
DSC0003.png
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
DSC0004.png
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
DSC0005.png
3.1.4  总结
从测试数据可以看出,LVMDomU相较于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-host、dom0-nopin---、dom0-pin8core、domU-nopin--8、domU-pin8core、kvm-8core----、lxc-32core---。
具体测试数据参见附件benchmark-real.result。
5.1.1  虚机的系统调用性能下降明显
由于虚机中的系统调用路径边长,XEN系统调用的性能下降明显,KVM由于是内核嵌入式虚拟化,性能明显高于XEN。
而LXC由于与physical-host一样,使用同一个内核,所以LXC的性能与物理机基本相同。
DSC0006.png
5.1.2  CPU计算能力无差别
DSC0007.png
5.1.3  绑定CPU后的内存读写效率较高
DSC0008.png DSC0009.png
绑定CPU后,由于cache命中增多,I/O相关的操作效率明显提升。
5.2     总结
要想获得较好的CPU计算性能,对于关键业务的虚机,需要给虚机绑定CPU,一方面可以防止VCPU漂移导致的缓存失效问题,另一方面可以防止由于VCPU调度不均衡导致的部分物理CPU过载的情况。
5.2.1  Dom0绑定cpu
Dom0负责处理DomU与外设的交互,Dom0的性能直接影响DomU的性能,推荐Dom0的vcpu不少于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逻辑拓扑的方法可以通过xminfo -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  安装xen和dom0
  yast2->virtualization->installhypervisor and tools
  自动安装xen和dom0,重启并选择XEN启动项。
  安装虚拟机
  yast2->virtualization->create virtualmachines
  根据步骤创建虚拟机,这里创建出来的虚拟机就是domU
6.1.2  常用操作
  查看主机上的虚拟机
#xm list
  停止虚拟机
#xm destroyvirtualname
虚拟机的配置存储在Xend store中,磁盘镜像文件默认存储在/var/lib/xen/images目录下。
  导出虚拟机配置
         #xmlist -l virtualname > virtualname.cfg
  删除一个虚拟机
         #xmdelete virtualname
  根据配置文件添加一个虚拟机
         #xmnew -F virtualname.cfg
  虚拟机clone
         #virt-clone-o originalvirutal -n newvirtual -f /var/lib/xen/images/newvirtual.disk
  进入虚拟机操作
         #xmconsole virtualname
         退出时用ctrl+]
  保存(暂停)虚拟机
         #virshsave virutalname /var/virtualname.img
  恢复虚拟机
         #virshrestore /var/virtualname.img
6.2     KVM
  在SUSE下KVM的安装于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
DSC00010.png
  (2)以该配置文件创建一个sles虚机
  #lxc-create -t sles -f c2.conf -n c2
DSC00011.png
  本质上进行的操作就是copy一个rootfs到目录/var/lib/lxc目录下
  (3)启动虚机c2
  #lxc-start -n c2
  (4)进入虚机
  #lxc-console -n c2
  (5)查看虚机状态
  #lxc-info -n c2
DSC00012.png
  (6)设置虚机可使用的内存
  设置C1可以使用的内存为2G
  #lxc-cgroup -n c1memory.limit_in_bytes 2G
  设置C1超过使用内存后诱发oom
  #lxc-cgropu -n c1memory.oom_control 0
DSC00013.png
  如果有swap空间,当C1的内存使用2G后会使用swap,直到swap用光才会被kill。
DSC00014.png
  如果关闭swap后,当C1的内存使用达到2G,再次申请空间就会被kill。
DSC00015.png
DSC00016.png
  说明:由于memsw control的稳定性问题,sles11sp2默认关闭了对虚机使用memory和swap总和的限制。
7.   总结
  三种虚拟化性能比较      LXC>>KVM>>XEN
         由于LXC使用cgroup机制,其性能损坏基本为0。
  三种虚拟化隔离比较      XEN>>KVM>>LXC
         LXC只能虚拟化linux。
  三种虚拟化内存利用率 LXC>>KVM>>XEN
         由于LXC共用内核,内存利用率最高;其他两种方案每个虚机都需要单独的操作系统占用一部分内存空间。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-155849-1-1.html 上篇帖子: KVM 安装 下篇帖子: VirtIO与PCI直通可提升KVM虚拟机网络性能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表