lkml.org 
[lkml]   [2005]   [Dec]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
SubjectRe: nfs unhappiness with memory pressure
From
Date
On Mon, 2005-12-05 at 15:13 -0500, Trond Myklebust wrote:
> On Mon, 2005-12-05 at 10:01 -0800, Kenny Simpson wrote:
> > Tested with rc5 - same results. It was suggested that I run slabtop when the system freezed, so
> > here is that info: (again, by hand, I'm getting another machine to use either netconsole or a
> > serial cable).
> >
> > Active / Total Objects (% used) : 478764 / 485383 (98.6%)
> > Active / Total Slabs (% used) : 14618 / 14635 (99.9%)
> > Active / Total Caches (% used) : 79 / 138 (57.2%)
> > Active / Total Size (% used) : 56663.79K / 57566.41K (98.4%)
> > Minimum / Average / Maximum Object : 0.01K / 0.12K / 128.00K
> >
> > OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
> > 403088 403088 100% 0.06K 6832 59 27328K nfs_page
> > 30380 30380 100% 0.50K 4340 7 17360K nfs_write_data
> > 15134 15134 100% 0.27K 1081 14 4324K radix_tree_node
> > ...
> >
> >
> > The other thing is that the stack trace showsd slabtop as being halted in throttle_vm_writeout
> > while allocating memory, and the writetest was halted waiting to allocate memory.
>
> Can somebody VM-savvy please explain how on earth they expect something
> like throttle_vm_writeout() to make progress? Shouldn't that thing at
> the very least be kicking pdflush every time it loops?

Can you try something like this patch, Kenny?

Cheers,
Trond


VM: Ensure that throttle_vm_writeout() can make progress

Once a process is in the loop inside throttle_vm_writeout(), it has
no guarantee that it will ever get out, since there is nothing that
will kickstart the flushing of unstable writes.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
---

mm/page-writeback.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index 5240e42..9a66dee 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -306,6 +306,8 @@ void throttle_vm_writeout(void)

if (wbs.nr_unstable + wbs.nr_writeback <= dirty_thresh)
break;
+ if (wbs.nr_unstable != 0)
+ wakeup_pdflush(wbs.nr_unstable);
blk_congestion_wait(WRITE, HZ/10);
}
}
\
 
 \ /
  Last update: 2005-12-05 21:36    [W:0.078 / U:0.704 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site