virtiofs, 虚拟化的最后一块拼图
坑边闲话:virtiofs 释放了 virtio 思想的潜力,让 host 和 guest 之间共享文件系统成为可能。此前的操作要么依赖网络,要么使用块设备,都算不上很优雅。前者带来了巨大的网络开销,后者不够灵活。virtiofs 可以在一定程度上缓解这个问题。
1. 虚拟化的优化无处不在·
virtio 这个思想在虚拟化里简直就是大杀四方,无往而不利。
最近我也几乎是重写了之前的一篇虚拟化博客,感兴趣的朋友可以看一下,里面总结了我最近几年学习使用虚拟化的一些心得、感想。
2. virtiofs 是什么?·
首先说,这是一个基于 FUSE/Winfsp 的文件系统,也就是说,这个文件系统在用户态实现。
它能做什么呢?简单说来,就是绕过网络协议,直接让 host 将自己的文件系统暴露给 guest,guest 可以直接读写主机的某个文件目录。
这看上去非常不可思议,有点类似容器技术里的路径映射,因为它充分利用了主机和虚拟机的存储相邻特性。
由于使用了 FUSE 协议,因此 virtiofs 天生就是一个客户端/服务器系统,需要在虚拟机里安装一个 fuse 模块外加一个 virtiofs 驱动。
3. 性能如何?·
经过实测,我发现 virtiofs 速度还是挺可以的,至少日常使用不存在性能瓶颈,毕竟也没什么人在虚拟机里跑高性能计算。读 600MB/s 写 1GB/s, 至少对我来说是够用了,而且他的 4K I/O 性能还很不错。
如果使用 ext4 等简单的文件系统,估计性能还能更好一些。
4. 典型应用场景·
virtiofs 的可想象空间非常大,比如远程桌面、虚拟机容器等。
5. 局限性·
由于文件系统很特殊,所以有些服务并不支持 virtiofs,比如 dropbox 的同步目录不能设置为 virtiofs 路径,Dropbox 提示文件系统不受支持。
所以 virtiofs 是一种介于 SMB 共享和 iSCSI 之间的文件协议,它的底层文件系统依然归属于宿主机,而非虚拟机。