本文主要是介绍kvm 存储栈分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. kvm与qemu的关系 发现好多同学还是不太了解kvm与qemu的关系,首先做个简单的介绍:
- qemu:it is a emulator, 用来仿真cpu,设备,总线等设备
- kvm: it's a kenerl module, 用来处理qemu向内核发起的请求
总结一下: qemu是kvm的客户端展现,kvm是内核为qemu提供的服务代理,用来处理qemu的请求。
2. kvm 存储栈的原理

从上图的storage stack中可以看出有些模块都是double的,比如:
(1)两层file system: guest file system 和 host file system
(2)两层的page cache:guest和host中分别有针对文件的page cache
(3)两层的IO scheduler
鉴于这么多的冗余结构,因此,可以采用适当的优化来提高io的性能。主要的优化方法包括:
(1)采用virtio驱动代替ide驱动
(2)禁用host层的page cache
(3)开启huge page
(4)禁用ksm
3. host层对kvm image文件io的cache方式
kvm通过三个参数来制定host对image文件的io cache方式:none,writeback和writethrough,下图详细的阐述了三种不同的cache方式的区别。

从图中可以清晰的看到,writeback采用了guest和host两层的page cache,也就是说同一个文件会存在两份cache,这基本是没有必要的。none和writethrough都会绕过host层的page cache。kvm默认的cache方式是writethrouh,这种方式不会是最安全的,不会造成数据的不一致性,但是性能也是最差的。综合数据的安全性和性能,建议选择none模式。
但是,随着barrier passing技术的出现,writeback也能保证数据的一致性,所以,如果采用raw格式的image,建议选择none,如果采用qcow2格式的image,建议选择writeback。
这篇关于kvm 存储栈分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!