jbd2: improve jbd2 fsync batching
authorJosef Bacik <jbacik@redhat.com>
Wed, 26 Nov 2008 06:14:26 +0000 (01:14 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 26 Nov 2008 06:14:26 +0000 (01:14 -0500)
commite07f7183a486cf9783d1f8c9d2997b5b39eeb2d4
tree74ed3a563add5fa57e80af03f3f712f2910ac39f
parent032115fcef837a00336ddf7bda584e89789ea498
jbd2: improve jbd2 fsync batching

This patch removes the static sleep time in favor of a more self
optimizing approach where we measure the average amount of time it
takes to commit a transaction to disk and the ammount of time a
transaction has been running.  If somebody does a sync write or an
fsync() traditionally we would sleep for 1 jiffies, which depending on
the value of HZ could be a significant amount of time compared to how
long it takes to commit a transaction to the underlying storage.  With
this patch instead of sleeping for a jiffie, we check to see if the
amount of time this transaction has been running is less than the
average commit time, and if it is we sleep for the delta using
schedule_hrtimeout to give us a higher precision sleep time.  This
greatly benefits high end storage where you could end up sleeping for
longer than it takes to commit the transaction and therefore sitting
idle instead of allowing the transaction to be committed by keeping
the sleep time to a minimum so you are sure to always be doing
something.

Signed-off-by: Josef Bacik <jbacik@redhat.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/jbd2/commit.c
fs/jbd2/transaction.c
include/linux/jbd2.h