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

Linux xfs-如何在写入文件时不修改mtime?,linux,filesystems,xfs,Linux,Filesystems,Xfs,我有一个1GB的文件,a.dat,它驻留在磁盘上。出于性能方面的考虑,我重用了这个文件,只是根据需要覆盖它的内容,而不是创建一个新文件并让它增长(每个增长操作都必须更新inode中的大小) 我试图挤出更多的性能,并已搜索手册页,并试图找出一个文件的mtime和ctime何时更新。据我所知,每次更改文件内容时,mtime和/或ctime都会更新。xfs就是这样工作的吗 如果是这样,有没有办法在linux上禁用此功能?我不关心mtime和ctime,也不愿意在每次写操作中更新它们 最终,我将完全摆脱

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

我试图挤出更多的性能,并已搜索手册页,并试图找出一个文件的mtime和ctime何时更新。据我所知,每次更改文件内容时,mtime和/或ctime都会更新。xfs就是这样工作的吗

如果是这样,有没有办法在linux上禁用此功能?我不关心mtime和ctime,也不愿意在每次写操作中更新它们

最终,我将完全摆脱文件系统,直接写入设备,但同时我希望有一种方法可以通过文件系统实现这一点

根据答案进行编辑

为了澄清这一点,我正在给SSD写信,从SSD中挤出每一个操作都是极其重要的。从理论上讲,SSD每秒可以处理25K次操作,每一次操作对我来说都很重要。我不想把它们浪费在除了写我的文件以外的任何事情上。在这一点上,实际上我的磁盘上有200个1GB的文件,我正在写入。我试图用上面的问题来简化这个问题


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

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

如果你真的认为从一个32位计数器到另一个内存位置的拷贝会减慢你的速度,那么你就错误地试图优化
写入(2)
的快速部分

要提高1GB文件的文件写入性能吗?添加更多内存供块缓存使用,并忽略mtime

在回复评论时添加

同步写入将不会提供任何意义上的安全,因为在磁盘写入中间的牵引电源线不受同步的帮助;这就是为什么要使用像xfs和ext3+这样的日志文件系统。你所能期望的最好结果就是在失败面前始终如一

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


如果您在问题中阐明了您的设计意图,可能会有更好的答案。从本质上讲,尽管写入时间更长,但对于一个微不足道的1GB文件,我觉得闪存比旋转氧化物更不容易出现故障,但这并不是一个正式的声明。

祝你好运!但是为什么这被标记为C++?我在C/C++中编码。我想它不一定特定于任何语言,但c解决方案将是最有用的。如果我需要所有写操作都是同步的,这样我就可以随时从故障中恢复,那么添加块缓存并没有帮助。我不是在尝试优化内存拷贝,而是在尝试最小化inode刷新到磁盘的次数。我不确定它是在每次修改操作中发生,还是定期发生。显然,在每次修改操作中刷新它会放大我对磁盘的写入。听起来你是说事实并非如此。我将查看
stat
语义,看看它是否对我有帮助。感谢您的澄清。固态硬盘对我来说是陌生的,所以我认为你使用的是传统硬盘。这篇文章似乎表面上是明智的:谢谢你的链接。我仍在研究它,但看起来您可能是对的,即使在同步写入(使用O_DIRECT或O_SYNC)时,mtime也不总是写入磁盘,只是周期性地写入。这对我来说是个好消息。不过,我仍在努力确认这一点。