| #!/usr/bin/python | |
| # | |
| # vfsreadlat.py VFS read latency distribution. | |
| # For Linux, uses BCC, eBPF. See .c file. | |
| # | |
| # Written as a basic example of a function latency distribution histogram. | |
| # | |
| # USAGE: vfsreadlat.py [interval [count]] | |
| # | |
| # The default interval is 5 seconds. A Ctrl-C will print the partially | |
| # gathered histogram then exit. | |
| # | |
| # Copyright (c) 2015 Brendan Gregg. | |
| # Licensed under the Apache License, Version 2.0 (the "License") | |
| # | |
| # 15-Aug-2015 Brendan Gregg Created this. | |
| from __future__ import print_function | |
| from bcc import BPF | |
| from time import sleep | |
| from sys import argv | |
| def usage(): | |
| print("USAGE: %s [interval [count]]" % argv[0]) | |
| exit() | |
| # arguments | |
| interval = 5 | |
| count = -1 | |
| if len(argv) > 1: | |
| try: | |
| interval = int(argv[1]) | |
| if interval == 0: | |
| raise | |
| if len(argv) > 2: | |
| count = int(argv[2]) | |
| except: # also catches -h, --help | |
| usage() | |
| # load BPF program | |
| b = BPF(src_file = "vfsreadlat.c") | |
| b.attach_kprobe(event="vfs_read", fn_name="do_entry") | |
| b.attach_kretprobe(event="vfs_read", fn_name="do_return") | |
| # header | |
| print("Tracing... Hit Ctrl-C to end.") | |
| # output | |
| loop = 0 | |
| do_exit = 0 | |
| while (1): | |
| if count > 0: | |
| loop += 1 | |
| if loop > count: | |
| exit() | |
| try: | |
| sleep(interval) | |
| except KeyboardInterrupt: | |
| pass; do_exit = 1 | |
| print() | |
| b["dist"].print_log2_hist("usecs") | |
| b["dist"].clear() | |
| if do_exit: | |
| exit() |