[Bugs] [Bug 1644389] New: [GSS] Directory listings on fuse mount are very slow due to small number of getdents () entries

bugzilla at redhat.com bugzilla at redhat.com
Tue Oct 30 17:19:22 UTC 2018


https://bugzilla.redhat.com/show_bug.cgi?id=1644389

            Bug ID: 1644389
           Summary: [GSS] Directory listings on fuse mount are very slow
                    due to small number of getdents() entries
           Product: Red Hat Gluster Storage
           Version: 3.3
         Component: fuse
          Keywords: Reopened
          Severity: high
          Priority: high
          Assignee: csaba at redhat.com
          Reporter: ccalhoun at redhat.com
        QA Contact: rhinduja at redhat.com
                CC: atumball at redhat.com, bugs at gluster.org,
                    csaba at redhat.com, jbyers at stonefly.com,
                    mpillai at redhat.com, nh2-redhatbugzilla at deditus.de,
                    pgurusid at redhat.com, rgowdapp at redhat.com,
                    rhs-bugs at redhat.com, sankarshan at redhat.com,
                    storage-qa-internal at redhat.com, vbellur at redhat.com
        Depends On: 1478411, 1294936
            Blocks: 1441417, 1499605, 1492625, 1522710, 1529075



+++ This bug was initially created as a clone of Bug #1478411 +++

I have a GlusterFS 3.10 volume and mounted it with the fuse mount (`mount -t
glusterfs`), both on Linux.

On it I have a directory with 1 million files in it.

It takes very long to `find /that/directory`.

Using `strace`, I believe I discovered (at least part of) the reason:

1501854600.235524 getdents(4, /* 20 entries */, 131072) = 1048
1501854600.235727 getdents(4, /* 20 entries */, 131072) = 1032
1501854600.235922 getdents(4, /* 20 entries */, 131072) = 1032

Despite `find` issuing `getdents()` with a large buffer size of 128K, glusterfs
always only fills in 20 directory entries.

Each of those takes a network roundtrip (seemingly).

I also strace'd the brick on the server, where everything seems fine: There
getdents() returns typically 631 entries, filling the 32KB buffer which the
brick implementation uses for getdents().

If the find could also do ~631 per call, my directory listing would probably be
30x faster!

So it seems like _something_ in gluster or fuse caps the number of getdents
results per call to roughly 20.

What could that be?


Referenced Bugs:

https://bugzilla.redhat.com/show_bug.cgi?id=1441417
[Bug 1441417] slow performance with directory operations on Fuse
https://bugzilla.redhat.com/show_bug.cgi?id=1478411
[Bug 1478411] Directory listings on fuse mount are very slow due to small
number of getdents() entries
https://bugzilla.redhat.com/show_bug.cgi?id=1492625
[Bug 1492625] Directory listings on fuse mount are very slow due to small
number of getdents() entries
https://bugzilla.redhat.com/show_bug.cgi?id=1499605
[Bug 1499605] Directory listings on fuse mount are very slow due to small
number of getdents() entries
https://bugzilla.redhat.com/show_bug.cgi?id=1522710
[Bug 1522710] Directory listings on fuse mount are very slow due to small
number of getdents() entries
https://bugzilla.redhat.com/show_bug.cgi?id=1529075
[Bug 1529075] Directory listings on fuse mount are very slow due to small
number of getdents() entries
-- 
You are receiving this mail because:
You are on the CC list for the bug.
Unsubscribe from this bug https://bugzilla.redhat.com/token.cgi?t=cAgLELKXfl&a=cc_unsubscribe


More information about the Bugs mailing list