技术解析

安利一波自己开发的 qemu 虚拟化平台下的块设备的缓存系统
0
2021-07-05 02:16:51
idczone

https://github.com/jusonalien/VM-DB

如果你对 qemu 这个虚拟化平台感兴趣,欢迎关注此项目。
此项目的核心之处就是在 qemu 的块设备驱动上添加一个轻量级的缓存系统,基于基树(Radix-Tree)和双向侵入式链表开发,目前只放出测试代码,核心代码还在优化当中,已经可以保证虚拟机镜像文件的写入语义的正确性了(虚拟机可以准确地运行),文档也只是写的七七八八的,前阵子被其他的项目忙去了,没啥时间料理,这阵子又忙着期末考试,更没时间照料了。打算考完试的时候再去进行疯狂的优化,目前遇到的是块设备上多线程资源争夺的问题,(原先是 64 个线程跑的,被我改成了单线程了-,-)有兴趣的童鞋欢迎一起来 hack !


全局变量这么多,估计要多线程不容易
注意一下缩进和命名, Sort_dui 也真是 6666
另外,相比 virtio 的缓存,你的优势在哪里(或者说你希望在哪里)?

更加轻量和专注咯~ 不用经过 host 上的 page cache ,我们打开的时候是用 O_DIRECT 标志位来打开的:)

这样的话会有重复缓存的问题啊
而且也无法利用 readahead 之类的特性

我并未具体研究过 virtio 部分的代码,并且之前也不知道 virtio 有过什么优秀的缓存系统,我们的确是基于 virtio 接口来使用虚拟机的,不过我们基于启动脚本的 cache=none 的这个参数来进行 hack 的,并且也在 qemu 里找到对应的标志位参数的代码,你说的重复缓存的问题或许原本就是存在的,我们只是基于其中的一个缓存系统进行了 hack 而已~ 这里有相关参数的文档 https://www.suse.com/documentation/sles11/book_kvm/data/sect1_1_chapter_book_kvm.html

如果用 thread based io ,可以 cache= writeback 不过也算不得好
避免重复缓存要让客户机知道“设备”自带缓存,就像真机里系统知道硬盘有缓存一样。

Brilliant you are.

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服