From: Daniel Phillips <phillips@bonn-fries.net>
To: Chris Mason <mason@suse.com>, linux-kernel@vger.kernel.org
Cc: linux-mm@kvack.org
Subject: Re: [RFC] using writepage to start io
Date: Mon, 6 Aug 2001 18:13:20 +0200 [thread overview]
Message-ID: <01080618132007.00294@starship> (raw)
In-Reply-To: <316580000.997104241@tiny>
On Monday 06 August 2001 15:24, Chris Mason wrote:
> On Monday, August 06, 2001 07:39:47 AM +0200 Daniel Phillips wrote:
> >Chris Mason wrote:
> >> there are at least 3 reasons to write buffers to disk
> >>
> >> 1) they are too old
> >> 2) the percentage of dirty buffers is too high
> >> 3) you need to reclaim them due to memory pressure
> >>
> >> There are 3 completely different things; there's no trumping of
> >> priorities.
> >
> > There is. If your heavily loaded machine goes down and you lose
> > edits from 1/2 an hour ago even though your bdflush parms specify a
> > 30 second update cycle you'll call the system broken, whereas if it
> > runs 5% slower under heavy write+swap load that's just life.
>
> Ok, we're getting caught up in semantics here. I'm not saying kupdate
> should switch over to write buffers that might get reclaimed instead
> of old buffers. There still needs to be proper flushing of old data.
>
> I am saying that it should be possible to have the best buffer flushed
> under memory pressure (by kswapd/bdflush) and still get the old data
> to disk in time through kupdate.
Yes, to phrase this more precisely, after we've submitted all the
too-old buffers we then gain the freedom to select which of the younger
buffers to flush. When there is memory pressure we could benefit by
skipping over some of the sys_write buffers in favor of page_launder
buffers. We may well be able to recognize the latter by looking for
!bh->b_page->age. This method would be an alternative to your
writepage approach.
> > By the way, I think you should combine (2) and (3) using an and,
> > which gets us back to the "kupdate thing" vs the "bdflush thing".
>
> Perhaps, since I think they would be handled in roughly the same way.
(warning: I'm going to drift pretty far off the original topic now...)
I don't see why it makes sense to have both a kupdate and a bdflush
thread. We should complete the process of merging these (sharing
flush_dirty buffers was a big step) and look into the possibility of
adding more intelligence about what to submit next. The proof of the
pudding is to come up with a throughput-improving patch, not so easy
since the ore in these hills has been sought after for a good number of
years by many skilled prospectors.
Note that bdflush also competes with an unbounded number of threads
doing wakeup_bdflush(1)->flush_dirty_buffers.
These are called through balance_dirty:
mark_buffer_dirty->balance_dirty
__block_commit_write->balance_dirty
refill_freelist->balance_dirty
(Curiously, refill_freelist also calls wakeup_bdflush(1) directly.) You
can see that each of these paths is very popular, and as soon as we pass
the hard_dirty_limit everybody will jump in to try to help with buffer
writeout.
As I recall, the current arrangement was arrived at after a flurry of
dbench-inspired tweaking last fall and hasn't changed much since then.
I think we need to take another look at this. My instinct is that
it's wrong to ever have more than one instance of flush_dirty_buffers
active per spindle, and that the current arrangement is an attempt to
reduce context switches or perhaps to keep buffer submission flowing
even when page_launder blocks on writepage-><read metadata
synchronously>. There has to be a cleaner way to approach this.
--
Daniel
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/
next prev parent reply other threads:[~2001-08-06 16:13 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-08-05 18:34 Chris Mason
2001-08-05 22:38 ` Daniel Phillips
2001-08-05 23:32 ` Chris Mason
2001-08-06 5:39 ` Daniel Phillips
2001-08-06 13:24 ` Chris Mason
2001-08-06 16:13 ` Daniel Phillips [this message]
2001-08-06 16:51 ` Chris Mason
2001-08-06 19:45 ` Daniel Phillips
2001-08-06 20:12 ` Chris Mason
2001-08-06 21:18 ` Daniel Phillips
2001-08-07 11:02 ` Stephen C. Tweedie
2001-08-07 11:39 ` Ed Tomlinson
2001-08-07 12:07 ` Anton Altaparmakov
2001-08-07 18:36 ` Daniel Phillips
2001-08-07 12:02 ` Anton Altaparmakov
2001-08-07 13:29 ` Daniel Phillips
2001-08-07 13:31 ` Alexander Viro
2001-08-07 15:52 ` Daniel Phillips
2001-08-07 14:23 ` Stephen C. Tweedie
2001-08-07 15:51 ` Daniel Phillips
2001-08-08 14:49 ` Stephen C. Tweedie
2001-08-06 15:13 ` Eric W. Biederman
-- strict thread matches above, loose matches on Subject: below --
2001-08-07 15:19 Chris Mason
[not found] <76740000.996336108@tiny>
2001-07-31 19:07 ` Chris Mason
2001-08-01 1:01 ` Daniel Phillips
2001-08-01 2:05 ` Chris Mason
2001-08-01 14:57 ` Daniel Phillips
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=01080618132007.00294@starship \
--to=phillips@bonn-fries.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mason@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox