Re: Prezeroing V2 [0/3]: Why and When it works

From: Linus Torvalds
Date: Thu Dec 23 2004 - 16:49:32 EST

On Fri, 24 Dec 2004, Paul Mackerras wrote:
> I did some measurements once on my G5 powermac (running a ppc64 linux
> kernel) of how long clear_page takes, and it only takes 96ns for a 4kB
> page. This is real-life elapsed time in the kernel, not just some
> cache-hot benchmark measurement. Thus I don't think your patch will
> gain us anything on ppc64.

Well, the thing is, if we really _know_ the machine is idle (and not just
waiting for something like disk IO), it might be a good idea to just
pre-zero everything we can.

The question to me is whether we can have a good enough heuristic to
notice that it triggers often enough to matter, but seldom enough that it
really won't disturb anybody.

And "disturb" very much includes things like laptop battery life,
scheduling latencies, memory bus traffic _and_ cache contents.

And I really don't see a very good heuristic. Maybe it might literally be
something like "five-second load average goes down to zero" (we've got
fixed-point arithmetic with eleven fractional bits, so we can tune just
how close to "zero" we want to get). The load average is system-wide and
takes disk load (which tends to imply latency-critical work) into account,
so that might actually work out reasonably well as a "the system really is

So if we make the "what load is considered low" tunable, a system
administrator can use that to make it more aggressive. And indeed, you
might have a cron-job that says "be more aggressive at clearing pages
between 2AM and 4AM in the morning" or something - if you have so much
memory that it actually matters if you clear the memory just occasionally.

And the tunable load-average check has another advantage: if you want to
benchmark it, you can first set it to true zero (basically never), and run
the benchmark, and then you can set it to something very agressive ("clear
pages every five seconds regardless of load") and re-run.

Does this sound sane? Christoph - can you try making the "scrub deamon" do
that? Instead of the "scrub-low" and "scrub-high" (or in _addition_ to
them), do a "scub-load" thing that takes a scaled integer, and compares it
with "avenrun[0]" in kernel/timer.c: calc_load() when the average is
updated every five seconds..

Personally, at least for a desktop usage, I think that the load average
would work wonderfully well. I know my machines are often at basically
zero load, and then having low-latency zero-pages when I sit down sounds
like a good idea. Whether there is _enough_ free memory around for a
5-second thing to work out well, I have no idea..

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at