Re: Preallocation with direct IO?

Amit Sahrawat
2011-12-30T03:07:02Z

On Fri, Dec 30, 2011 at 2:27 AM, Dave Chinner <david@fromorbit.com> wrote:
> On Thu, Dec 29, 2011 at 01:10:49PM +0000, amit.sahrawat83@gmail.com wrote:
>> Hi, I am using a test setup which is doing write using multiple
>> threads using direct IO. The buffer size which is used to write is
>> 512KB.  After continously running this for long duration - i
>> observe that number of extents in each file is getting
>> huge(2K..4K..). I observed that each extent is of 512KB(aligned to
>> write buffer size). I wish to have low number of extents(i.e,
>> reduce fragmentation)... In case of buffered IO- preallocation
>> works good alongwith the mount option 'allocsize'. Is there
>> anything which can be done for Direct IO?  Please advice for
>> reducing fragmentation with direct IO.
>
> Direct IO does not do any implicit preallocation. The filesystem
> simply gets out of the way of direct IO as it is assumed you know
> what you are doing.
This is the supporting line I was looking for.
>
> i.e. you know how to use the fallocate() or ioctl(XFS_IOC_RESVSP64)
> calls to preallocate space or to set up extent size hints to use
> larger allocations than the IO being done during syscalls...
I tried to make use of preallocating space using
ioctl(XFS_IOC_RESVSP64) - but over time - this is also not working
well with the Direct I/O. Is there any call to set up extent size
also? please update I can try to make use of that also.

Thanks & Regards,
Amit Sahrawat
>
> Cheers,
>
> Dave.
> --
> Dave Chinner
> david@fromorbit.com