From: Ray Lee <ray-lk@madrabbit.org>
To: Paul Jackson <pj@sgi.com>
Cc: rml@novell.com, akpm@osdl.org, ttb@tentacle.dhs.org,
cfriesen@nortelnetworks.com,
Linux Kernel <linux-kernel@vger.kernel.org>,
gamin-list@gnome.org, viro@parcelfarce.linux.theplanet.co.uk,
iggy@gentoo.org
Subject: Re: [RFC][PATCH] inotify 0.10.0
Date: Thu, 30 Sep 2004 18:22:35 -0700 [thread overview]
Message-ID: <1096593755.26742.168.camel@orca.madrabbit.org> (raw)
In-Reply-To: <20040930104808.291d9ddc.pj@sgi.com>
Okay, now I'm sure I'm not communicating well. Please let me try again,
and I'll see if I can do better this time.
On Thu, 2004-09-30 at 10:48 -0700, Paul Jackson wrote:
> Ray wrote:
> > However, dnotify has shown that forcing userspace to cache the
> > entire contents of all the directories it wishes to watch doesn't scale
> > well.
>
> The dnotify cache isn't just an optional performance tweak, caching
> inode to name. It's an essential tracking of much of the stat
> information of any file of interest, in order to have _any_ way of
> detecting which file changed.
Agreed.
> The inotify cache could just have the last few most recently used
> entries or some such - it's just a space vs time performance tradeoff.
Not the case.
> So passing back an inode number doesn't come close to reintroducing
> the forced tracking of all the interesting stat data of every file.
It certainly forces userspace to track all file names and inodes, at
least. Userspace wishes to know about deletes and renames. Unless it
caches everything, it won't know what was deleted, or what got renamed.
For that matter, passing back the inode number might also cause
confusion for hardlinked files in the same directory, though I'd have to
think about that for a bit to be sure.
Perhaps I'm missing something. I haven't missed anything yet today,
which means I'm overdue.
> > dnotify already forces an O(N) workload per directory onto
> > userspace, and that has shown itself to not work well.
>
> Just because there exists an O(N) solution that has been shown to fail
> doesn't mean all O(N) solutions fail.
<shrug> Okay, I'll agree with you in theory. This is in fact true for
several classes of multiplication algorithms, for example. (Who's gonna
do an FFT multiply of two two-digit numbers, I ask; no one.) So, yeah, I
get your point. Honest.
> If the constants change enough,
> then the actual numbers (how many changes per minute, how many compute
> cycles and memory bytes, what's the likely cache hit rate for a given
> size cache, ...) need to be re-examined. I see no evidence of that
> re-examination -- am I missing something?
This is one of the parts I'm not communicating well. For any 'event'
that inotify wants to relay, the kernel knows the inode and the name.
You're saying pass the inode number, as it's smaller and makes for an
easier and higher speed interface to get changes to userspace (if I
understand you correctly).
I'm saying, sure, if you look at that corner of the problem, you're
right. That's ignoring how this gets used, however, where userspace
ultimately wants to know the name of the file that's changed. So, by
your method, we scan the entire directory, looking for the inode that
matches via the getdents call.
So, the kernel ended up sending the name of the changed file *anyway*,
but userspace had to ask for it. And, oh, the kernel sent the name of
every other file in that directory too. (Okay, maybe half, but then
again maybe not if you want to catch hardlinked files.)
> > the kernel *has* that information already, ...
>
> Frustrating, isn't it. The information is right there, and we're trying
> to keep you from getting to it.
>
> Whatever ...
No, that's not my point at all. I'm not saying Big Bad Kernel Developers
won't let me have my candy. I'm saying that if the kernel has the
information already, and we're not passing it to userspace, and
userspace *needs* that information, then all we've done is guarantee
another long set of syscalls while it tries to pull the directory
contents to match up item for item against its cache of previously known
file states.
Or, in other words, I don't see how tossing away needed information is
going to make anything more efficient in this case. Userspace, like a
bulldog, will be coming back knocking on the kernel's door to get that
information one way or another.
~ ~
I've been avoiding saying this, as this really will be a bit more
complex than even my suggestions, but perhaps everyone would be happier
if we crammed all this through a netlink socket instead. Got me.
Ray
next prev parent reply other threads:[~2004-10-01 1:23 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-09-27 2:02 [RFC][PATCH] inotify 0.10.0 John McCutchan
2004-09-27 4:17 ` Andrew Morton
2004-09-27 20:52 ` Robert Love
2004-09-28 4:41 ` Andrew Morton
2004-09-28 2:14 ` Robert Love
2004-09-28 3:44 ` John McCutchan
2004-09-28 17:31 ` Robert Love
2004-09-28 5:45 ` Ray Lee
2004-09-28 19:08 ` Andrew Morton
2004-09-28 16:41 ` Chris Friesen
2004-09-28 16:53 ` Robert Love
2004-09-28 17:32 ` Ray Lee
2004-09-28 20:34 ` John McCutchan
2004-09-28 21:20 ` Ray Lee
2004-09-30 4:15 ` Andrew Morton
2004-09-30 1:32 ` John McCutchan
2004-09-30 1:34 ` Robert Love
2004-09-30 3:05 ` Paul Jackson
2004-09-30 5:37 ` Chris Friesen
2004-09-30 12:43 ` Paul Jackson
2004-09-30 15:29 ` Ray Lee
2004-09-30 16:27 ` Paul Jackson
2004-09-30 16:53 ` Ray Lee
2004-09-30 17:48 ` Paul Jackson
2004-10-01 1:22 ` Ray Lee [this message]
2004-10-01 4:09 ` Paul Jackson
2004-10-04 20:58 ` Ray Lee
2004-09-28 20:40 ` John McCutchan
2004-09-28 20:47 ` Robert Love
2004-09-28 21:39 ` Ray Lee
2004-09-28 22:10 ` Robert Love
2004-09-28 21:32 ` Ray Lee
2004-09-30 4:31 ` Andrew Morton
2004-09-28 20:26 ` John McCutchan
2004-09-28 21:10 ` Ray Lee
2004-09-28 21:20 ` Robert Love
2004-09-28 21:21 ` John McCutchan
2004-09-28 21:35 ` Robert Love
2004-09-28 21:50 ` Ray Lee
2004-09-28 22:03 ` Robert Love
2004-09-27 16:21 ` [gamin] [RFC][PATCH] inotify 0.10.0 [u] Martin Schlemmer [c]
2004-09-27 16:24 ` Robert Love
2004-09-27 16:30 ` Martin Schlemmer [c]
2004-09-27 16:35 ` Robert Love
2004-09-27 17:10 ` Martin Schlemmer [c]
2004-09-27 16:25 ` Martin Schlemmer [c]
2004-09-27 17:12 ` [RFC][PATCH] inotify 0.10.0 Robert Love
2004-09-27 19:48 ` Paul Jackson
2004-09-27 20:22 ` patch] inotify: use bitmap.h functions Robert Love
2004-09-27 20:38 ` Paul Jackson
2004-09-27 19:51 ` [patch] inotify: make it configurable Robert Love
2004-09-27 19:53 ` [patch] inotify: doh Robert Love
2004-09-27 20:06 ` [RFC][PATCH] inotify 0.10.0 Robert Love
2004-09-27 20:39 ` [patch] inotify: don't check private_data Robert Love
2004-09-28 1:05 ` [patch] inotify: silly fix Robert Love
2004-09-28 17:38 ` [RFC][PATCH] inotify 0.10.0 Mike Waychison
2004-09-28 20:35 ` John McCutchan
2004-09-28 17:48 ` [patch] inotify: remove timer Robert Love
2004-09-28 21:46 ` [patch] inotify: use the idr layer Robert Love
2004-09-28 21:58 ` John McCutchan
2004-09-28 22:08 ` Robert Love
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1096593755.26742.168.camel@orca.madrabbit.org \
--to=ray-lk@madrabbit.org \
--cc=akpm@osdl.org \
--cc=cfriesen@nortelnetworks.com \
--cc=gamin-list@gnome.org \
--cc=iggy@gentoo.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pj@sgi.com \
--cc=rml@novell.com \
--cc=ttb@tentacle.dhs.org \
--cc=viro@parcelfarce.linux.theplanet.co.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.