[Gluster-users] not sure how to troubleshoot SMB / CIFS overload when using GlusterFS
Anand Avati
anand.avati at gmail.com
Mon Jul 18 16:19:42 UTC 2011
Please fine responses inline.
> So now, knowing that GlusterFS is kicking into overdrive fretting about a
> file it can't find, I decided to eliminate the web server altogether. I
> opened up Windows Explorer, and typed in a directory that didn't exist, and
> sure enough, I'm unable to navigate through the share in another Explorer
> window until it finally responds again a minute later. I think the Page of
> Death was exhibiting such a massive death (e.g. only able to respond again
> upwards of five minutes later) because it was systematically trying to
> access several files that weren't found, and each one it can't find causes
> the SMB connection to hang for close to a minute.
>
Gluster does not really care if a file is not found. It just looks up the
filename on all servers and returns -ENOENT. End of story for Gluster.
What's happening here is that Samba is 'searching' through all filenames in
the directory to match some other filename with strcasecmp() to provide a
case-insensitive match to the user.
>
> I feel like this is a bit of major progress toward pinpointing the problem
> for a possible resolution. Here are some additional details that may help:
>
> The GlusterFS directory in question, /storage, has about 80,000 subdirs in
> it. As such, I'm using ext4 to overcome the subdir limitations of ext3.
> The non-existent image file that is able to cause everything to freeze
> exists in a directory, /storage/thisdirdoesntexist/images/blah.gif, where
> "thisdirdoesntexist" is in that storage directory along with those 80,000
> real subdirs. I know it's a pretty laborious thing for Gluster to piece
> together a directory listing, and combined with Joseph's recognition of the
> flood of "getdents", does it seem reasonable that Gluster or Samba is
> freezing because it's for some reason generating a subdir listing of
> /storage whenever it can't find one of its subdirs?
>
Yes, it is samba searching around for the case insensitive match.
As another test, if I access a file inside a non-existent subdir of a dir
> that only has five subdirs, and nothing freezes.
>
That is because iterating over 5 names to determine non existence of a case
insensitive match is trivially fast.
>
> So the freezing seems to be a function of the number of subdirectories that
> are siblings of the first part of the path that doesn't exist, if that makes
> sense. So in /this/is/a/long/path, if "is" doesn't exist, then Samba will
> generate a list of subdirs under "/this". And if "/this" has 100,000
> immediate subdirs under it, then you're about to experience a world of hurt.
>
> I read some where that FUSE's implementation of readdir() is a blocking
> operation. If true, the above explanation, plus FUSE's readdir(), are to
> blame.
>
What do you mean by that. FUSE's readdir() is as blocking or unblocking as
the rest of its open/create/getattr/setattr etc. What you probably meant was
that the fuse kernel module does not cache dirents?
> And I am therefore up a creek. It is not feasible to enforce the system to
> only have a few subdirs at any given level to prevent the lockup. Unless
> somebody, after reading this novel, has some ideas for me to try. =) Any
> magical ways to not get FUSE to block, or any trickery on Samba's side?
It is not FUSE blocking that is your problem. You need a quicker trick to
achieve case insensitivity.
Avati
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://supercolony.gluster.org/pipermail/gluster-users/attachments/20110718/8779827f/attachment.html>
More information about the Gluster-users
mailing list