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
pgp6m3o29Zfgk.pgp
Description: PGP signature