我正在尝试在文件系统上实现多用户key-value store,比如本地Linux或Windows文件系统,或者基于网络的文件系统(SMB或NFS)。我的目的是完全避免需要服务器,因为服务器需要一些VM、部署、升级等,而文件系统通常是现成的。
引擎返回值设置时的时间戳。使用时间戳的一个操作是"put if not modified since",它类似于compare-and-swap,支持进程间的同步。事实证明,在没有服务器的情况下实现这是相当昂贵的。
似乎没有文件系统支持“未修改就写入”或任何形式的条件写入语义。我最多只能锁定一个文件,但随后我需要读取日期并在进程中进行比较,然后才能写入新内容并释放锁。最少需要执行四次is : 1)锁定整个文件;2)读取修改日期并在本地进行比较;3)写入新内容;4)解锁。这会忽略IOs打开和关闭文件的操作,这些操作会合并在一起,因此不会频繁出现。
是否有任何操作系统或文件系统工具或算法可以减少IO数量?请记住,我需要在NFS或SMB上工作的解决方案...
谢谢
发布于 2020-07-28 22:06:09
文件系统已经执行预读和写避免,因此只有在读数据不在缓存中或写缓存已满且需要刷新时,I/O调用才会阻塞磁盘。“如果不修改则写入”的性能问题是4个syscall,这可能会变得很昂贵。解决这个问题的一种方法是添加一个条件写内核模块。您将向它传递时间戳、文件名和数据。它将使用内部调用和回调执行条件写入,并返回状态和新的时间戳,从而减少单个系统调用的开销。如果编写得当,它应该是与文件系统无关的。
https://stackoverflow.com/questions/63128606
复制相似问题