https://github.com/jusonalien/VM-DB
如果你对 qemu 这个虚拟化平台感兴趣,欢迎关注此项目。
此项目的核心之处就是在 qemu 的块设备驱动上添加一个轻量级的缓存系统,基于基树(Radix-Tree)和双向侵入式链表开发,目前只放出测试代码,核心代码还在优化当中,已经可以保证虚拟机镜像文件的写入语义的正确性了(虚拟机可以准确地运行),文档也只是写的七七八八的,前阵子被其他的项目忙去了,没啥时间料理,这阵子又忙着期末考试,更没时间照料了。打算考完试的时候再去进行疯狂的优化,目前遇到的是块设备上多线程资源争夺的问题,(原先是 64 个线程跑的,被我改成了单线程了-,-)有兴趣的童鞋欢迎一起来 hack !
1
ryd994 2016-01-09 23:21:47 +08:00
全局变量这么多,估计要多线程不容易
注意一下缩进和命名, Sort_dui 也真是 6666 另外,相比 virtio 的缓存,你的优势在哪里(或者说你希望在哪里)? |
2
jusonalien OP @ryd994 更加轻量和专注咯~ 不用经过 host 上的 page cache ,我们打开的时候是用 O_DIRECT 标志位来打开的:)
|
3
ryd994 2016-01-10 00:51:30 +08:00
@jusonalien 这样的话会有重复缓存的问题啊
而且也无法利用 readahead 之类的特性 |
4
jusonalien OP @ryd994 我并未具体研究过 virtio 部分的代码,并且之前也不知道 virtio 有过什么优秀的缓存系统,我们的确是基于 virtio 接口来使用虚拟机的,不过我们基于启动脚本的 cache=none 的这个参数来进行 hack 的,并且也在 qemu 里找到对应的标志位参数的代码,你说的重复缓存的问题或许原本就是存在的,我们只是基于其中的一个缓存系统进行了 hack 而已~ 这里有相关参数的文档 https://www.suse.com/documentation/sles11/book_kvm/data/sect1_1_chapter_book_kvm.html
|
5
ryd994 2016-01-10 11:00:50 +08:00 via Android 2
@jusonalien 如果用 thread based io ,可以 cache= writeback 不过也算不得好
避免重复缓存要让客户机知道“设备”自带缓存,就像真机里系统知道硬盘有缓存一样。 |
6
extreme 2016-01-10 12:29:46 +08:00 1
Brilliant you are.
|