我使用FUSE创建覆盖文件系统,其中目录使用虚拟实体进行扩充。我将这些实体的文件大小设置为0,因为我无法知道 - 在阅读它们之前,这在我的情况下特别昂贵 - 应该是什么。
然而,似乎有一个明显的优化发生,因为零长度文件不会发生任何read
电话(仅open
和release
)。< / p>
因此,我的问题很简单,我应该将文件大小设置为什么?我知道符号链接的文件名长度大小;如果它不是符号链接,这会有用吗?否则,我能做的最好的事情就是为大小提供一个下限...如果read
只有一个文件描述符,块大小和偏移量,可能它读取的是EOF而不是{{1可以告诉它。
答案 0 :(得分:1)
文件大小必须正确。很多代码都依赖于这些信息,你不能简单地省略它。
这意味着你需要找出一种有效的方法来缓存/预先计算这些信息。
查看在文件系统中对所有文件运行命令的cmdfs的来源。 Linux Magazine has an overview article
答案 1 :(得分:0)
由于文件大小是未知的,请使用选项-odirect_io
进行安装并设置st_size = 0
。我希望这会有所帮助。
在保险丝手册页中:
direct_io This option disables the use of page cache (file content cache) in the kernel for this filesystem. This has several affects: 1. Each read(2) or write(2) system call will initiate one or more read or write operations, data will not be cached in the kernel. 2. The return value of the read() and write() system calls will correspond to the return values of the read and write operations. This is useful for example if the file size is not known in advance (before reading it).