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

bugzilla at redhat.com bugzilla at redhat.com
Fri Aug 4 14:02:07 UTC 2017


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



--- Comment #1 from nh2 <nh2-redhatbugzilla at deditus.de> ---
Here's some more info that might hint at what the problem is:

Using the example program for getdents() from
http://man7.org/linux/man-pages/man2/getdents.2.html and running it on my
directory, I got this output (file names blacked out with "a"):

getdents(3, /* 16 entries */, 10240)    = 1552
--------------- nread=1552 ---------------
inode#    file type  d_reclen  d_off   d_name
-6047993476399939220  regular      88      17156 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-8239326137575567467  regular      88      17176 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-9058837543795989278  regular     112      17202 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-7474310353771725673  regular     112      17228 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-8618906312059539401  regular     112      17254 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-7247259159244687795  regular     112      17280 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-5665523655409565673  regular      88      17300 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-9046493272173795318  regular      88      17320 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-7953905749837767518  regular      88      17340 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-5289646910623071030  regular      88      17360 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-6314634794173123334  regular      88      17380 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-7954285670050863136  regular      88      17412 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-7849401699957688376  regular      88      17432 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-5006798607229018939  regular      88      17452 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-8323485281078848697  regular     112      17478 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-8119158990388255908  regular     112      17504 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
getdents(3, /* 20 entries */, 10240)    = 1056
--------------- nread=1056 ---------------
inode#    file type  d_reclen  d_off   d_name
-8208236586179861811  regular      48      17874  aaaaaaaaaaaaaaaaaaaaaaaaaa
-5119236985543845211  regular      56      17884  aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-5836971644108853015  regular      48      17894  aaaaaaaaaaaaaaaaaaaaaaaaaa
-9155148501485991780  regular      56      17904  aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-8305938675436910138  regular      56      17916 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-5221102094207784962  regular      56      17928 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-8599523819072935976  regular      48      17938  aaaaaaaaaaaaaaaaaaaaaaaaaa
-5829978250186564000  regular      56      17948  aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-5911118020253503871  regular      48      17958  aaaaaaaaaaaaaaaaaaaaaaaaaa
-6764000214102234557  regular      56      17968  aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-7204082494066266145  regular      56      17980 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-4637505561517422757  regular      48      17990  aaaaaaaaaaaaaaaaaaaaaaaaaa
-9108705813292338787  regular      56      18000  aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-6331907578899300543  regular      48      18010  aaaaaaaaaaaaaaaaaaaaaaaaaa
-6095357471175923268  regular      56      18020  aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-6954382210669410793  regular      56      18032 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-4974133016612012201  regular      48      18042  aaaaaaaaaaaaaaaaaaaaaaaaaa
-5903271582479185642  regular      56      18052  aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-6924142753799783732  regular      56      18064 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-6781216297939192739  regular      48      18074  aaaaaaaaaaaaaaaaaaaaaaaaaa


It seems like when the file names are longer, (first block) getdents() returns
less results -- 16 in the above case instead of the usual 20.

So I wonder if there's some fuse-related buffer that gets filled that results
getdents() returning so few entries, and whether I can adjust it somehow.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
You are the assignee for the bug.


More information about the Bugs mailing list