On Mon, Jun 15, 2009 at 11:44 PM, Smit Shah <getsmit@xxxxxxxxx>
On Mon, Jun 15, 2009 at 8:34 PM, Eric Sandeen <sandeen@xxxxxxxxxxx>
Smit Shah wrote:
> I wanted to preallocate the file using the ALLOCSP so that the preallocated
> space is zeroed out. Hence i used the xfsctl but the problem is that i
> cannot execute it as a non-root user. So i tried using fallocate but when
> i saw the xfs implementation of kernel it uses the RESVP cmd and since the
> unwritten flag is set i am assuming that the performance of writing to the
> preallocated space will suffer because of the metadata updates. So is there
> a way to preallocate using ALLOCSP as a non-root user or else i would be
> required to modify the kernel ??
ALLOCSP simply writes 0s to a file.... you may as well do it using posix
calls, as a normal user, I think.
Even the man page of fallocate says that it allocates and initializes to zero the disk space allocated but when i saw the code i did found out that it does not zero it out. Hence was a kindof confused. So posix_allocate is similar to ALLOCSP when falloc is not supported by the underlying filesystem that is to ftruncate the file and zero it out. So all of them try to allocate contiguous blocks but the only difference is when we use the fallocate in ext4/xfs it does not zero out the preallocated space. Am i right ?
I guess i am not right here ftruncate simply does a lseek and wirtes to it which might not be contiguous whereas fallocate tries to allocate contiguous block so as to reduce fragmentation and hence i thought to reduce fragmentation and for security reasons its better to use ALLOCSP rather than something like ftruncate /posix_fallocate or RSEVSP which kindof performs bad for writes with unwritten flag set and now there being a no direct way while creating the fs to disable unwritten.
But when i fallocate in ext4 i can see the write performance improvement but not in xfs and reason i found out in one of your previous comments is because of the unwritten flag set in xfs. So how do we see if the unwritten flag is set or not ? I did use xfs_info but it didnt show any such information.