Source-Changes-D archive

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

Re: CVS commit: src/sys/fs/puffs



On Sat, Sep 24, 2011 at 03:31:02AM +0000, YAMAMOTO Takashi wrote:
> pagedaemon flushes dirty pages by itself, yes.

I added a printf() at the beginning of puffs_vnop_strategy() to check for
calls by kernel threads. Only ioflush calls puffs_vnop_strategy(), 
pagedaemon never goes there. This may explain why the system cannot cope 
with PUFFS and memory shortage.

An interesting point: if I use PDPOLICY_CLOCKPRO, then pagedaemon does
call  puffs_vnop_strategy(), through the path below. I understand this is
the way it is supposed to work:
  puffs_vnop_strategy
  VOP_STRATEGY
  genfs_do_io
  genfs_gop_write
  genfs_do_putpages
  genfs_putpages
  VOP_PUTPAGES (through pgo->pgo_put)
  uvm_pageout

The system still gets stuck after a while, with glusterfsd sleeping forever
in flt_noram1. ddb' show uvmexp shows 3 free pages, 509 paging. If I 
understand correctly, pagedaemon performs an asynchronous VOP_STRATEGY 
and count an operation stuck in the PUFFS filesystem as paging. It decides
to do more work if uvmexp.free + uvmexp.paging gets too low. therefore
with many PUFFS page forever in the paging count, pagedaemon will not help
us.

I have a patch that maintain a count of paging to remote filesystems (that
is, the one that do not have MNT_LOCAL in struct mount mnt_flag), and 
substract it from  uvmexp.paging when pagedaemon has to decide whether to 
send more pages to the swap. It seems to work fine, but the system hang 
with perfused awaiting for km_getwait2 (from sys_write/putter_fop_write)

-- 
Emmanuel Dreyfus
manu%netbsd.org@localhost


Home | Main Index | Thread Index | Old Index