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
|
#! stap
global command, syscall_count, syscall_times, this_syscall_time, this_syscall
function accumulate () {
pid = pid()
if (! ([pid] in command)) command[pid] = execname()
syscall=pp() # just the substring ideally
syscall_count[pid,syscall] ++
this_syscall[pid] = syscall
this_syscall_time[pid] = gettimeofday_us()
}
function decumulate () {
pid = pid()
syscall = this_syscall[pid]
syscall_times[pid,syscall] +=
gettimeofday_us() - this_syscall_time[pid]
# free up memory
this_syscall[pid] = ""
this_syscall_time[pid] = 0
}
probe kernel.function("sys_*").call {
accumulate ()
}
probe kernel.function("sys_*").return {
decumulate ()
}
probe timer.ms(5000) {
exit ()
}
probe end {
foreach ([pid,syscall] in syscall_count-) {
printf("%s(%d) %s count=%d ttime=%d\n", command[pid], pid, syscall,
syscall_count[pid,syscall], syscall_times[pid,syscall])
if (count++ > 30) next
}
}
|