Re: nfs unhappiness with memory pressure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <[email protected]>
---

 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);
         }
 }

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux