EVFILT_VNODE doesn't scale to large directory trees?
Ivan Voras
ivoras at freebsd.org
Mon Oct 25 10:03:13 UTC 2010
On 10/25/10 03:05, Kenton Varda wrote:
> Hi all,
>
> I am trying to write some code which monitors a possibly-large directory
> tree for changes. Specifically, it's a build system, and I want it to
> automatically start rebuilding whenever I modify a source file.
>
> So far the approach I've taken is to use EVFILT_VNODE to watch every file
> and directory in the tree. This seems to work OK so far, but it worries me
> that I have to open() every single file. When I ran the same code on
> Darwin, it promptly hit the open file descriptor limit, and I'm worried that
> FreeBSD will do the same on larger code trees.
>
> Is there any better way to accomplish this? Hate to say it, but Linux's
> inotify() seems more scalable here. From what I can tell from the docs, it
> doesn't require opening the watched files and it will even watch all files
> in a directory with one call.
Short answer: no.
Long answer: There should be. There were past discussions on writing
such a facility to e.g. receive events for all files on per-mountpoint
basis (which you could filter...), but we're not there yet.
More information about the freebsd-questions
mailing list