From: Clint O. <cli...@gm...> - 2012-07-19 17:50:35
|
On Thu, Jul 19, 2012 at 9:39 AM, Clint Olsen <cli...@gm...> wrote: > On Thursday, July 19, 2012, Goswin von Brederlow wrote: > >> On Thu, Jul 19, 2012 at 02:17:58AM -0700, Clint Olsen wrote: >> > Can you explain what it means to have "caching enabled"? Where is this >> > setting? >> > >> > Thanks, >> > >> > -Clint >> > >> > On Thu, Jul 19, 2012 at 2:16 AM, Goswin von Brederlow < >> gos...@we...>wrote: >> > >> > > On Wed, Jul 18, 2012 at 02:15:58PM -0700, Clint Olsen wrote: >> > > > Hi: >> > > > >> > > > I have FUSE working on a project, and now I'm debugging performance >> > > issues. >> > > > Our server farm of which I have little/no control seems to have FUSE >> > > 2.7.4. >> > > > I at least see libfuse.so.2.7.4 in /lib. >> > > > >> > > > At any rate, I'm seeing getattr calls more than once for a directory >> > > entry, >> > > > and it's odd, I think: >> > > > >> > > > % ls -al /tmp/mnt/a/b # /a/b is under FUSE >> > > > >> > > > I get 4 getattr calls for /a/b and 3 for /a. Is that to be >> expected? I >> > > > would have expected (as much as possible) that directory contents >> would >> > > be >> > > > requested once. Is there any way to reduce/minimize this? >> > > > >> > > > Thanks, >> > > > >> > > > -Clint >> > > >> > > Do you have caching enabled? What timeout do you return? >> > > >> > > MfG >> > > Goswin >> > > >> >> On the command line you can set -o kernel_cache, auto_cache, >> entry_timeout=T, negative_timeout=T, attr_timeout=T, ac_attr_timeout=T >> and in the struct fuse_file_info there is keep_cache. >> >> I think the attr_timeout=T is probably the most relevant for you. >> >> And if you are using the lowlevel interface then there is also the >> attr_timeout and entry_timeout in struct fuse_entry_param. I think >> those mirror the command line options from the highlevel interface. >> >> MfG >> Goswin >> > > Thanks for the suggestions. So, which cache option should I consider? I > tried searching on kernel_cache vs. auto_cache etc. What's a sane default > for attr_timeout? > > Up until now I didn't know a low-level interface existed. Is this really > worth considering? I naively based my implementation on the hello world > example... > > The system I'm translating doesn't have all the ctime, mtime, atime, so > I've just been populating ctime and mtime with the same value. Is there any > caveat there? I saw that the times affected some cache option. I guess > atime should be updated when I open() a file... > > Thanks, > > -Clint > Another problem I'm noticing is that I'm logging when I call getattr(), but the output for the same operation (directory listing as mentioned before) is non-deterministic. Why is this? Is there non-determinism in FUSE? I can't very well compare enabling/disabling caching and timeout switches if I don't get the same answer every time. Trial 1: Getattr called 78 times Trial 2: Getattr called 81 times Trial 3: Getattr called 80 times This directory is quiescent the entire time as far as I can tell. -Clint |