Skip to contentSkip to conversation

small patch for 2.4.9 VM

PATCH Marc Heckmann 2 participants 2 messages Aug 23, 2001

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

[not on list, please CC me]

Hi,

I've been tracking the vm changes in the 2.4.9-pre series. I was seeing really good improvements with 2.4.9-pre3 but then in pre4 it went to shit on my box (192mb, 200mb swap). The page cache was huge at all times and went pretty deep into swap on light loads. staring at the diff between pre3 and pre4, I noticed that background page aging in kswapd has changed [see do_try_free_pages], instead of just doing refill_inactive_scan(), it now does swap_out() first, then refill_inactive. Somehow, this seems to prevent proper page aging or something [please correct me if i'm wrong, haven't had the time to stare at swap_out() yet]. Anyway the short patch below, makes it behave like pre3 which is quite good for me. This might also be the cause of other peoples mm problems with 2.4.9 final.

also, pre3 behaved _very_ good during OOM situations but then after pre4 it degraded to something similar to 2.4.8. The pre4 changes causes do_try_free_pages to be constantly called by kswapd until _both_ the the inactive_shortage and the free_shortage are gone. kswapd used to sleep for a second if at least one of them wasn't short on pages. using some printk's to debug, I noticed that there are enough free pages, but the inactive target is _never_ reached so kswapd just goes nuts. This is also why we don't go into OOM since the oom test only tests free pages and cache. I think Rik might have commented on this already in another thread. When I have time, I'll try putting kswapd to sleep for a second if we have enough free pages, but not enough inactive ones.

I noticed that a lot of comments in the VM are now bogus with 2.4.9. I really think that the changes between pre3 and pre4 could have been better commented. I'm sure the changes have a reason to be there, but having justification for them would really help to debug the thing.

-marc

mm/vmscan.c renamed from mm/vmscan.c.orig.249 +4 -2
@@ -818,9 +818,11 @@
 #define GENERAL_SHORTAGE 4
 static int do_try_to_free_pages(unsigned int gfp_mask, int user)
 {
-	/* Always walk at least the active queue when called */
-	int shortage = INACTIVE_SHORTAGE;
+	int shortage = 0;
 	int maxtry;
+
+	/* Always walk at least the active queue when called */
+	refill_inactive_scan(DEF_PRIORITY);
 
 	maxtry = 1 << DEF_PRIORITY;
 	do {
#1 lore raw
Quoted 4 lines · On Thu, 23 Aug 2001 07:21:04 -0400 Marc Heckmann <[email protected]>…

[not on list, please CC me]

Hi,

Quoted 11 lines

I've been tracking the vm changes in the 2.4.9-pre series. I was seeing really good improvements with 2.4.9-pre3 but then in pre4 it went to shit on my box (192mb, 200mb swap). The page cache was huge at all times and went pretty deep into swap on light loads. staring at the diff between pre3 and pre4, I noticed that background page aging in kswapd has changed [see do_try_free_pages], instead of just doing refill_inactive_scan(), it now does swap_out() first, then refill_inactive. Somehow, this seems to prevent proper page aging or something [please correct me if i'm wrong, haven't had the time to stare at swap_out() yet]. Anyway the short patch below, makes it behave like pre3 which is quite good for me. This might also be the cause of other peoples mm problems with 2.4.9 final.

Sorry it isn't. I tested it and it has exactly the same problem under 2.4.9 with this patch than the straight kernel. Interestingly the error message from alloc_pages does not come up, but NFS-copy fails anyway when all the physical mem is eaten up by caches. meminfo in failing state:
total: used: free: shared: buffers: cached:

Mem:  921726976 918994944  2732032        0  6815744 823762944
Swap: 271392768        0 271392768
MemTotal:       900124 kB
MemFree:          2668 kB
MemShared:           0 kB
Buffers:          6656 kB
Cached:         804456 kB
SwapCached:          0 kB
Active:         276020 kB
Inact_dirty:    528988 kB
Inact_clean:      6104 kB
Inact_target:     6628 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       900124 kB
LowFree:          2668 kB
SwapTotal:      265032 kB
SwapFree:       265032 kB

Good about it: it does not swap. Bad: it does not work either. Forget this patch.

Regards,
Stephan