这两种情况之间的速度是否有显着差异?在Linux上增长文件需要花费什么吗?
场景1: 我有一个文件大小为1024字节,每个字节填充0。 我打开文件并用fwrite写入1024字节的1。
场景2: 我有一个512字节的文件,每个字节都填充0。 我打开文件并用fwrite写入1024字节的1。
很明显,我结束了相同的文件,但有没有在调整磁盘上的第二个文件的任何惩罚?
我试图确定如果在使用它们之前调整我的文件的大小将是有价值的。奖金指向任何能够向我展示一些Linux文档以证明这一点的人。
这两种情况之间的速度是否有显着差异?在Linux上增长文件需要花费什么吗?
场景1: 我有一个文件大小为1024字节,每个字节填充0。 我打开文件并用fwrite写入1024字节的1。
场景2: 我有一个512字节的文件,每个字节都填充0。 我打开文件并用fwrite写入1024字节的1。
很明显,我结束了相同的文件,但有没有在调整磁盘上的第二个文件的任何惩罚?
我试图确定如果在使用它们之前调整我的文件的大小将是有价值的。奖金指向任何能够向我展示一些Linux文档以证明这一点的人。
这自然是文件系统特定的。但是您可以确定增长文件比写入预先分配的文件更昂贵,因为增长文件涉及文件系统inode分配,而写入预先分配的inode却不会。
这个差异实际上有多大取决于文件系统以及您使用它的方式。 我猜在某些情况下它可能是有意义的。
要考虑的另一个问题是碎片。如果您的文件位于磁盘上的连续块(或多个大块)上,您将获得更好的读/写性能。预先分配一个文件会给你一个更好的机会,它会减少碎片。
由于疯狂的缓存量,在Linux上几乎没有任何意义。但你的观点仍然存在。 – 2010-07-22 14:52:28
如果您所谈论的尺寸小于最小分配尺寸(它似乎是),那么它确实不会是可测量的差异。
它可以衡量较大的值吗?大概。
重要吗?您只能通过剖析说明它是您应用程序的瓶颈。
+1因为已经指出了这个令人眩目的明显:测量和看到。 – 2010-07-22 15:03:30
他们认为_this_属于SU吗? – sbi 2010-07-22 14:42:45
可能取决于文件系统。 XFS和ext4支持可用于预分配空间的扩展区。 – 2010-07-22 14:45:15
为什么你要依靠(可能不准确,给定Linux的不变状态)文档,当你可以测量性能时? – 2010-07-22 15:02:39