云计算的出现,造成计算任务从本地迁移到了云端,客户端通过网络发起请求,在云计算提供商的数据中心的服务器集群上进行计算,其结果经由网络返回,在客户端进行呈现。新的计算模型的提出,必然伴随着新的问题需要解决,这其中就包括I/O瓶颈的问题。
部署闪存明显是解决数据中心存储瓶颈的一个重要手段,特别是PCIe SSD,对数据中心性能的提升是立竿见影的。本文以KVM架构为例,对闪存在虚拟化环境中的优化和实践做个介绍。
KVM(Kernel-basedVirtual Machine,基于Linux内核的虚拟机)是开源的Linux全虚拟化解决方案,目前支持X86架构下的Intel VT及AMD-V硬件虚拟化技术。使用KVM,一台主机能运行使用不经修改的Linux或Windows镜像的多个虚拟机,每一个虚拟机使用其自己的虚拟硬件(网卡、磁盘、图形适配器等)。比较典型的KVM架构如图1所示:
图1: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设备以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
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技术专家。对闪存在虚拟化场景中的优化有深刻理解。
附录: 最新的测试结果截图
版权声明:本文为博主原创文章,未经博主允许不得转载。 |