On Fri, Apr 20, 2012 at 06:50:44AM +0000, Kirk McKusick wrote:
> Author: mckusick
> Date: Fri Apr 20 06:50:44 2012
> New Revision: 234482
> URL: http://svn.freebsd.org/changeset/base/234482
> 
> Log:
>   This change creates a new list of active vnodes associated with
>   a mount point. Active vnodes are those with a non-zero use or hold
>   count, e.g., those vnodes that are not on the free list. Note that
>   this list is in addition to the list of all the vnodes associated
>   with a mount point.
>   
>   To avoid adding another set of linkage pointers to the vnode
>   structure, the active list uses the existing linkage pointers
>   used by the free list (previously named v_freelist, now renamed
>   v_actfreelist).
>   
>   This update adds the MNT_VNODE_FOREACH_ACTIVE interface that loops
>   over just the active vnodes associated with a mount point (typically
>   less than 1% of the vnodes associated with the mount point).
[...]
> @@ -1099,6 +1128,14 @@ insmntque1(struct vnode *vp, struct moun
>       VNASSERT(mp->mnt_nvnodelistsize >= 0, vp,
>               ("neg mount point vnode list size"));
>       mp->mnt_nvnodelistsize++;
> +     KASSERT((vp->v_iflag & VI_ACTIVE) == 0,
> +         ("Activating already active vnode"));
> +     vp->v_iflag |= VI_ACTIVE;
> +     mtx_lock(&vnode_free_list_mtx);
> +     TAILQ_INSERT_HEAD(&mp->mnt_activevnodelist, vp, v_actfreelist);
> +     mp->mnt_activevnodelistsize++;
> +     mtx_unlock(&vnode_free_list_mtx);
> +     VI_UNLOCK(vp);
>       MNT_IUNLOCK(mp);
>       return (0);
>  }


Now, for every vnode that is activated, it has to go through global
mutex, which seems like scalability issue to me. With ZFS it is typical
to have a lot of file systems and this global mutex was not needed
before (well, it was needed, but only to get vnode from the free list).

If we require vnode interlock to be held during v_actfreelist
manipulation then why can't we use interlock+vnode_free_list_mtx when
operating on the free list and interlock+per-mountpoint-lock when
operating on mnt_activevnodelist?

-- 
Pawel Jakub Dawidek                       http://www.wheelsystems.com
FreeBSD committer                         http://www.FreeBSD.org
Am I Evil? Yes, I Am!                     http://tupytaj.pl

Attachment: pgp6m3o29Zfgk.pgp
Description: PGP signature

Reply via email to