This patch implements a kswapd process for each memory zone. The original code came from Bill Irwin, but the current VM is quite a bit different from the one that he wrote it for, so not much remains. The current kswapd interface is much more simple than before because there is a single waitqueue and there is a single place where it is emptied. kswapd_can_sleep() and kswapd_balance() are simpler now that the extra pgdat level of indirection is gone. Tested on 8-way PIII with highmem off and then 4GB support. With 4GB support, I did 20 parallel greps through a 10GB fileset while some other processes allocated and freed 1-2GB chunks of memory. That gave kswapd a good workout, and I observed it running the zone Highmem and zone Normal kswapd threads. So, it survives my torture test. It also removes more code than it adds. include/linux/mmzone.h | 2 + include/linux/swap.h | 1 mm/page_alloc.c | 11 +++++- mm/vmscan.c | 88 +++++++++++++++++-------------------------------- 4 files changed, 42 insertions(+), 60 deletions(-) -- Dave Hansen haveblue@us.ibm.com