LWN: 虚拟机环境专用的文件系统

栏目: 后端 · 发布时间: 5年前

内容简介:全文完极度欢迎将文章分享到朋友圈长按下面二维码关注:Linux News搬运工,希望每周的深度文章以及开源社区的各种新近言论,能够让大家满意~

A filesystem for virtualization

By Jake Edge , May 14, 2019

LSFMM

2019 Linux Storage, Filesystem, and Memory-Management Summit会议中,Miklos Szeredi这边介绍了一个专用于虚拟机环境的文件系统,virtio-fs,想方便多个KVM guest共同使用host的文件系统。现有的类似方案都是基于Plan 9系统的9P filesystem,有一些局限。而virtio-fs是基于Filesystem in Userspace (FUSE) 实现的一个原型设计。

目前的基于9P的filesystem,没有本地文件系统的操作接口,也有些慢。而FUSE-based virtio-fs表现的更加优秀。这个新文件系统的一个核心目标是能够让host和guest共享page cache,这样多个guest os里面如果都是访问host filesystem的同一个文件的时候,就不会有重复很多份数据。

这个工作不是那么简单,Metadata cache(文件附属信息缓存)和directory entry cache (dcache,目录节点缓存)不能共享使用,因为host和guest的数据结构无法共享。有两个方法可以处理这个问题,要么每次访问都走完整流程(从guest调用到host)来确保metadata cache和dcache的一致性,要么就让guest OS能够自己缓存一份信息,然后每次操作的时候能想办法不通过host kernel就确认cache数据的有效性。

LWN: 虚拟机环境专用的文件系统

最好的方案是什么呢?他举了一个例子,如果host上某个文件被改动了,文件的修改时间这个属性就会被更新,而guest系统里的stat()操作应该要反映出这个更新。有很多讨论关于如何实现host kernel到guest的通知机制,可以通过内存里面的一个ring buffer来实现这个通知。如果guest有了一个inode的cache,就需要能告知host后续这个inode有什么变化了别忘了通知guest。后面收到通知的时候,guest会重新更新它本地的cache。当ring buffer溢出的时候(出于某些异常情况),guest就需要重新更新它这里的所有cache。

Amir Goldstein问,这个机制是否也能用于Samba文件系统来实现dcache功能。Trond Myklebust指出Szeredi提出的方案是一个异步通知机制,而Samba需要的是一个同步通知机制。Szeredi认为,如果用同步通知机制的话,guest会阻塞host kernel的执行,这个情况需要尽量避免。

关于POSIX locking也会有问题。实现成user-space filesystem的话,很难支持POSIX locking,因此跟host filesystem难于保持一致性。kernel的NFS server (knfsd) 利用了kernel内部的函数来实现锁,但是user-space NFS server不知道是怎么实现的。

Myklebust说,传统方法是实现一个user-space lock manager来管理标准的POSIX lock。Szeredi问道,如果加一个kernel interface来把knfsd所用的locking接口暴露出来,这个主意怎么样?Boaz Harrosh指出Ganesha NFS server也有类似的问题,它最后用open file description locks (OFD locks)来实现了,也就是把锁放在struct file里面,这样多个线程就可以正常保证互斥了,跟POSIX lock实现方式不一样。

Szeredi说他希望让POSIX lock能保证guest和host互斥。Steve French提醒Samba也用了OFD locks,建议virtio-fs也用这个方案。因为这样有更简单的语法,不用担心文件关闭的时候处理不好互斥问题。OFD locks也最近加入了NFS。Szeredi总结了大家的意见,看起来没有必要去把kernel的POSIX lock相关接口暴露出来。

还需要注意ctime和mtime这些文件时间戳。他们记录了文件最后一次metadata update (ctime)以及最后一次文件内容的update(mtime)。如果文件写入操作实际上是写入shared page cache(就是guest和host共享的page cache),就会导致host filesystem里的timestamp更新,不过有时候又不会更新,这样会跟guest的metadata cache不一致。

他的想法是在open()函数里加一个flag,能够关闭对这些时间戳的更新功能,这样就能部分解决这个问题。XFS就有一个类似的flag,不过没有给user space这边暴露出来,所以user space无法用。不过这类flag一般都会有一些安全方面的担心。Goldstein觉得这个flag应该是XFS的Data Management API (DMAPI)功能引入的,这样就能够修改文件而不会影响timestamp。不过XFS的DMAPI已经宣告废弃了,可能这就是flag没有对外暴露出来的。

Myklebust有点担心有这个flag的话,会有可能让人们都发现不了某个文件的内容最近被改动过。这也是为什么POSIX标准里面没有这样一个flag,所以上述问题的正式解决方案应该是在inode里面实现一个version信息。

全文完

极度欢迎将文章分享到朋友圈 

长按下面二维码关注:Linux News搬运工,希望每周的深度文章以及开源社区的各种新近言论,能够让大家满意~

LWN: 虚拟机环境专用的文件系统


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Smashing Book

The Smashing Book

Jacob Gube、Dmitry Fadeev、Chris Spooner、Darius A Monsef IV、Alessandro Cattaneo、Steven Snell、David Leggett、Andrew Maier、Kayla Knight、Yves Peters、René Schmidt、Smashing Magazine editorial team、Vitaly Friedman、Sven Lennartz / 2009 / $ 29.90 / € 23.90

The Smashing Book is a printed book about best practices in modern Web design. The book shares technical tips and best practices on coding, usability and optimization and explores how to create succes......一起来看看 《The Smashing Book》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具