When a GlusterFS volume slows down, client timings alone cannot show which brick or file operation is consuming server-side time. Volume profiling adds per-brick counters so an operator can isolate whether LOOKUP, READ, WRITE, FSYNC, or another FOP is carrying latency during a controlled sample window.

The gluster volume profile command enables diagnostic hit counts and latency measurement on the selected volume. After a representative workload runs, profile info reports block-size read/write counters, per-operation latency, call counts, sample duration, and byte totals for each brick.

Volume profiling is a diagnostic switch, not a long-term monitor. Keep the sample short, run it from a trusted pool node, stop profiling after collecting the report, and compare profile output with client-side timing because the report covers the server-side GlusterFS path rather than the full application request path.

Steps to profile GlusterFS volume performance:

  1. Confirm the target volume is started and note the brick names before sampling.
    $ sudo gluster volume info volume1
    
    Volume Name: volume1
    Type: Distributed-Replicate
    Volume ID: 9b9f2d4f-3c3a-4c3e-8c10-5b2f8b1f1e32
    Status: Started
    Snapshot Count: 0
    Number of Bricks: 1 x 2 = 2
    Transport-type: tcp
    Bricks:
    Brick1: node1:/srv/gluster/brick1
    Brick2: node2:/srv/gluster/brick1

    Run the profile commands from a node in the trusted storage pool. Use the brick names in later output to spot whether one brick is slower or busier than its peers.

  2. Start profiling for the volume.
    $ sudo gluster volume profile volume1 start
    Profiling started on volume1

    Profiling adds CPU and I/O work on the bricks, so leave it enabled only while collecting the troubleshooting sample.

  3. Confirm the profiling counters are enabled for the volume.
    $ sudo gluster volume info volume1
    
    Volume Name: volume1
    Status: Started
    Options Reconfigured:
    diagnostics.count-fop-hits: on
    diagnostics.latency-measurement: on

    diagnostics.count-fop-hits records operation counts, and diagnostics.latency-measurement records operation latency while profiling is active.

  4. Clear old profile counters before starting the workload sample.
    $ sudo gluster volume profile volume1 info clear

    Clearing counters keeps earlier workload history out of the current incident window.

  5. Run the workload that reproduces the slow operation from a normal client mount.

    Use the same client path, file set, and concurrency that showed the symptom. A synthetic workload can miss directory lookup, small-file, lock, or fsync behavior that appears only in the real application path.

  6. Display the cumulative profile report after the workload finishes.
    $ sudo gluster volume profile volume1 info
    Brick: node1:/srv/gluster/brick1
    -------------------------------------------
    Cumulative Stats:
    
    Block Size:              1b+              32b+              64b+
    No. of Reads:              0                2                6
    No. of Writes:           184               29               11
    
    Block Size:            128b+             256b+            512b+
    No. of Reads:            10               18               21
    No. of Writes:           37               52               26
    
    %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop
    ---------   -----------   -----------   -----------   ------------        ----
      0.32        92.10 us      11.00 us    11234.00 us            4124        LOOKUP
      1.15       280.55 us      18.00 us    30110.00 us             986       GETXATTR
      4.88      1120.44 us      35.00 us  1800970.00 us             211         WRITE
      7.41      1698.02 us      29.00 us  2569638.00 us             188         READ
      9.07      2110.77 us      44.00 us  7789367.00 us              22        FSYNC
    
    Duration     : 300
    BytesRead    : 25165824
    BytesWritten : 67108864
    ##### snipped #####

    Compare Avg-latency, Max-Latency, and No. of calls for the same FOP across bricks. High latency on one brick points toward brick-local disk, filesystem, or process pressure; high call counts across all bricks usually points back to the workload pattern.

  7. Display an incremental report when comparing the next interval only.
    $ sudo gluster volume profile volume1 info incremental
    Brick: node1:/srv/gluster/brick1
    -------------------------------------------
    Interval 0 Stats:
    %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop
    ---------   -----------   -----------   -----------   ------------        ----
      0.44       110.22 us      13.00 us     8120.00 us             911        LOOKUP
      3.92      1450.10 us      51.00 us   950120.00 us              47         WRITE
      6.87      2012.33 us      38.00 us  1210090.00 us              41         READ
    
    Duration     : 60
    BytesRead    : 4194304
    BytesWritten : 10485760
    ##### snipped #####

    Run the incremental command after each short test interval when comparing before/after tuning changes or different client workloads.

  8. Stop profiling as soon as the sample is collected.
    $ sudo gluster volume profile volume1 stop
    Profiling stopped on volume1
  9. Verify profiling is disabled for the volume.
    $ sudo gluster volume profile volume1 info
    volume profile: volume1: command failed: Profiling not started

    Archive the report with the matching client-side timing, volume type, brick list, and workload description before changing performance options.
    Related: How to improve GlusterFS performance