Page MenuHomeSoftware Heritage
Paste P839

(An Untitled Masterwork)
ActivePublic

Authored by haltode on Oct 27 2020, 10:07 AM.
[Question] getdents() calls use very small buffer when FUSE mount
Hello all!
I am currently working on a FUSE filesystem where a directory can
contain a large amount of entries. When running `strace ls` I can see a
lot of calls to getdents64() but with *very* small buffer:
getdents64(3, /* 19 entries */, 32768) = 1368
getdents64(3, /* 19 entries */, 32768) = 1368
getdents64(3, /* 19 entries */, 32768) = 1368
getdents64(3, /* 19 entries */, 32768) = 1368
getdents64(3, /* 19 entries */, 32768) = 1368
getdents64(3, /* 19 entries */, 32768) = 1368
getdents64(3, /* 19 entries */, 32768) = 1368
...
This is completely killing the performances of the filesystem and I was
wondering what causes such buffer size limitation? I stumbled upon a few
posts, like this one:
https://bugzilla.redhat.com/show_bug.cgi?id=1478411 about the same kind
of problem, however I am not sure whether there is still a pending patch
somewhere or a particular option to set in order to fix this issue?
My system is:
- Debian GNU/Linux bullseye/sid (testing)
- Linux kernel 5.8.0-2-amd64 (x86-64)
- libfuse 3.10.0
Thanks in advance for your insights.
Sincerely,

Event Timeline

haltode created this object in space S1 Public.