Btrfs: check reserved when deciding to background flush
authorJosef Bacik <jbacik@fb.com>
Tue, 26 Jan 2016 14:35:38 +0000 (09:35 -0500)
committerDavid Sterba <dsterba@suse.com>
Thu, 18 Feb 2016 10:29:43 +0000 (11:29 +0100)
commitbaee8790641eac0c0fcb2524a925aec39d9be6e0
tree0308ceb2866f4a4ec80770a11a132112b3f20a3c
parent88d3a5aaf6171d9a222961837ba329b850f140e3
Btrfs: check reserved when deciding to background flush

We will sometimes start background flushing the various enospc related things
(delayed nodes, delalloc, etc) if we are getting close to reserving all of our
available space.  We don't want to do this however when we are actually using
this space as it causes unneeded thrashing.  We currently try to do this by
checking bytes_used >= thresh, but bytes_used is only part of the equation, we
need to use bytes_reserved as well as this represents space that is very likely
to become bytes_used in the future.

My tracing tool will keep count of the number of times we kick off the async
flusher, the following are counts for the entire run of generic/027

No Patch Patch
avg:  5385 5009
median: 5500 4916

We skewed lower than the average with my patch and higher than the average with
the patch, overall it cuts the flushing from anywhere from 5-10%, which in the
case of actual ENOSPC is quite helpful.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
Reviewed-by: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent-tree.c