gpt4 book ai didi

linux - xfs - 如何在写入文件时不修改 mtime?

转载 作者:太空狗 更新时间:2023-10-29 12:07:17 27 4
gpt4 key购买 nike

我有一个文件 a.dat,大小为 1GB,位于磁盘上。出于性能原因,我重用了这个文件并根据需要简单地覆盖它的内容,而不是创建一个新文件并让它增长(每个增长操作都必须更新它在 inode 中的大小)。

我试图挤出更多的性能,并在手册页中搜索了 openmount试图找出文件的 mtime 和 ctime 何时更新。据我了解,每次更改文件内容时,mtime 和/或 ctime 都会更新。这是 xfs 的工作方式吗?

如果是这样,有没有办法在 Linux 上禁用它?我不关心 mtime 和 ctime,也不想承担每次写操作更新它们的成本。

最终,我将完全摆脱文件系统并直接写入设备,但与此同时我希望有一种方法可以使用文件系统来实现这一点。

根据答案进行编辑

为澄清起见,我正在写入 SSD,并且从 SSD 中挤出我能做的每一个操作是非常重要的。 SSD 理论上每秒可以处理大约 25K 次操作,其中每一项对我来说都很重要。除了写入我的文件之外,我不希望它们中的任何一个被浪费在任何事情上。关于这一点,实际上我的磁盘上有 200 个 1GB 的文件要写入。我试图用上面的问题简化问题。

此外,每次写入都必须是同步的,并且我的程序将不会继续,直到我确定这些位在磁盘上(这可能的)。但我认为这个注释与问题无关。

最佳答案

有关 mtime 和 ctime 的语义,请参见 man 2 stat。实际上,mtime 和 ctime 将在 inode 的内存副本中更新并异步刷新到磁盘。

如果没有主要的内核 hackery,你不能跳过 inode 中的 mtime 更新,如果你真的认为从一个 32 位计数器到另一个内存位置的副本正在减慢你的速度,你就错误地试图优化 写(2)

想要提高 1GB 文件的文件写入性能?为 block 缓存添加更多内存以使用并忘记 mtime。

为回应评论而添加

同步写入不会提供任何有意义的安全性,因为同步不会帮助在磁盘写入过程中拉下电源线;这就是使用 xfs 和 ext3+ 等日志文件系统的原因。你所能期望的最好的结果就是面对失败时的一致性。

您似乎希望确定所记录的数据是一成不变的,这从根本上是不可能的,即使您使用电池支持的 SRAM 写入缓冲区构建 RAID,因为在提交位之前某些事情总是失败。与日志文件系统相比,写入原始卷为您提供的保护更少。

如果您在问题中阐明您的设计意图,可能会有更好的答案。在直觉层面上,即使写入时间更长,但对于一个 1GB 的小文件来说,闪存给我的印象是比旋转氧化物更不容易发生故障,但这不是正式声明。

关于linux - xfs - 如何在写入文件时不修改 mtime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6478622/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com