Messages in this thread | | | Date | Thu, 23 Dec 2004 13:48:21 -0800 (PST) | From | Linus Torvalds <> | Subject | Re: Prezeroing V2 [0/3]: Why and When it works |
| |
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 quiescent".
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..
Linus - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |