ext4: send parallel discards on commit completions
authorDaeho Jeong <daeho.jeong@samsung.com>
Fri, 23 Jun 2017 03:54:33 +0000 (23:54 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 23 Jun 2017 03:54:33 +0000 (23:54 -0400)
commita015434480dcdbfdc188df9b3633348af745e1b1
treedb953f73e1f659b9235730b92f1561723d2325bb
parent3abb1a0fc2871f2db52199e1748a1d48a54a3427
ext4: send parallel discards on commit completions

Now, when we mount ext4 filesystem with '-o discard' option, we have to
issue all the discard commands for the blocks to be deallocated and
wait for the completion of the commands on the commit complete phase.
Because this procedure might involve a lot of sequential combinations of
issuing discard commands and waiting for that, the delay of this
procedure might be too much long, even to 17.0s in our test,
and it results in long commit delay and fsync() performance degradation.

To reduce this kind of delay, instead of adding callback for each
extent and handling all of them in a sequential manner on commit phase,
we instead add a separate list of extents to free to the superblock and
then process this list at once after transaction commits so that
we can issue all the discard commands in a parallel manner like XFS
filesystem.

Finally, we could enhance the discard command handling performance.
The result was such that 17.0s delay of a single commit in the worst
case has been enhanced to 4.8s.

Signed-off-by: Daeho Jeong <daeho.jeong@samsung.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Tested-by: Hobin Woo <hobin.woo@samsung.com>
Tested-by: Kitae Lee <kitae87.lee@samsung.com>
Reviewed-by: Jan Kara <jack@suse.cz>
fs/ext4/ext4.h
fs/ext4/mballoc.c
fs/ext4/mballoc.h
fs/ext4/super.c