我有一个可以重新导出NFS共享的fuse模块。像fio这样调用posix_fallocate的应用程序最终以4K的扩展调用了我的fuse写函数,只有一个字节的写入。这反过来会导致通过NFS进行单字节的RPC调用,从而使性能变得非常慢。
我如何通过fuse通知应用程序我可以直接处理错误定位,而不应该求助于单字节写入?
发布于 2017-02-24 16:35:10
您需要做的是:不要让您的fuse在posix_fallocate调用时返回EOPNOTSUPP。
我在挂载了一个posix_fallocate卷的linux上使用了这个文件系统。事实证明,当遇到EOPNOTSUPP时,linux的posix_fallocate实现完成了向每个块写入1个字节的困难工作。
下面的代码行显示了输出的部分strace:
fallocate(3, 0, 0, 8589934592) = -1 EOPNOTSUPP (Operation not supported)
pwrite(3, "\0", 1, 1048575) = 1
pwrite(3, "\0", 1, 2097151) = 1
pwrite(3, "\0", 1, 3145727) = 1*
.....https://stackoverflow.com/questions/38534607
复制相似问题