安利一波自己开发的 qemu 虚拟化平台下的块设备的缓存系统

2016-01-09 22:44:50 +08:00
 jusonalien

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

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

3695 次点击
所在节点    Linux
6 条回复
ryd994
2016-01-09 23:21:47 +08:00
全局变量这么多,估计要多线程不容易
注意一下缩进和命名, Sort_dui 也真是 6666
另外,相比 virtio 的缓存,你的优势在哪里(或者说你希望在哪里)?
jusonalien
2016-01-09 23:38:16 +08:00
@ryd994 更加轻量和专注咯~ 不用经过 host 上的 page cache ,我们打开的时候是用 O_DIRECT 标志位来打开的:)
ryd994
2016-01-10 00:51:30 +08:00
@jusonalien 这样的话会有重复缓存的问题啊
而且也无法利用 readahead 之类的特性
jusonalien
2016-01-10 10:48:50 +08:00
@ryd994 我并未具体研究过 virtio 部分的代码,并且之前也不知道 virtio 有过什么优秀的缓存系统,我们的确是基于 virtio 接口来使用虚拟机的,不过我们基于启动脚本的 cache=none 的这个参数来进行 hack 的,并且也在 qemu 里找到对应的标志位参数的代码,你说的重复缓存的问题或许原本就是存在的,我们只是基于其中的一个缓存系统进行了 hack 而已~ 这里有相关参数的文档 https://www.suse.com/documentation/sles11/book_kvm/data/sect1_1_chapter_book_kvm.html
ryd994
2016-01-10 11:00:50 +08:00
@jusonalien 如果用 thread based io ,可以 cache= writeback 不过也算不得好
避免重复缓存要让客户机知道“设备”自带缓存,就像真机里系统知道硬盘有缓存一样。
extreme
2016-01-10 12:29:46 +08:00
Brilliant you are.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/249589

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX