69 lines
3.0 KiB
Plaintext
69 lines
3.0 KiB
Plaintext
Demonstrations of biolatpcts, the Linux eBPF/bcc version.
|
|
|
|
|
|
biolatpcts traces block device I/O (disk I/O), and prints the latency
|
|
percentiles per I/O type. Example:
|
|
|
|
# ./biolatpcts.py /dev/nvme0n1
|
|
nvme0n1 p1 p5 p10 p16 p25 p50 p75 p84 p90 p95 p99 p100
|
|
read 95us 175us 305us 515us 895us 985us 995us 1.5ms 2.5ms 3.5ms 4.5ms 10ms
|
|
write 5us 5us 5us 15us 25us 135us 765us 855us 885us 895us 965us 1.5ms
|
|
discard 5us 5us 5us 5us 135us 145us 165us 205us 385us 875us 1.5ms 2.5ms
|
|
flush 5us 5us 5us 5us 5us 5us 5us 5us 5us 1.5ms 4.5ms 5.5ms
|
|
[...]
|
|
|
|
Unless changed with the -i option, the latency percentiles are printed every 3
|
|
seconds.
|
|
|
|
|
|
Any number of custom percentiles can be requested with the -p option:
|
|
|
|
# ./biolatpcts.py /dev/nvme0n1 -p 01,90.0,99.9,99.99,100.0
|
|
|
|
nvme0n1 01 90.0 99.9 99.99 100.0
|
|
read 5us 4.5ms 16ms 22ms 26ms
|
|
write 15us 255us 365us 515us 2.5ms
|
|
discard - - - - -
|
|
flush 5us 5us 5us 5us 24ms
|
|
[...]
|
|
|
|
Note that the target percentile strings are preserved as-is to facilitate
|
|
exact key matching when the output is consumed by another program.
|
|
|
|
|
|
When the output is consumed by another program, parsing can be tedious. The -j
|
|
option makes biolatpcts output results in json, one line per interval.
|
|
|
|
# ./tools/biolatpcts.py /dev/nvme0n1 -j
|
|
{"read": {"1": 2.5e-05, "5": 3.5e-05, "10": 4.5e-05, "16": 0.000145, "25": 0.000195, "50": 0.000355, "75": 0.000605, "84": 0.000775, "90": 0.000965, "95": 0.0015, "99": 0.0025, "100": 0.0235}, "write": {"1": 5e-06, "5": 5e-06, "10": 5e-06, "16": 5e-06, "25": 1.5e-05, "50": 2.5e-05, "75": 4.5e-05, "84": 7.5e-05, "90": 0.000195, "95": 0.000665, "99": 0.0015, "100": 0.0035}, "discard": {"1": 0.0, "5": 0.0, "10": 0.0, "16": 0.0, "25": 0.0, "50": 0.0, "75": 0.0, "84": 0.0, "90": 0.0, "95": 0.0, "99": 0.0, "100": 0.0}, "flush": {"1": 0.0, "5": 0.0, "10": 0.0, "16": 0.0, "25": 0.0, "50": 0.0, "75": 0.0, "84": 0.0, "90": 0.0, "95": 0.0, "99": 0.0, "100": 0.0}}
|
|
[...]
|
|
|
|
|
|
By default biolatpcts measures the duration each IO was on the device. It can
|
|
be changed using the -w option.
|
|
|
|
|
|
USAGE message:
|
|
|
|
usage: biolatpcts.py [-h] [-i INTERVAL]
|
|
[-w {from-rq-alloc,after-rq-alloc,on-device}]
|
|
[-p PCT,...] [-j] [--verbose]
|
|
DEV
|
|
|
|
Monitor IO latency distribution of a block device
|
|
|
|
positional arguments:
|
|
DEV Target block device (/dev/DEVNAME, DEVNAME or MAJ:MIN)
|
|
|
|
optional arguments:
|
|
-h, --help show this help message and exit
|
|
-i INTERVAL, --interval INTERVAL
|
|
Report interval (default: 3)
|
|
-w {from-rq-alloc,after-rq-alloc,on-device}, --which {from-rq-alloc,after-rq-alloc,on-device}
|
|
Which latency to measure (default: on-device)
|
|
-p PCT,..., --pcts PCT,...
|
|
Percentiles to calculate (default:
|
|
1,5,10,16,25,50,75,84,90,95,99,100)
|
|
-j, --json Output in json (default: False)
|
|
--verbose, -v
|