summaryrefslogtreecommitdiffstats
path: root/testsuite/systemtap.samples/iotask.stp
blob: 1b4c72431bb561f1ff20f0122f6298f4c0f33f6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#! /usr/bin/env stap
# iotask.stp
# A reimplementation of user script: iotask.stp given at OLS 2005
# in the current language.
#
# Will Cohen
# 9/22/2005

global names, opens
global reads, read_bytes
global writes, write_bytes

probe kernel.function("sys_open") {
   ++names[execname()]; ++opens[execname()];
}

probe kernel.function("sys_read") {
  ++names[execname()]; ++reads[execname()];
  read_bytes[execname()] += $count;
}

probe kernel.function("sys_write") {
  ++names[execname()]; ++writes[execname()];
  write_bytes[execname()] += $count;
}

probe begin { println( "starting probe" ); }

probe end {
  foreach( name in names){
    printf ("process: %s\n", name);
    if (opens[name]) 
      printf ("opens=%d\n",opens[name])
    if (reads[name]){
      count = reads[name]; total=read_bytes[name];
      printf("reads=%d, sum=%d, avg=%d\n", count, total, total/count);
    }
    if (writes[name]){
      count = writes[name]; total=write_bytes[name];
      printf("writes=%d, sum=%d, avg=%d\n", count, total, total/count);
    }
    println("");
  }
}