【问题标题】:Does growing files on Linux cost anything?在 Linux 上增长文件是否需要任何费用?
【发布时间】:2011-03-19 14:35:21
【问题描述】:

这两种情况之间的速度有什么明显差异吗?

场景 1: 我有一个大小为 1024 字节的文件,每个字节都用 0 填充。 我打开文件并用 fwrite 写入 1024 字节的 1。

场景 2: 我有一个大小为 512 字节的文件,每个字节都用 0 填充。 我打开文件并用 fwrite 写入 1024 字节的 1。

显然我最终得到了相同的文件,但是在调整磁盘上第二个文件的大小时会受到任何惩罚吗?

我正在尝试确定在使用文件之前调整文件大小是否有价值。任何可以向我展示一些 Linux 文档来证明这一点的人都会得到奖励。

【问题讨论】:

  • 到底谁认为 this 属于 SU?
  • 可能取决于文件系统。 XFS 和 ext4 支持可用于预分配空间的范围。
  • 当您可以测量性能时,为什么还要依赖(可能不准确,鉴于 Linux 不断变化的状态)文档?

标签: c++ linux disk performance


【解决方案1】:

这自然是特定于文件系统的。但您可以肯定,增长文件可能比写入预分配文件更昂贵,因为增长文件涉及文件系统 inode 分配,而写入预分配的 inode 则不涉及。

这种差异实际上有多大取决于文件系统,以及您使用它的准确程度。 我想在某些情况下它可能是有意义的。

另一个需要考虑的问题是碎片化。如果您的文件位于磁盘上的一个连续块(或几个大块)上,您将获得更好的读/写性能。预先分配一个文件会给你更好的机会减少碎片。

【讨论】:

  • 由于大量缓存,在 Linux 上几乎没有意义。但你所有的观点仍然是正确的。
【解决方案2】:

如果您所说的大小小于最小分配大小(看起来是这样),那么这实际上不会是可测量的差异。

是否可以测量较大的值?大概吧。

这有关系吗?您只能通过分析来判断它是您的应用程序的瓶颈。

【讨论】:

  • +1 指出了令人眼花缭乱的明显:测量和观察。
猜你喜欢
  • 2020-12-10
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
  • 2016-02-13
  • 2016-11-08
  • 1970-01-01
相关资源
最近更新 更多