[Bugs] [Bug 1499649] New: Need option to control number of client-io-threads

bugzilla at redhat.com bugzilla at redhat.com
Mon Oct 9 08:10:37 UTC 2017


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

            Bug ID: 1499649
           Summary: Need option to control number of client-io-threads
           Product: GlusterFS
           Version: 3.12
         Component: io-threads
          Assignee: bugs at gluster.org
          Reporter: mpillai at redhat.com
                CC: bugs at gluster.org



Description of problem:

The option "performance.client-io-threads on" is useful in situations where the
fuse-thread bottlenecks. We see such situations often with disperse volumes>
But we also see it with other volume types, esp. on small random I/O.

The number of client io-threads started is controlled by the option
performance.io-thread-count, which by default is 16. That number is generally
too high for client-io-threads. However, reducing io-thread-count can introduce
bottlenecks on the brick side, since the same option controls number of
io-threads on both client-side and brick. 

Ideally, we would have a separate option for controlling the number of
client-side io-threads.

Version-Release number of selected component (if applicable):
glusterfs*-3.12.1-2.el7.x86_64


Actual results:

I have a single-brick distribute volume created on ramdisk. On this I run a
random I/O read workload with 4k block size.

Results with different options:

performance.client-io-threads off: 63.9MiB/s i.e approx. 16k iops
[in the above, the fuse thread is the bottleneck at 99% CPU utilization]


[impact of turning client-io-threads on, without tuning io-thread-count, which
by default is 16. mutrace seemed to report contention among the
client-io-threads in this case; need to dig more into that]
performance.client-io-threads on : 98.5MiB/s

performance.client-io-threads on,
performance.io-thread-count 2    : 104MiB/s

performance.client-io-threads on,
performance.io-thread-count 1    : 69.7MiB/s

In the run with io-thread-count=1, there seems to be a bottleneck at the brick:
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND      
 9263 root      20   0  682268  20792   3872 R 99.9  0.0   1:00.43
glusteriotwr0                              
 9166 root      20   0 1248736  28304   4956 R 50.0  0.1   0:29.33
glusteriotwr0 

Ideally, we would like to set number of client-io-threads to 1 or 2: just
enough to eliminate the fuse-thread bottleneck, but not so high that it
introduces contention among the client-io-threads. But depending on the nature
of the brick device we may not want to reduce io-thread-count.


Additional info:

Thanks to Ravi, for clarifying io-threads behavior and providing the pointer:
https://github.com/gluster/glusterfs/commit/09232fd6855f288c47b5396dcd4d4245a154576f

Krutika also reports that a high number of client-io-threads is not needed:
https://bugzilla.redhat.com/show_bug.cgi?id=1467614#c16. Some of the other
observations in this bz differs from hers though.

-- 
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