Messages in this thread Patch in this message | | | Subject | Re: Can't make use of swap memory in 2.6.7-bk19 | From | Peter Osterlund <> | Date | 14 Jul 2004 12:39:18 +0200 |
| |
William Lee Irwin III <wli@holomorphy.com> writes:
> On Thu, Jul 08, 2004 at 11:30:45AM +0200, Peter Osterlund wrote: > > swappiness is set to 60. > > However, I realized that I had set /proc/sys/vm/laptop_mode to 1. If I set > > it to 0, 2.6.7-bk10 starts to work. > > Probably not what will get merged, but does the following brutal hack > do anything for you?
Doesn't help. I added some printk's to your patch and got this:
try_to_free_pages: --- try_to_free_pages: lap:1 totscan:128 dirty:4 unstable:0 try_to_free_pages: lap:1 totscan:256 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:512 dirty:0 unstable:0 try_to_free_pages: --- try_to_free_pages: lap:1 totscan:120 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:248 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:504 dirty:0 unstable:0 try_to_free_pages: --- try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:256 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:511 dirty:0 unstable:0 try_to_free_pages: --- try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:256 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:508 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:959 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:952 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:960 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:956 dirty:0 unstable:0 try_to_free_pages: --- try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:256 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:488 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:1715 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:628 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:1852 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:1856 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:1848 dirty:0 unstable:0 try_to_free_pages: --- try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: --- try_to_free_pages: lap:1 totscan:73 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:137 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:265 dirty:0 unstable:0 try_to_free_pages: --- try_to_free_pages: setting may_writepage=1 try_to_free_pages: oom try_to_free_pages: --- try_to_free_pages: setting may_writepage=1 try_to_free_pages: oom try_to_free_pages: --- try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: oom try_to_free_pages: --- try_to_free_pages: setting may_writepage=1 try_to_free_pages: oom try_to_free_pages: --- try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: oom try_to_free_pages: --- try_to_free_pages: setting may_writepage=1 try_to_free_pages: --- try_to_free_pages: setting may_writepage=1 try_to_free_pages: oom try_to_free_pages: --- try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:128 dirty:0 unstable:0 try_to_free_pages: oom try_to_free_pages: --- try_to_free_pages: lap:1 totscan:64 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:64 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:64 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:64 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:64 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:64 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:64 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:64 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:64 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:64 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:64 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:64 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:64 dirty:0 unstable:0 try_to_free_pages: oom try_to_free_pages: --- try_to_free_pages: setting may_writepage=1 try_to_free_pages: --- try_to_free_pages: setting may_writepage=1 try_to_free_pages: oom try_to_free_pages: lap:1 totscan:265 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:265 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:265 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:265 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:265 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:265 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:265 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:265 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:265 dirty:0 unstable:0 try_to_free_pages: oom try_to_free_pages: lap:1 totscan:256 dirty:0 unstable:0 try_to_free_pages: lap:1 totscan:576 dirty:0 unstable:0 try_to_free_pages: --- try_to_free_pages: lap:1 totscan:182 dirty:0 unstable:0 try_to_free_pages: --- try_to_free_pages: setting may_writepage=1 try_to_free_pages: oom Out of Memory: Killed process 2603 (memalloc2). try_to_free_pages: --- try_to_free_pages: setting may_writepage=1 try_to_free_pages: oom
---
linux-petero/mm/vmscan.c | 31 ++++++++++++++++++++++++++++--- 1 files changed, 28 insertions(+), 3 deletions(-)
diff -puN mm/vmscan.c~laptop-swap-fix mm/vmscan.c --- linux/mm/vmscan.c~laptop-swap-fix 2004-07-14 10:30:02.000000000 +0200 +++ linux-petero/mm/vmscan.c 2004-07-14 12:22:53.000000000 +0200 @@ -897,12 +897,13 @@ int try_to_free_pages(struct zone **zone struct reclaim_state *reclaim_state = current->reclaim_state; struct scan_control sc; int i; + int first = 1; sc.gfp_mask = gfp_mask; sc.may_writepage = 0; inc_page_state(allocstall); - +retry: for (i = 0; zones[i] != 0; i++) zones[i]->temp_priority = DEF_PRIORITY; @@ -932,6 +933,14 @@ int try_to_free_pages(struct zone **zone * writeout. So in laptop mode, write out the whole world. */ if (total_scanned > SWAP_CLUSTER_MAX + SWAP_CLUSTER_MAX/2) { + int dirty = read_page_state(nr_dirty); + int unstable = read_page_state(nr_unstable); + if (first) { + printk("try_to_free_pages: ---\n"); + first = 0; + } + printk("try_to_free_pages: lap:%d totscan:%d dirty:%d unstable:%d\n", + laptop_mode, total_scanned, dirty, unstable); wakeup_bdflush(laptop_mode ? 0 : total_scanned); sc.may_writepage = 1; } @@ -940,8 +949,24 @@ int try_to_free_pages(struct zone **zone if (sc.nr_scanned && priority < DEF_PRIORITY - 2) blk_congestion_wait(WRITE, HZ/10); } - if ((gfp_mask & __GFP_FS) && !(gfp_mask & __GFP_NORETRY)) - out_of_memory(); + if ((gfp_mask & __GFP_FS) && !(gfp_mask & __GFP_NORETRY)) { + if (!laptop_mode || sc.may_writepage) { + if (first) { + printk("try_to_free_pages: ---\n"); + first = 0; + } + printk("try_to_free_pages: oom\n"); + out_of_memory(); + } else { + if (first) { + printk("try_to_free_pages: ---\n"); + first = 0; + } + printk("try_to_free_pages: setting may_writepage=1\n"); + sc.may_writepage = 1; + goto retry; + } + } out: for (i = 0; zones[i] != 0; i++) zones[i]->prev_priority = zones[i]->temp_priority; _ -- Peter Osterlund - petero2@telia.com http://w1.894.telia.com/~u89404340 - 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/
| |