This might be a question with an obvious answer, but I'd like
verification one way or the other.
Does the use of O_DIRECT essentially disable delayed allocation for a
given file?
My simple tests show a larger degree of block fragmentation for files
written using O_DIRECT than without, and on its face, this makes sense
to me. This fragmentation can be removed by using fallocate() on a
file before extending it with writes.
(Strictly speaking, I guess the use of O_DIRECT wouldn't "disable"
delayed allocation, since the blocks are allocated at the "normal"
time -- when going to disk. But effectively there would be a lot less
block grouping available to build large extents if each write goes to
disk immediately, instead of going through the page cache.)
Thanks,
Curt
On Thu, Jun 18, 2009 at 12:53:17PM -0700, Curt Wohlgemuth wrote:
> This might be a question with an obvious answer, but I'd like
> verification one way or the other.
>
> Does the use of O_DIRECT essentially disable delayed allocation for a
> given file?
>
> My simple tests show a larger degree of block fragmentation for files
> written using O_DIRECT than without, and on its face, this makes sense
> to me. This fragmentation can be removed by using fallocate() on a
> file before extending it with writes.
>
> (Strictly speaking, I guess the use of O_DIRECT wouldn't "disable"
> delayed allocation, since the blocks are allocated at the "normal"
> time -- when going to disk. But effectively there would be a lot less
> block grouping available to build large extents if each write goes to
> disk immediately, instead of going through the page cache.)
>
exactly. So it is possible that we are getting smaller number of block
request in O_DIRECT case. But you should still see better block
allocation because of mballoc. mballoc normalize the input block request
count based on the file size. w.r.t fallocate I have noticed one problem with O_DIRECT
which is explained in the url below. So there may be performance impact on using
O_DIRECT with fallocate.
http://article.gmane.org/gmane.comp.file-systems.ext4/13762
-aneesh