Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 31 Aug 2010 10:21:45 -0400
From:      Martin Cracauer <cracauer@cons.org>
To:        Gary Jennejohn <gljennjohn@googlemail.com>
Cc:        freebsd-fs@freebsd.org, Martin Cracauer <cracauer@cons.org>
Subject:   Re: fsync(2) and on-disk write-back cache
Message-ID:  <20100831142144.GA26989@cons.org>
In-Reply-To: <20100831113851.6d449628@ernst.jennejohn.org>
References:  <20100830225841.GA9363@cons.org> <20100831113851.6d449628@ernst.jennejohn.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Gary Jennejohn wrote on Tue, Aug 31, 2010 at 11:38:51AM +0200: 
> On Mon, 30 Aug 2010 18:58:42 -0400
> Martin Cracauer <cracauer@cons.org> wrote:
> 
> > I always assumed the answer to this question is "of course":
> > 
> > When doing an fsync (waiting for the commit), do we actually tell the
> > disk to flush the on-disk write-back cache (if that is in use) to the
> > platters?
> > 
> > I just went down some code paths in both FreeBSD and Linux and in both
> > cases the paths for fsync quickly disappear in the generic
> > block-by-block flushing code that is also used for regular (non-fsync)
> > flushing.  I didn't see anything aware of the on-disk cache.
> > 
> 
> I may be wrong, but it seems to me that the actual cache flush on the
> disk is handled at a very low level - in the drivers.
> 
> At least I'm pretty certain that e.g. the ahci code sends flush commands
> to the disks.

But does it wait for confirmation of completion?

>From what I have seen in the code, the path for fsync(2) quickly
merges with the code paths for regular flush (e.g. buffer full
enough).  fsync does wait for the underlying flush of the blocks in
question, but that doesn't tell me whether that waits for the disk to
confirm "on platter".  So either all code paths wait for the data to
be on platter or none.

I can't think that all code waits for completion, because then the
disk write performance would be the same with cache on write-through
(reads only) and write-back.  Unless the code flushes larger chunks
between AHCI flush commands.

Martin
-- 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Martin Cracauer <cracauer@cons.org>   http://www.cons.org/cracauer/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100831142144.GA26989>