I'm experiencing the problem right now... It's not
serious, but it _does_ hamper performance for the
application concerned.
> It' s a bit difficult to explain with _English_ words the cause of the
> problem. In short you have a process that has touched some of its .data
> area and then it never used it anymore so such data got swapped out. Then
> the .text (in RAM) of that process run a fork() and the child process
> start touching again the old swapped out data that so has to be swapped in
> but the parent process don' t know that such data is been swapped in and
> so, if it will fork again, the new child will swapin again.
Looking at the particular thing running right now (a
very-very-very-often forking shell script) your theory
seems to be right... Excellent detective work!
It certainly looks like this bug is going to be a very
serious performance problem with Apache web servers.
Consider the case where the parent server got pushed
out to swap in a low-web-load situation. This means that
the 'serving' routines are now not in memory.
Now each time the server forks it is creating a child
process with "serving routine not in memory", while in
fact it is... This means that the kernel will keep
swapping/paging in the particular piece of data needed!
While Andrea's patch might look a bit inefficient, I'm
pretty sure that the cost incurred by the tests will
be more than made up for in increased performance...
I really think that this patch should go (after some
reviews and testing) into the 2.1 tree, as we don't
want such a serious performance bug in the 2.2 kernel.
Rik.
+-------------------------------------------------------------------+
| Linux memory management tour guide. H.H.vanRiel@phys.uu.nl |
| Scouting Vries cubscout leader. http://www.phys.uu.nl/~riel/ |
+-------------------------------------------------------------------+
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/