使用 FUSE 传递到 tmpfs + swap 时延迟较高

使用 FUSE 传递到 tmpfs + swap 时延迟较高

我正在内存文件系统 (tmpfs) 上创建一个垫片层,以便我可以拦截文件系统命令并进行额外处理(最终目标是通过网络复制写入以实现容错)。为了拦截文件系统命令,我使用了 FUSE。对于内存文件系统,我使用了 tmpfs。为了克服内存大小小问题,我在 SSD 上创建了足够的交换空间供 tmpfs 使用。

总而言之,我有一个dir使用 tmpfs 挂载的目录。我创建了另一个目录shim,所有应用程序都会写入该目录。FUSE 挂载在该目录上shim,并将所有操作重定向到该目录dir

通过对 Filebench 直接写入进行一些微基准测试dir,我发现 tmpfs + swap 具有超低延迟,尤其是与磁盘上的 ext4 相比时。当 tmpfs 从写入 RAM 切换到写入交换空间时,没有明显的减速,我猜是因为一些巧妙的预读。

当我用 FUSE 覆盖它时直通_hp.c但是,即使启用了多线程,文件创建也会变得非常慢,延迟比 tmpfs + swap 高出约 60 倍。使用时htop,我注意到它只有在写入交换而不是内存时才会变慢(内存很快就会填满,然后交换会慢慢增加)。除此之外,FUSE 本身的开销相当小。

是否有人知道为什么 FUSE 在使用 swap 而 tmpfs 本身时会出现延迟问题,以及我该如何优化以消除这种额外的开销?

相关内容