2010-07-22 35 views
0

这两种情况之间的速度是否有显着差异?在Linux上增长文件需要花费什么吗?

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

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

很明显,我结束了相同的文件,但有没有在调整磁盘上的第二个文件的任何惩罚?

我试图确定如果在使用它们之前调整我的文件的大小将是有价值的。奖金指向任何能够向我展示一些Linux文档以证明这一点的人。

+1

他们认为_this_属于SU吗? – sbi 2010-07-22 14:42:45

+0

可能取决于文件系统。 XFS和ext4支持可用于预分配空间的扩展区。 – 2010-07-22 14:45:15

+2

为什么你要依靠(可能不准确,给定Linux的不变状态)文档,当你可以测量性能时? – 2010-07-22 15:02:39

回答

6

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

这个差异实际上有多大取决于文件系统以及您使用它的方式。 我猜在某些情况下它可能是有意义的。

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

+1

由于疯狂的缓存量,在Linux上几乎没有任何意义。但你的观点仍然存在。 – 2010-07-22 14:52:28

4

如果您所谈论的尺寸小于最小分配尺寸(它似乎是),那么它确实不会是可测量的差异。

它可以衡量较大的值吗?大概。

重要吗?您只能通过剖析说明它是您应用程序的瓶颈。

+0

+1因为已经指出了这个令人眩目的明显:测量和看到。 – 2010-07-22 15:03:30

相关问题