【实践】PCIe SSD在KVM场景中的应用及优化实践

  • zhupengbo
  • 2015-07-29 10:04:51
  • 王玮 Memblaze

[导读]Virtio是当下最佳KVM方案,由于virtio设备以img文件存放在宿主机,同时因为闪存和磁盘I O访问方式不同,Linux下常用的I O调度算法对闪存来说并不是最优化的。针对virtio设备,这里提供了几条相关参数优化方法,可以对虚拟机I O性能有所提升。

云计算的出现,造成计算任务从本地迁移到了云端,客户端通过网络发起请求,在云计算提供商的数据中心的服务器集群上进行计算,其结果经由网络返回,在客户端进行呈现。新的计算模型的提出,必然伴随着新的问题需要解决,这其中就包括I/O瓶颈的问题。

部署闪存明显是解决数据中心存储瓶颈的一个重要手段,特别是PCIe SSD,对数据中心性能的提升是立竿见影的。本文以KVM架构为例,对闪存在虚拟化环境中的优化和实践做个介绍。

KVM是什么

KVM(Kernel-based Virtual Machine,基于Linux内核的虚拟机)是开源的Linux全虚拟化解决方案,目前支持X86架构下的Intel VT及AMD-V硬件虚拟化技术。使用KVM,一台主机能运行使用不经修改的Linux或Windows镜像的多个虚拟机,每一个虚拟机使用其自己的虚拟硬件(网卡、磁盘、图形适配器等)。比较典型的KVM架构如图1所示:

\

 

图1:KVM虚拟化架构

Virtio是最佳KVM方案

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

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

\

 

图2:Virtio框架

通过Virtio可以获得很好的性能,几乎可以达到与原生系统差不多的I/O性能。

Virtio设备的参数优化

Virtio设备中,由于virtio设备以img文件存放在宿主机,同时因为闪存和磁盘I/O访问方式不同,Linux下常用的I/O调度算法对闪存来说并不是最优化的。针对virtio设备,提供了几条相关参数优化方法,对虚拟机I/O性能有所提升。

1、 QEMU/KVM存储池所在设备驱动I/O调度算法需要修改为noop,以本文档/dev/memdiska设备为例:

\

 

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

进程绑定与中断绑定的processor同physical id的其他processorps -aux| grep pbtaskset –pc 4 ****(为进程号),在本次测试中绑定processor4

g.将qemu-kvm及其virtio命令运行于与上述绑定的cpu同physical id但是不同core id的其他processor上

3、 虚拟I/O设备的img文件为raw格式,qcow2格式的性能不如raw,并且在添加I/O设备时选择“StorageFormat”为raw。

在某KMV实际应用案例在部署Memblaze PBlaze3之后,一块2TB的Pblaze3闪存加速卡性能表现如下:

\

 

可以看到一块PBlaze3可以在单一节点上支撑12台虚机达到接近44万IOPS的4k随机读,6.8万IOPS的4k随机写性能。连续读写带宽也达到了读2.16GB/s,写1.04GB/s的性能。

本文作者:王玮,Memblaze系统工程师。长期跟踪于互联网及超大规模数据中心、云服务提供商等企业级客户,并为其提供闪存部署、维护、调优和升级的技术服务。对闪存 在数据中心的应用、维护和性能调优有丰富的实践经验,同时也对数据中心架构的演进、KVM等虚拟化技术有着深刻的理解和独到见解。

热点文章

精彩专题

微信公众平台:搜索"doitmedia"
或扫描下面的二维码:


  1. 公司简介 | 媒体优势 | 广告服务 | 客户寄语 | DOIT历程 | 诚聘英才 | 联系我们 | 会员注册 | 订阅中心
  2. Copyright © 2013 DOIT Media, All rights Reserved. 百易传媒 版权所有.
  3. 电信与信息服务业经营许可证:030972号 电信业务审批 [2009]字第572号
  4. 京ICP备13004627号-3   京公网安备: 110105001105