From: "David S. Miller" <davem@redhat.com>
To: riel@nl.linux.org
Cc: roger.larsson@norran.net, linux-kernel@vger.rutgers.edu,
linux-mm@kvack.org
Subject: Re: kswapd @ 60-80% CPU during heavy HD i/o.
Date: Mon, 1 May 2000 16:33:45 -0700 [thread overview]
Message-ID: <200005012333.QAA31200@pizda.ninka.net> (raw)
In-Reply-To: <Pine.LNX.4.21.0005012017300.7508-100000@duckman.conectiva> (message from Rik van Riel on Mon, 1 May 2000 20:23:43 -0300 (BRST))
We can simply "move" the list_head when we're done scanning and
continue from where we left off last time. That way we'll be much
less cpu intensive and scan all pages fairly.
Using not one but 2 or 3 bits for aging the pages can result in
something closer to lru and cheaper than the scheme we have now.
What do you (and others) think about this idea?
Why not have two lists, an active and an inactive list. As reference
bits clear, pages move to the inactive list. If a reference bit stays
clear up until when the page moves up to the head of the inactive
list, we then try to free it. For the active list, you do the "move
the list head" technique.
So you have two passes, one populates the inactive list, the next
inspects the inactive list for pages to free up. The toplevel
shrink_mmap scheme can look something like:
free_unreferenced_pages_in_inactive_list();
repopulate_inactive_list();
And you define some heuristics to decide how populated you wish to
try to keep the inactive list.
Next, during periods of inactivity you have kswapd or some other
daemon periodically (once every 5 seconds, something like this)
perform an inactive list population run.
The inactive lru population can be done cheaply, using the above
ideas, roughly like:
LIST_HEAD(inactive_queue);
struct list_head * active_scan_point = &lru_active;
for_each_active_lru_page() {
if (!test_and_clear_referenced(page)) {
list_del(entry);
list_add(entry, &inactive_queue);
} else
active_scan_point = entry;
}
list_splice(&inactive_queue, &lru_inactive);
list_head_move(&lru_active, active_scan_point);
This way you only do list manipulations for actual work done
(ie. moving inactive page candidates to the inactive list).
I may try to toss together and example implementation, but feel
free to beat me to it :-)
Later,
David S. Miller
davem@redhat.com
--
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.eu.org/Linux-MM/
next prev parent reply other threads:[~2000-05-01 23:33 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <390E1534.B33FF871@norran.net>
2000-05-01 23:23 ` Rik van Riel
2000-05-01 23:33 ` David S. Miller [this message]
2000-05-02 0:07 ` Rik van Riel
2000-05-02 0:23 ` David S. Miller
2000-05-02 1:03 ` Rik van Riel
2000-05-02 1:13 ` David S. Miller
2000-05-02 1:31 ` Rik van Riel
2000-05-02 1:51 ` Andrea Arcangeli
2000-05-03 17:11 ` [PATCHlet] " Rik van Riel
2000-05-02 7:56 ` michael
2000-05-02 16:17 ` Roger Larsson
2000-05-02 15:43 ` Rik van Riel
2000-05-02 16:20 ` Andrea Arcangeli
2000-05-02 17:06 ` Rik van Riel
2000-05-02 21:14 ` Stephen C. Tweedie
2000-05-02 21:42 ` Rik van Riel
2000-05-02 22:34 ` Stephen C. Tweedie
2000-05-04 12:37 ` [PATCH][RFC] Alternate shrink_mmap Roger Larsson
2000-05-04 14:34 ` Rik van Riel
2000-05-04 22:38 ` [PATCH][RFC] Another shrink_mmap Roger Larsson
2000-05-04 15:25 ` [PATCH][RFC] Alternate shrink_mmap Roger Larsson
2000-05-04 18:30 ` Rik van Riel
2000-05-04 20:44 ` Roger Larsson
2000-05-04 18:59 ` Rik van Riel
2000-05-04 22:29 ` Roger Larsson
2000-05-02 18:03 ` kswapd @ 60-80% CPU during heavy HD i/o Roger Larsson
2000-05-02 17:37 ` Rik van Riel
2000-05-02 17:26 frankeh
2000-05-02 17:45 ` Rik van Riel
2000-05-02 17:53 ` Andrea Arcangeli
2000-05-02 18:46 frankeh
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=200005012333.QAA31200@pizda.ninka.net \
--to=davem@redhat.com \
--cc=linux-kernel@vger.rutgers.edu \
--cc=linux-mm@kvack.org \
--cc=riel@nl.linux.org \
--cc=roger.larsson@norran.net \
/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