Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 May 2012 14:43:00 +0200
From:      Mateusz Guzik <mjg@semihalf.com>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        svn-src-projects@freebsd.org, Grzegorz Bernacki <gber@freebsd.org>, src-committers@freebsd.org
Subject:   Re: svn commit: r233072 - projects/nand/sys/kern
Message-ID:  <20120518124259.GB23560@pcbsd-2342.semihalf.com>
In-Reply-To: <20120517222946.GA2358@deviant.kiev.zoral.com.ua>
References:  <4FA8FFB9.7090002@freebsd.org> <20120508095631.GV2358@deviant.kiev.zoral.com.ua> <4FA94609.3060306@freebsd.org> <20120510103105.GG2358@deviant.kiev.zoral.com.ua> <4FABC64F.3060502@freebsd.org> <20120510115857.GH2358@deviant.kiev.zoral.com.ua> <20120510164519.GA13258@pcbsd-2342.semihalf.com> <20120511104648.GM2358@deviant.kiev.zoral.com.ua> <20120511154810.GA99005@pcbsd-2342.semihalf.com> <20120517222946.GA2358@deviant.kiev.zoral.com.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, May 18, 2012 at 01:29:46AM +0300, Konstantin Belousov wrote:
> On Fri, May 11, 2012 at 05:48:10PM +0200, Mateusz Guzik wrote:
> > On Fri, May 11, 2012 at 01:46:48PM +0300, Konstantin Belousov wrote:
> > > On Thu, May 10, 2012 at 06:45:19PM +0200, Mateusz Guzik wrote:
> > > > http://people.freebsd.org/~raj/patches/misc/vfs_highdirtybuf.diff
> > > > 
> > > > callbacks are expected to increase flushed counter if they happend to
> > > > flush some buffers.
> > > I do not think this is right. You need to call a routine when getnewblk()
> > > is unable to find a buffer to recycle.
> > > 
> > > As I understand, in your situation with lot of managed buffers, the dirty
> > > queue could be just empty.
> > 
> > I don't think I follow. Is your concern that with a lot of managed buffers and
> > empty dirty queue nothing can be recycled? Or that managed buffers
> > affect calls to buf_do_flush?
> > 
> > I presume you talk about the code below the following:
> >         /*
> >          * If we exhausted our list, sleep as appropriate.  We may have to
> >          * wakeup various daemons and write out some dirty buffers.
> >          *
> >          * Generally we are sleeping due to insufficient buffer space.
> >          */
> > 
> >         if (bp == NULL) {
> > 
> > Conditions that cause bufdaemon weakups/buf_do_flush calls seem to be
> > not dependent on buffers being managed or not.
> My concern is that you use unappropriate terminology at first, and this
> leads to mostly no-op code as a consequence.
> 
> If you use managed buffers, not only you should flush dirty buffers when
> bufdaemon is kicked, but you also need to actually return some buffers
> to the clean or empty queues. Otherwise, the condition which caused
> getnewbuf() allocation failure will persist.

We clear B_MANAGED flag before calling bufwrite and this requeues our
buffers.

> > 
> > buf_do_flush with our change always calls registered callbacks and the
> > callback that we register calls code that knowns what nandfs managed
> > buffers are dirty and flushes those. Buffers from dirty queues (if any)
> > are flushed separately.
> > 
> > If I'm wrong or misunderstood you, please elaborate on problem you have
> > in mind.
> > 
> > > > 
> > > > Example proof-of-concept (will be cleaned up) change for nandfs:
> > > > http://people.freebsd.org/~raj/patches/misc/nandfs_vfs_highdirtybuf.diff
> > > > 
> > > > Does this look reasonable?
> 
> The vfs_bio.c change is probably fine, but I have doubts that nandfs patch
> will change anything for the reasons I described above. On the other hand,
> I did not read nandfs code, so I may be wrong.

To sum up, I believe that nandfs with this patch correctly reacts to
demands from bufdaemon and getnewbuf by flushing and requeieng buffers.

Do you have any futher comments?

-- 
Mateusz Guzik <mjg semihalf.com>



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