"Instantaneous Notification" on OS X
Peter Arrenbrecht
peter.arrenbrecht at gmail.com
Tue Mar 18 03:40:08 CDT 2008
I have no experience with inotify, so I cannot judge whether the
per-dir FSEvents would do. I guess some people using inotify heavily
should speak up here. But if does stand a chance, I'd much prefer
something based on a public API. I presume some early experiments
would soon show if FSEvents works or whether /dev/fsevents is needed.
Are there any public repos people use inotify with to get acceptable
performance? Some stats on avg files per dir should give an early
indication.
-peo
On Tue, Mar 18, 2008 at 4:22 AM, Anant Narayanan <anant at kix.in> wrote:
> Hi,
>
> I'm interested in applying for the "Instantaneous Notification" GSoC
> project idea as listed on your Wiki [1]. I hope this is the right
> place to discuss SoC project ideas!
>
> While I'm not familiar with how notifications work in Windows, I have
> some idea of how things are laid out in the Mac. In OS X 10.4, there
> is no public API for filesystem changes; although /dev/fsevents is
> available (which is what Spotlight uses). However, using the fsevents
> file has several drawbacks (the API is private for a reason) - one
> badly behaved client is sufficient to spoil it for everyone. The
> kernel holds all events written to the file in a buffer until all
> interested applications have been notified. When heavy filesystem
> activity occurs (eg. when a huge tarball is unpacked or a large
> application is installed), it is possible that the buffer fills up and
> events are dropped. This method also requires us to run a daemon that
> continuously monitors the file, lest we miss certain changes, although
> this requirement can be overcome with 3rd party wrappers over the
> fsevents file, like fslogger [2].
>
> In OS X 10.5 (Leopard) however, a public API for filesystem changes
> called FSEvents [3] has appeared. The kernel does the job of
> continuously monitoring the fsevents file and writing them to a log,
> so our application can start at any time and say "What's changed since
> the last time I asked?". Also, since the API is public (i.e. meant to
> be used), this seems like the the ideal way to go. There is no chance
> of us missing events.
>
> Using the FSEvents API has one disadvantage when compared to probing /
> dev/fsvents, it notifies us of directory changes only (much like the
> older dnotify system in Linux). We still have to scan the directories
> FSEvents returns and compare them to our cached versions to tell the
> difference. Hence, the speedup may not be as significant as that
> gained by inotify on Linux.
>
> To sum up, is an FSEvents based (hence 10.5 only) solution appear to
> something that would interest the Mercurial project?
> Thanks in advance for your comments :)
>
> Regards,
> Anant
>
> [1] http://www.selenic.com/mercurial/wiki/index.cgi/SummerOfCode#head-6d81aaeb76c2326101997f7eb92a202f8478cb4e
> [2] http://osxbook.com/software/fslogger/
> [3] http://developer.apple.com/documentation/Darwin/Conceptual/FSEvents_ProgGuide/Introduction/chapter_2_section_1.html
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
>
More information about the Mercurial-devel
mailing list