Note: This is a beta release of Red Hat Bugzilla 5.0. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Also email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback here.
Bug 1510724 - [RFE] Enable parallel-readdir by default for all gluster volumes [NEEDINFO]
Summary: [RFE] Enable parallel-readdir by default for all gluster volumes
Alias: None
Product: Red Hat Gluster Storage
Classification: Red Hat
Component: readdir-ahead
Version: rhgs-3.4
Hardware: Unspecified
OS: Unspecified
Target Milestone: ---
: ---
Assignee: Poornima G
QA Contact: Rochelle
Depends On: 1631406
Blocks: 1660534 1662830
TreeView+ depends on / blocked
Reported: 2017-11-08 04:55 UTC by Poornima G
Modified: 2020-04-15 05:31 UTC (History)
8 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
: 1662830 (view as bug list)
Last Closed:
Target Upstream Version:
amukherj: needinfo? (sheggodu)

Attachments (Terms of Use)

Description Poornima G 2017-11-08 04:55:33 UTC
Description of problem:
Currently, parallel-readdir feature is optional, we have seen that this feature improves readdir performance greatly in large cluster, and to some extent in small cluster, its good to enable this feature by default.

Version-Release number of selected component (if applicable):

How reproducible:

Steps to Reproduce:

Actual results:

Expected results:

Additional info:

Comment 20 Raghavendra G 2019-01-02 06:42:42 UTC
Also see:

From a mail to gluster-devel titled "serialized readdir(p) across subvols and effect on performance"


As many of us are aware, readdir(p)s are serialized across DHT subvols. One of the intuitive first reactions for this algorithm is that readdir(p) is going to be slow.

However this is partly true as reading the contents of a directory is normally split into multiple readdir(p) calls and most of the times (when a directory is sufficiently large to have dentries and inode data is bigger than a typical readdir(p) buffer size - 128K when readdir-ahead is enabled and 4KB on fuse when readdir-ahead is disabled - on each subvol) a single readdir(p) request is served from a single subvolume (or two subvolumes in the worst case) and hence a single readdir(p) is not serialized across all subvolumes.

Having said that, there are definitely cases where a single readdir(p) request can be serialized on many subvolumes. A best example for this is a readdir(p) request on an empty directory. Other relevant examples are those directories which don't have enough dentries to fit into a single readdir(p) buffer size on each subvolume of DHT. This is where performance.parallel-readdir helps. Also, note that this is the same reason why having cache-size for each readdir-ahead (loaded as a parent for each DHT subvolume) way bigger than a single readdir(p) buffer size won't really improve the performance in proportion to cache-size when performance.parallel-readdir is enabled.

Though this is not a new observation [1] (I stumbled upon [1] after realizing the above myself independently while working on performance.parallel-readdir), I felt this as a common misconception (I ran into similar argument while trying to explain DHT architecture to someone new to Glusterfs recently) and hence thought of writing out a mail to clarify the same.




Note You need to log in before you can comment on or make changes to this bug.