virtio 这个思想在虚拟化里简直就是大杀四方,无往而不利。
最近我也几乎是重写了之前的一片虚拟化博客,感兴趣的朋友可以看一下,里面总结了我最近几年学习使用虚拟化的一些心得、感想。
https://littlenewton.cn/2024/12/tutorial-linux-kvm-configuration/
https://littlenewton.uk/2024/12/tutorial-linux-kvm-configuration/
首先说,这是一个基于 FUSE/Winfsp 的文件系统,也就是说,这个文件系统是在用户态实现的。
它能做什么呢?简单说来,就是绕过网络协议,直接让主机将自己的文件系统暴露给虚拟机,虚拟机可以直接读写主机的某个文件目录。
看上去非常不可思议,这有点类似容器技术里的路径映射。它充分利用了主机和虚拟机的存储相邻特性。
由于使用了 FUSE 协议,因此 virtiofs 天生就是一个客户端服务器系统,需要在虚拟机里安装一个 fuse 模块外加一个 virtiofs 驱动。
经过实测,我发现 virtiofs 速度还是挺可以的,至少日常使用不存在性能瓶颈,毕竟也没什么人在虚拟机里跑高性能计算。读 600MB/s 写 1GB/s, 至少我是够用了。而且 4K 性能还很不错。
如果使用 ext4 等简单的文件系统,估计性能还能更好一些。

virtiofs 的可想象空间非常大,比如远程桌面、虚拟机容器等。


由于文件系统很特殊,所以有些服务并不支持 virtiofs,比如 dropbox 的同步目录不能设置为 virtiofs 路径,Dropbox 提示文件系统不受支持。
所以 virtiofs 是一种介于 SMB 共享和 iSCSI 之间的文件协议,它的底层文件系统依然归属于宿主机,而非虚拟机。