/usr/share/systemtap/examples/process
NameSizeModeActions
auditbt.meta4290644editdlrm
auditbt.stp6220755editdlrm
auditbt.tcl790644editdlrm
chng_cpu.meta7750644editdlrm
chng_cpu.stp10490755editdlrm
chng_cpu.tcl1400644editdlrm
cycle_thief.meta10820644editdlrm
cycle_thief.stp28930755editdlrm
cycle_thief.txt59740644editdlrm
errsnoop.meta5750644editdlrm
errsnoop.stp10150755editdlrm
forktracker.meta5250644editdlrm
forktracker.stp6010755editdlrm
futexes.meta5200644editdlrm
futexes.stp11180755editdlrm
futexes.txt9440644editdlrm
futexes2.meta5930644editdlrm
futexes2.stp20140644editdlrm
ltrace.meta3140644editdlrm
ltrace.stp30070755editdlrm
ltrace.tcl1220644editdlrm
migrate.meta7460644editdlrm
migrate.stp10370755editdlrm
mutex-contention.meta4790644editdlrm
mutex-contention.stp55590755editdlrm
mutex-contention.tcl790644editdlrm
noptrace.meta5120644editdlrm
noptrace.stp22350755editdlrm
noptrace.txt12120644editdlrm
pfiles.meta4500644editdlrm
pfiles.stp245230755editdlrm
plimit.meta3870644editdlrm
plimit.stp30290755editdlrm
procmod_watcher.meta6570644editdlrm
procmod_watcher.stp24060644editdlrm
proctop.meta6010644editdlrm
proctop.stp42450755editdlrm
proctop.txt86540644editdlrm
proc_snoop.stp11330755editdlrm
proc_snoop_parser.xml8180644editdlrm
proc_snoop_parser_instructions.txt21800644editdlrm
psig.meta3540644editdlrm
psig.stp56160755editdlrm
pstrace_exec.meta5450644editdlrm
pstrace_exec.stp4650755editdlrm
pstree.meta4550644editdlrm
pstree.stp19570755editdlrm
rlimit_nofile.meta3190644editdlrm
rlimit_nofile.stp11510755editdlrm
sched-latency.meta4700644editdlrm
sched-latency.stp5080644editdlrm
sched-latency.txt15660644editdlrm
schedtimes.meta8140644editdlrm
schedtimes.stp39490755editdlrm
schedtimes.txt32780644editdlrm
semop-watch.meta2670644editdlrm
semop-watch.stp8220755editdlrm
sigkill.meta5600644editdlrm
sigkill.stp6560755editdlrm
sigmon.meta6690644editdlrm
sigmon.stp9320755editdlrm
sig_by_pid.meta3570644editdlrm
sig_by_pid.stp10780755editdlrm
sig_by_pid.txt15140644editdlrm
sig_by_proc.meta3640644editdlrm
sig_by_proc.stp8510755editdlrm
sig_by_proc.txt9510644editdlrm
sleepingBeauties.meta5810644editdlrm
sleepingBeauties.stp13640755editdlrm
sleepingBeauties.tcl1400644editdlrm
sleeptime.meta6010644editdlrm
sleeptime.stp14690755editdlrm
spawn_seeker.meta8540644editdlrm
spawn_seeker.stp15260755editdlrm
spawn_seeker.txt13180644editdlrm
strace.meta3850644editdlrm
strace.stp20810755editdlrm
strace.txt36720644editdlrm
syscalls_by_pid.meta5140644editdlrm
syscalls_by_pid.stp6330755editdlrm
syscalls_by_pid.txt5970644editdlrm
syscalls_by_proc.meta5310644editdlrm
syscalls_by_proc.stp6920755editdlrm
syscalls_by_proc.txt11300644editdlrm
syscalltimes62910755editdlrm
syscalltimes.meta4540644editdlrm
syscalltimes.txt114590644editdlrm
thread-business.meta3460644editdlrm
thread-business.stp8660755editdlrm
thread-business.txt28230644editdlrm
threadstacks.meta5850644editdlrm
threadstacks.stp17890755editdlrm
threadstacks.tcl790644editdlrm
wait4time.meta6580644editdlrm
wait4time.stp13470755editdlrm
Edit: /usr/share/systemtap/examples/process/cycle_thief.stp (2893B)
#!/usr/bin/stap # Copyright (C) 2010-2016 Red Hat, Inc. # Write by William Cohen # # cycle_thief provide the following information for the specified pid: # Number of times the task is migrated to another cpu # How long the task is scheduled on and off a processor # Tasks that run when the task is scheduled off the processor # IRQs that run when the task is scheduled on the processor # # Run the script with: # stap cycle_thief.stp -x pid # # control-c to exit data collection global last_cpu = -1 global pid_on, pid_off, migrated global time_on, time_off, irq_entry global cycle_thief, irq_thief, cycle_thief_name probe kernel.trace("sched_switch") { t = gettimeofday_us(); c = cpu(); if ($prev->pid == target() && $next->pid != target()) { /* being switched out */ pid_off = t; last_cpu = c; if (pid_on) time_on <<< pid_off - pid_on; } else if ($prev->pid != target() && $next->pid == target()) { /* being switched in */ pid_on = t; if (pid_off) time_off <<< pid_on - pid_off; if (c != last_cpu) ++migrated; } /* watch what other processes scheduled while pid off */ if (pid_off > pid_on && c == last_cpu) { cycle_thief[$next->pid] <<< 1; cycle_thief_name[$next->pid] = kernel_string($next->comm) } } /* what interrupts occur while process is running */ probe kernel.{trace("irq_handler_entry")!, trace("irq_entry")} { t = gettimeofday_us(); c = cpu(); i = @defined($irq) ? $irq : $id; /* watch what irq run while pid is running */ if (pid_on > pid_off && c == last_cpu) { irq_entry[i] = t; } } probe kernel.{trace("irq_handler_exit")!, trace("irq_exit")} { i = @defined($irq) ? $irq : $id; t = gettimeofday_us(); c = cpu(); irqt=irq_entry[i] /* watch what irq run while pid is running */ if (pid_on > pid_off && c == last_cpu && irqt) { irq_thief[i] <<< t - irqt; delete irq_entry[i]; } } probe end { printf("\n") printf("task %d migrated: %d\n", target(), migrated) if (@count(time_on)) { printf("\n") printf("task %d on processor (us):\n", target()) print(@hist_log(time_on)); } if (@count(time_off)) { printf("\n") printf("task %d off processor (us)\n", target()) print(@hist_log(time_off)); } printf("\n") printf("other pids taking processor from task %d\n", target()) printf("%6s %10s %s\n", "PID", "count", "command"); foreach (p in cycle_thief-) printf("%6d %10d %s\n", p, @count(cycle_thief[p]), cycle_thief_name[p]) printf("\n") printf("irq taking processor from task %d\n", target()) printf("%6s %10s %10s %10s %10s %10s\n", "irq", "count", "min(us)", "avg(us)", "max(us)", "variance(us^2)") foreach (p in irq_thief-) printf("%6d %10d %10d %10d %10d %10d\n", p, @count(irq_thief[p]), @min(irq_thief[p]), @avg(irq_thief[p]), @max(irq_thief[p]), @variance(irq_thief[p])) }