blob: d8d5b7c59f32986e31cafd8e80bf0571299043a3 (
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
|
#! 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-) {
log (command[pid] . "(" . sprint(pid) . ") " . syscall .
" count=" . sprint(syscall_count[pid,syscall]) .
" ttime=" . sprint(syscall_times[pid,syscall]))
if (count++ > 30) next
}
}
|