Skip to content
  • Alexei Starovoitov's avatar
    samples/bpf: Add IO latency analysis (iosnoop/heatmap) tool · 5c7fc2d2
    Alexei Starovoitov authored
    
    
    BPF C program attaches to
    blk_mq_start_request()/blk_update_request() kprobe events to
    calculate IO latency.
    
    For every completed block IO event it computes the time delta
    in nsec and records in a histogram map:
    
    	map[log10(delta)*10]++
    
    User space reads this histogram map every 2 seconds and prints
    it as a 'heatmap' using gray shades of text terminal. Black
    spaces have many events and white spaces have very few events.
    Left most space is the smallest latency, right most space is
    the largest latency in the range.
    
    Usage:
    
    	$ sudo ./tracex3
    	and do 'sudo dd if=/dev/sda of=/dev/null' in other terminal.
    
    Observe IO latencies and how different activity (like 'make
    kernel') affects it.
    
    Similar experiments can be done for network transmit latencies,
    syscalls, etc.
    
    '-t' flag prints the heatmap using normal ascii characters:
    
    $ sudo ./tracex3 -t
      heatmap of IO latency
      # - many events with this latency
        - few events
    	|1us      |10us     |100us    |1ms      |10ms     |100ms    |1s |10s
    				 *ooo. *O.#.                                    # 221
    			      .  *#     .                                       # 125
    				 ..   .o#*..                                    # 55
    			    .  . .  .  .#O                                      # 37
    				 .#                                             # 175
    				       .#*.                                     # 37
    				  #                                             # 199
    		      .              . *#*.                                     # 55
    				       *#..*                                    # 42
    				  #                                             # 266
    			      ...***Oo#*OO**o#* .                               # 629
    				  #                                             # 271
    				      . .#o* o.*o*                              # 221
    				. . o* *#O..                                    # 50
    
    Signed-off-by: default avatarAlexei Starovoitov <ast@plumgrid.com>
    Cc: Arnaldo Carvalho de Melo <acme@infradead.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Link: http://lkml.kernel.org/r/1427312966-8434-9-git-send-email-ast@plumgrid.com
    
    
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    5c7fc2d2