Messages in this thread Patch in this message | | | Date | Mon, 27 Sep 2004 20:54:35 -0500 | From | Ray Bryant <> | Subject | Re: swapping and the value of /proc/sys/vm/swappiness |
| |
Nick,
As reported to you elsewhere (and duplicated here to get on this thread), application of the patch you sent (attached) dramatically changes the swappiness behavior of the 2.6.9-rc1 (and presumably the rc2) kernel.
Here are the updated results:
Previously:
Kernel Version 2.6.9-rc1-mm3: Total I/O Avg Swap min max pg cache min max ----------- --------- ------- ------ --------- ------- ------- 0 274.80 MB/s 10511 MB ( 5644, 14492) 13293 MB ( 8596, 17156) 20 267.02 MB/s 12624 MB ( 5578, 16287) 15298 MB ( 8468, 18889) 40 267.66 MB/s 13541 MB ( 6619, 17461) 16199 MB ( 9393, 20044) 60 233.73 MB/s 18094 MB ( 16550, 19676) 20629 MB ( 19103, 22192) 80 213.64 MB/s 20950 MB ( 15844, 22977) 23450 MB ( 18496, 25440) 100 164.58 MB/s 26004 MB ( 26004, 26004) 28410 MB ( 28327, 28455)
With Nick Piggin et al fix:
Kernel Version: linux-2.6.9-rc1-mm3-kswapdfix
Total I/O Avg Swap min max pg cache min max ----------- --------- ------- ------ --------- ------- ------- 0 279.97 MB/s 89 MB ( 12, 265) 3062 MB ( 2947, 3267) 20 283.55 MB/s 161 MB ( 15, 372) 3190 MB ( 3011, 3427) 40 282.32 MB/s 204 MB ( 6, 407) 3187 MB ( 2995, 3331) 60 279.42 MB/s 72 MB ( 15, 171) 3091 MB ( 3027, 3155) 80 283.34 MB/s 920 MB ( 144, 3028) 3904 MB ( 3106, 5957) 100 160.55 MB/s 26008 MB ( 26007, 26008) 28473 MB ( 28455, 28487)
(The drop at swappiness of 60 may just be randomness, not sure it is significant, but these results are all based on 5 trials.)
At any rate, this patch appears to fix the problems I was seeing before. (See http://marc.theaimsgroup.com/?l=linux-kernel&m=109449778320333&w=2
for further details of the benchmark and the test environment). -- Best Regards, Ray ----------------------------------------------- Ray Bryant 512-453-9679 (work) 512-507-7807 (cell) raybry@sgi.com raybry@austin.rr.com The box said: "Requires Windows 98 or better", so I installed Linux. -----------------------------------------------
---
linux-2.6-npiggin/mm/vmscan.c | 14 +++++++++++++- 1 files changed, 13 insertions(+), 1 deletion(-)
diff -puN mm/vmscan.c~vm-no-wild-kswapd mm/vmscan.c --- linux-2.6/mm/vmscan.c~vm-no-wild-kswapd 2004-09-25 10:09:16.000000000 +1000 +++ linux-2.6-npiggin/mm/vmscan.c 2004-09-25 10:15:58.000000000 +1000 @@ -993,10 +993,13 @@ static int balance_pgdat(pg_data_t *pgda int to_free = nr_pages; int priority; int i; - int total_scanned = 0, total_reclaimed = 0; + int total_scanned, total_reclaimed; struct reclaim_state *reclaim_state = current->reclaim_state; struct scan_control sc; +loop_again: + total_scanned = 0; + total_reclaimed = 0; sc.gfp_mask = GFP_KERNEL; sc.may_writepage = 0; sc.nr_mapped = read_page_state(nr_mapped); @@ -1095,6 +1098,15 @@ scan: */ if (total_scanned && priority < DEF_PRIORITY - 2) blk_congestion_wait(WRITE, HZ/10); + + /* + * We do this so kswapd doesn't build up large priorities for + * example when it is freeing in parallel with allocators. It + * matches the direct reclaim path behaviour in terms of impact + * on zone->*_priority. + */ + if (total_reclaimed >= 32) + goto loop_again; } out: for (i = 0; i < pgdat->nr_zones; i++) { _
| |