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("");
}
}
|