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

云计算的出现,造成计算任务从本地迁移到了云端,客户端通过网络发起请求,在云计算提供商的数据中心的服务器集群上进行计算,其结果经由网络返回,在客户端进行呈现。新的计算模型的提出,必然伴随着新的问题需要解决,这其中就包括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技术专家。对闪存在虚拟化场景中的优化有深刻理解。

附录:

最新的测试结果截图








  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值