qemu-kvm IO优化
Posted li_Jiejun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qemu-kvm IO优化相关的知识,希望对你有一定的参考价值。
主要是磁盘方面的IO资源优化
四个方面去着手优化:
1.磁盘类型选择
2.缓存模式选择
3.AIO 异步读写方式选择
4.磁盘IO调度器选择
1. 磁盘的类型有IDE 、SATA 以及virtio 三种
建议使用 virtio
2. 磁盘缓存模式
目前KVM这块支持5种磁盘缓存模式,writethrough、writeback、none、directsync或者unsafe。一般用到的就是前面3种,后面两种几乎不会使用。
writethrough:(直写模式)数据直接写入磁盘里,不使用缓存;在数据更新时,同时写入缓存Cache和后端存储。此模式的优点是操作简单;缺点是因为数据修改需要同时写入存储,数据写入速度较慢。
writeback:(回写模式)在数据更新时只写入缓存Cache。只在数据被替换出缓存时,被修改的缓存数据才会被写到后端存储。此模式的优点是数据写入速度快,因为不需要写存储;缺点是一旦更新后的数据未被写入存储时出现系统掉电的情况,数据将无法找回。
none:这种模式作用在Guest OS Pagecache和Physical Disk Cache中,相当于虚拟机能直接访问宿主机的磁盘,性能不错!
性能上: writeback > none > writethrough
安全上 :writeback < none < writethrough
3. aio
这块分为两种,一种是native方式,还有一种是thread方式。
Kernel native AIO : Kernel的原生态异步IO实现。
Threaded aio : linux用户空间异步IO的实现,其实它不是真正的异步IO,是通过启动一定数量的 blocking IO线程来模拟异步IO。这种实现有不少缺点,毕竟有不少线程开销,还在改进中。
因此,我们KVM里选择AIO这块选择Kernel的原生态的native更好。
4.调度器
主要是物理机上的调度器选择
目前Linux 磁盘IO调度主要有3种,NOOP ,Deadline ,CFQ
4.1 Deadline I/O scheduler :用过期时间来排序io操作顺序,保证先出现的io请求有最短的延迟时间,相对于写操作,给读操作更优先的级别,是比较好的一个调度模式。特别适合于读取较多的环境(比如数据库,Oracle 10G 之类)。
4.2 NOOP (elevator=noop): 这个调度模式会把所有的数据请求直接合并到一个简单的队列里。在有些SAN 环境下,这个选择可能是最好选择。适用于随机存取设备, 不适合有机械结构的存储器。因为没有优化顺序,会增加额外的寻道时间。属于最简单的一个调度模式,无视io操作优先级和复杂性,执行完一个再执行一个,如果读写操作繁多的话,就会造成效率降低。
4.3 CFQ I/O scheduler:完全公平队列,是anticipatory模式的替代品,没有过多的做预测性调度,而是根据给定的进程io优先级,直接来分配操作的顺序。这个模式在linux上表现良好,但也许并不是最适合android的io调度模式,太强调均衡,而降低了连续读写数据的性能。适用于有大量进程的多用户系统。
Linux默认是deadline,我们可以通过命令 cat /sys/block/sd*/queue/scheduler 查看
如果要更改模式,我们就用:
格式:echo SCHEDULER-NAME > /sys/block/DEVICE-NAME/queue/scheduler
例:echo cfq > /sys/block/sda/queue/scheduler 改成cfq模式
5. vcpu超频
加快虚拟化层的io处理速度
vcpu throttle vcpu默认是0.02ms调度一次,可以修改这个值加快
限制虚拟机的磁盘资源调用,实现每台虚拟机对物理机的磁盘资源使用可控
# virsh blkiotune c7-1 //查看当前虚拟机权重状态
# virsh blkiotune c7-1 --weight 500 //通过命令修改权重为500
以上是关于qemu-kvm IO优化的主要内容,如果未能解决你的问题,请参考以下文章