Re: [PATCH 4/4] ext4: call blkdev_issue_flush on fsync

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Jamie Lokier
Date: Tuesday, May 20, 2008 - 3:02 pm

Jens Axboe wrote:

Oh.  That's really unclear from the opening paragraph of barrier.txt,
which _defines_ what I/O barriers are for, and does not mention flushing:

   I/O barrier requests are used to guarantee ordering around the barrier
   requests.  Unless you're crazy enough to use disk drives for
   implementing synchronization constructs (wow, sounds interesting...),
   the ordering is meaningful only for write requests for things like
   journal checkpoints.  All requests queued before a barrier request
   must be finished (made it to the physical medium) before the barrier
   request is started, and all requests queued after the barrier request
   must be started only after the barrier request is finished (again,
   made it to the physical medium).

So I assumed the reason flush is talked about later was only because
most devices don't offer an alternative.

Later in barrier.txt, in the section about flushing, it says:

   the reason you use I/O barriers is mainly to protect filesystem
   integrity when power failure or some other events abruptly stop the
   drive from operating and possibly make the drive lose data in its
   cache.  So, I/O barriers need to guarantee that requests actually
   get written to non-volatile medium in order

Woa!  Nothing about flushing being important, just "to guarantee
... in order".

Thus flushing looks like an implementation detail - all we could do at
the time.  It does not seem to be the _point_ of WRITE_BARRIER
(according to the text), which is to ensure journalling integrity by
ordering writes.

Really, the main reason I was confused was that I imagine some
SCSI-like devices letting you do partially ordered writes to
write-back cache - with their cache preserving ordering constraints
the same way as some CPU or database caches.  (Perhaps I've been
thinking about CPUs too long!)

Anyway, moving on....  Let's admit I am wrong about that :-)

And get back to my idea.  Ignoring actual disks for a moment ( ;-) ),
there are some I/O scheduling optimisations possible in the kernel
itself by distinguishing between barriers (for journalling) and
flushes (for fsync).

Basically, barriers can be moved around between ordered writes,
including postponing indefinitely (i.e. a "needs barrier" flag).
Unordered writes (in-place data?) can be reordered somewhat around
barriers and other writes.  Nobody should wait for a barrier to complete.

On the other hand, flushes must be issued soon, and fdatasync/fsync
wait for the result.  Reordering possibilities are different: all
writes can be moved before a flush (unless it's a barrier too), and
in-place data writes cannot be moved after one.

Both barriers and flushes can be merged if there are no intervening
writes except unordered writes.  Double flushing, e.g. calling fsync
twice, or calling blkdev_issue_flush just to be sure somewhere,
shouldn't have any overhead.

The request elevator seems a good place to apply those heuristics.
I've written earlier about how to remove some barriers from ext3/4
journalling.  This stuff seems to suggest even more I/O scheduling
optimisations with tree-like journalling (as in BTRFS?).

-- Jamie
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 0/4] (RESEND) ext3[34] barrier changes, Eric Sandeen, (Fri May 16, 12:02 pm)
[PATCH 1/4] ext3: enable barriers by default, Eric Sandeen, (Fri May 16, 12:05 pm)
[PATCH 2/4] ext3: call blkdev_issue_flush on fsync, Eric Sandeen, (Fri May 16, 12:07 pm)
[PATCH 3/4] ext4: enable barriers by default, Eric Sandeen, (Fri May 16, 12:08 pm)
[PATCH 4/4] ext4: call blkdev_issue_flush on fsync, Eric Sandeen, (Fri May 16, 12:09 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Andrew Morton, (Fri May 16, 1:05 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Eric Sandeen, (Fri May 16, 1:53 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Andrew Morton, (Fri May 16, 1:58 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Fri May 16, 2:45 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Eric Sandeen, (Fri May 16, 3:03 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Fri May 16, 3:03 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Fri May 16, 3:09 pm)
Re: [PATCH 2/4] ext3: call blkdev_issue_flush on fsync, Jamie Lokier, (Fri May 16, 3:15 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Eric Sandeen, (Fri May 16, 3:21 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Fri May 16, 3:30 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Fri May 16, 3:53 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Theodore Tso, (Fri May 16, 5:20 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Andrew Morton, (Fri May 16, 5:35 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Theodore Tso, (Sat May 17, 6:43 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Andreas Dilger, (Sat May 17, 10:59 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Theodore Tso, (Sat May 17, 1:44 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Chris Mason, (Sat May 17, 5:48 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Theodore Tso, (Sat May 17, 6:36 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Ric Wheeler, (Sun May 18, 7:49 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Andi Kleen, (Sun May 18, 12:54 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Andi Kleen, (Sun May 18, 1:03 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Theodore Tso, (Sun May 18, 5:28 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Theodore Tso, (Sun May 18, 5:43 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Eric Sandeen, (Sun May 18, 7:29 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Andrew Morton, (Sun May 18, 9:11 pm)
Re: [PATCH 1/4] ext3: enable barriers by default, Pavel Machek, (Mon May 19, 1:58 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Pavel Machek, (Mon May 19, 2:04 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Chris Mason, (Mon May 19, 6:26 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Theodore Tso, (Mon May 19, 7:46 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Chris Mason, (Mon May 19, 10:16 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Chris Mason, (Mon May 19, 11:39 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jan Kara, (Mon May 19, 3:39 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Chris Mason, (Mon May 19, 5:29 pm)
Re: [PATCH 4/4] ext4: call blkdev_issue_flush on fsync, Theodore Tso, (Mon May 19, 7:34 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Timothy Shimmin, (Mon May 19, 8:29 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jens Axboe, (Tue May 20, 1:25 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Chris Mason, (Tue May 20, 5:04 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Chris Mason, (Tue May 20, 5:17 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Tue May 20, 7:42 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Tue May 20, 7:45 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Tue May 20, 7:58 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Tue May 20, 8:13 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Tue May 20, 8:36 am)
Re: [PATCH 4/4] ext4: call blkdev_issue_flush on fsync, Jamie Lokier, (Tue May 20, 8:43 am)
Re: [PATCH 4/4] ext4: call blkdev_issue_flush on fsync, Eric Sandeen, (Tue May 20, 8:52 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Chris Mason, (Tue May 20, 9:02 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Tue May 20, 9:27 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Chris Mason, (Tue May 20, 10:08 am)
Re: [PATCH 4/4] ext4: call blkdev_issue_flush on fsync, Jens Axboe, (Tue May 20, 12:54 pm)
Re: [PATCH 4/4] ext4: call blkdev_issue_flush on fsync, Jamie Lokier, (Tue May 20, 3:02 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Tue May 20, 3:26 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Tue May 20, 4:35 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Tue May 20, 4:44 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Tue May 20, 4:48 pm)
Re: [PATCH 4/4] ext4: call blkdev_issue_flush on fsync, Jens Axboe, (Wed May 21, 12:30 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Pavel Machek, (Wed May 21, 4:22 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Theodore Tso, (Wed May 21, 5:32 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Andrew Morton, (Wed May 21, 11:03 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Eric Sandeen, (Wed May 21, 11:15 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Theodore Tso, (Wed May 21, 11:29 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Andrew Morton, (Wed May 21, 11:49 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Wed May 21, 12:36 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Chris Mason, (Wed May 21, 12:40 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Wed May 21, 12:42 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Wed May 21, 12:43 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Jamie Lokier, (Wed May 21, 12:54 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Greg Smith, (Wed May 21, 1:25 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Daniel Phillips, (Wed May 21, 3:30 pm)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Ric Wheeler, (Fri May 23, 11:33 am)
Re: [PATCH 0/4] (RESEND) ext3[34] barrier changes, Eric Sandeen, (Thu May 29, 6:36 am)