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

[经验分享] PCIe SSD在KVM场景中的应用及优化实践

[复制链接]

尚未签到

发表于 2015-10-10 13:37:51 | 显示全部楼层 |阅读模式
  云计算的出现,造成计算任务从本地迁移到了云端,客户端通过网络发起请求,在云计算提供商的数据中心的服务器集群上进行计算,其结果经由网络返回,在客户端进行呈现。新的计算模型的提出,必然伴随着新的问题需要解决,这其中就包括I/O瓶颈的问题。
  部署闪存明显是解决数据中心存储瓶颈的一个重要手段,特别是PCIe SSD,对数据中心性能的提升是立竿见影的。本文以KVM架构为例,对闪存在虚拟化环境中的优化和实践做个介绍。
  KVM(Kernel-basedVirtual Machine,基于Linux内核的虚拟机)是开源的Linux全虚拟化解决方案,目前支持X86架构下的Intel VT及AMD-V硬件虚拟化技术。使用KVM,一台主机能运行使用不经修改的Linux或Windows镜像的多个虚拟机,每一个虚拟机使用其自己的虚拟硬件(网卡、磁盘、图形适配器等)。比较典型的KVM架构如图1所示:
DSC0000.jpg

  
图1:KVM虚拟化架构

KVM传统的方式是使用QEMU来模拟I/O设备,其优点是可以通过软件模拟出各种各样的硬件设备,包括一些不常用的或者很老的经典设备。而且对硬件平台依赖性低,不需要宿主机和客户机额外的支持,兼容性好。这种方式的缺点是每次I/O操作的路径比较长,需要多次上下文切换多次数据复制,因此性能较差。

  相比QEMU,Virtio路径更短而且更加灵活,进而成为当下最佳的KVM方案。virtio是一个在Hypervisor之上的抽象API接口,让客户机能够感知到自己所处的虚拟化环境,进而根据Virtio标准与Hypervisor协作,使客户机I/O设备达到更好的性能。典型的Virtio框架如图2所示:
DSC0001.jpg

图2:Virtio框架

  通过Virtio可以获得很好的性能,几乎可以达到与原生系统差不多的I/O性能。
  Virtio设备中,由于virtio设备以img文件存放在宿主机,同时因为闪存和磁盘I/O访问方式不同,Linux下常用的I/O调度算法对闪存来说并不是最优化的。针对virtio设备,提供了几条相关参数优化方法,对虚拟机I/O性能有所提升。
  1、 QEMU/KVM存储池所在设备驱动I/O调度算法需要修改为noop,以本文档/dev/memdiska设备为例:
DSC0002.jpg

  
  2、  对闪存卡的I/O访问进行cpu绑定,绑定方法如下:
  a)/etc/init.d/irqbalancestop,首先停止irqbalance
  b)cat/proc/cpuinfo  | grep 'physical id' ,找出每个逻辑cpu的物理ID
  c)cat/proc/cpuinfo  | grep 'core id' ,  找出每个逻辑cpu的coreID
  本文档涉及测试服务器经查看为2路服务器,共有processor40个(0~39):其中processor0,1,20,21的core id为 1,processor0,20 的physical id为0,processor1,21的physical id为1;其他processor依次类推
  d)cat  /proc/interrupts  | grep mem,查看中断使用情况;
  以本次使用测试为例:经查看中断号为114~177
  e)将中断前一半绑定processor0,后一半绑定processor2,即绑定同一个physicalid的不同processor。在本次测试中前一半绑定processor0,后一半绑定processor2
  echo  "1" > /proc/irq/114/smp_affinity
  ……
  echo  "1" > /proc/irq/145/smp_affinity
  echo  "4" > /proc/irq/146/smp_affinity
  ……
  echo  "4" > /proc/irq/177/smp_affinity
  f)将pb相关的进程绑定与中断绑定的processor同physical id的其他processor
  ps -aux| grep pb
  taskset  –pc 4 ****(为进程号),在本次测试中绑定processor4
  g)将qemu-kvm及其virtio命令运行于与上述绑定的cpu同physical id但是不同core id的其他processor上
  3、  虚拟I/O设备的img文件为raw格式,qcow2格式的性能不如raw,并且在添加I/O设备时选择“StorageFormat”为raw。
  
  应用了Memblaze Pblaze3在KVM下的解决方,最终一块2TB的Pblaze3闪存加速卡性能表现如下:
  
测试性能对比 

12vm性 能总和

带 宽

IOPS

Read4k_rand

2.19GB/s

561873

Write4k_rand

271MKB/s

67875

Read64k_seq

2.16GKB/s

33704

Write64_seq

1.04GB/s

16342

  
  可以看到一块Pblaze3可以在单一节点上支撑12台虚机达到接近44万的4k随机读,6.8万的4k随机写性能。连续读写带宽也达到了读2.16GB/s,写1.04GB/s的性能。
  本文作者:王玮,Memblaze工程师,KVM技术专家。对闪存在虚拟化场景中的优化有深刻理解。
附录:  最新的测试结果截图
DSC0003.jpg

  

DSC0004.jpg

DSC0005.jpg

DSC0006.jpg

  

DSC0007.jpg

         版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 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-125139-1-1.html 上篇帖子: qemu-kvm 中断虚拟化 下篇帖子: kvm trace performance events
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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