mballoc currently causes fragmentation of small size files. The
behaviour can be observed by running parallel dd on ext4 file system. A
sample test case can be found here.
This is because for small size request/file mballoc uses group prealloc
space. That means if you have singe cpu and multiple threads doing
parallel io to the file the block request are served from the same
prealloc space. This results in the fragmentation observed above. (Group
prealloc space is per cpu )
This problem should go away with delayed allocation because the write
out happens with multiple blocks and mballoc places then close together
even though they get served by the same group prealloc space.
Considering that we don't have delalloc yet, i guess we should push
mballoc to 2.6.25 with default disabled and O_DIRECT type workloads can
enabled then via mount option.