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

Re: [Linux-cluster] Can anyone (Ken?) explain why num_glockd mount option is there? TIA. EOM.

On Thu, Aug 26, 2004 at 10:55:29AM -0700, Cahill, Ben M wrote:
> Can anyone (Ken?) explain why num_glockd mount
>         option is there? TIA. EOM.

One of the things (probably the major thing) that GFS uses memory for
that's different from other filesystems is locks.  That introduces the
interesting property that in order for GFS to free that memory, it has
to do network I/O to unlock locks.  (The same is true for memory that
contains dirty disk blocks, but the VM knows about that.)  This means that
freeing memory can only happen so quickly.

In the past, GFS had one thread (gfs_glockd) that would scan through the
glock hash table looking for cached locks that were no longer needed.
It would then unlock those locks and free the memory associated with them.
But as it turned out, there were memory problems, if you had a few
processes that were scanning through huge directory trees.  You could
get into a situation where you were acquiring new locks much faster than
gfs_glockd could release old ones.  (There were many threads acquiring,
but only one thread releasing.)  If this kept up, you'd soon run out
of memory and bad things would happen.

My first quick-n-dirty solution to this was to add the num_glockd mount
option.  It would create many many threads that would look for unused
locks and unlock them.  You could balance out acquiring and releasing
processes if you knew what workload you were running.  So, that's why the
option was there originally.

Multiple gfs_glockd processes didn't completely solve the problem, though.
You could still get into the situation where GFS wasn't responding
quickly enough to memory pressure.  So I made a bunch of changes that
made things a lot better:

1) I broke gfs_glockd into two threads:
	A) gfs_scand - scans the glock hash table looking for glocks
	   to demote.  When it finds one, it puts it onto a reclaim list
	   of unneeded locks, and wakes up gfs_glockd.  
	B) gfs_glockd - looks at that the glocks on that reclaim list
	   and starts demoting them.
2) When the number of locks on the reclaim list becomes too great,
   threads that want to acquire new locks will pitch in and release a
   couple of locks before acquiring a new one.
3) GFS is more proactive about putting locks that it knows it won't need
   onto the reclaim list.  This reduces the need for gfs_scand and
   actually walking the hash table.  There's more work that could be done
   in this area.

So, I left the num_glockd option there to in case it's still needed for
some reason.  But because of #2 above, I don't think it will be.  The
option may go away in the future.

Ken Preslan <kpreslan redhat com>

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