cvs commit: src/sys/kern vfs_cache.c
Matthew Dillon
dillon at crater.dragonflybsd.org
Sat Sep 17 01:33:47 PDT 2005
dillon 2005/09/17 01:29:42 PDT
DragonFly src repository
Modified files:
sys/kern vfs_cache.c
Log:
With the new FSMID flag scheme we can optimize the update of the chain by
stopping once we hit a namecache node that already has NCF_FSMID set. Since
the bit is only cleared when a node is 'observed' with [f][l]stat(), or
when it is reclaimed, the result is that high performance I/O's on a node
do not have to update the entire namecache chain to root on each operation.
Basically the idea of the FSMID is to be able to optimally monitor changes
in a filesystem hierarchy. When we see the FSMID of a node change we know
we have to scan its sub-tree. But there's no reason to change the FSMID of
the parent node AGAIN while further changes are made to the children AFTER
the original observation if the scan of the sub-tree has NOT YET REACHED
those children. This is a kind of Einsteinian-observer effect, but it
works!
If on the other hand we are trying to detect changes in a tree by
monitoring an FSMID, but we do not bother to rescan the tree after noting
such a change in a parent node, this optimization will break us.
This is a solution to a problem Joerg Sonnenberger posed with regard to
the detrimental effect that could occur when a high rate of I/O is
performed on a file deep in a directory tree.
Revision Changes Path
1.59 +30 -5 src/sys/kern/vfs_cache.c
http://www.dragonflybsd.org/cvsweb/src/sys/kern/vfs_cache.c.diff?r1=1.58&r2=1.59&f=u
More information about the Commits
mailing list