Hi! Any comments on this? Thanks On 10.12.2019 19:56, Kirill Tkhai wrote: > Information about continuous extent placement may be useful > for some block devices. Say, distributed network filesystems, > which provide block device interface, may use this information > for better blocks placement over the nodes in their cluster, > and for better performance. Block devices, which map a file > on another filesystem (loop), may request the same length extent > on underlining filesystem for less fragmentation and for batching > allocation requests. Also, hypervisors like QEMU may use this > information for optimization of cluster allocations. > > This patchset introduces REQ_OP_ASSIGN_RANGE, which is going > to be used for forwarding user's fallocate(0) requests into > block device internals. It rather similar to existing > REQ_OP_DISCARD, REQ_OP_WRITE_ZEROES, etc. The corresponding > exported primitive is called blkdev_issue_assign_range(). > See [1/3] for the details. > > Patch [2/3] teaches loop driver to handle REQ_OP_ASSIGN_RANGE > requests by calling fallocate(0). > > Patch [3/3] makes ext4 to notify a block device about fallocate(0). > > Here is a simple test I did: > https://gist.github.com/tkhai/5b788651cdb74c1dbff3500745878856 > > I attached a file on ext4 to loop. Then, created ext4 partition > on loop device and started the test in the partition. Direct-io > is enabled on loop. > > The test fallocates 4G file and writes from some offset with > given step, then it chooses another offset and repeats. After > the test all the blocks in the file become written. > > The results shows that batching extents-assigning requests improves > the performance: > > Before patchset: real ~ 1min 27sec > After patchset: real ~ 1min 16sec (18% better) > > Ordinary fallocate() before writes improves the performance > by batching the requests. These results just show, the same > is in case of forwarding extents information to underlining > filesystem. > --- > > Kirill Tkhai (3): > block: Add support for REQ_OP_ASSIGN_RANGE operation > loop: Forward REQ_OP_ASSIGN_RANGE into fallocate(0) > ext4: Notify block device about fallocate(0)-assigned blocks > > > block/blk-core.c | 4 +++ > block/blk-lib.c | 70 +++++++++++++++++++++++++++++++++++++++++++++ > block/blk-merge.c | 21 ++++++++++++++ > block/bounce.c | 1 + > drivers/block/loop.c | 5 +++ > fs/ext4/ext4.h | 1 + > fs/ext4/extents.c | 11 ++++++- > include/linux/bio.h | 3 ++ > include/linux/blk_types.h | 2 + > include/linux/blkdev.h | 29 +++++++++++++++++++ > 10 files changed, 145 insertions(+), 2 deletions(-) > > -- > Signed-off-by: Kirill Tkhai <ktkhai@xxxxxxxxxxxxx> >