Hi -
> >> global s, t%
> >> probe kernel.trace("foobar_enter") {
> >> t[tid()]=gettimeofday_us()
> >> }
> >> probe kernel.trace("foobar_exit") {
> >> if (tid() in t) { s <<< gettimeofday_us() - t[tid()] }
> >> }
> >> probe timer.s(5),end {
> >> printf("cumulative average us: %d\n", @avg(s))
> >> }
> > [...]
>
> Interesting solution. How does it scale with CPUs and tasks?
It's not a simple question, as there are several factors, but
generally fine.
systemtap compiles down to native code, so execution is very fast and
CPU consumption is not a problem (better than streaming to userspace &
processing there).
Depending on actual runtime behavior, there may be contention over the
t[] array that tracks start-time. systemtap automagically safely
locks these for correctness. If contention is high, trylock/timeouts
can fail and some probes will be missed. Fail too many and the script
will self-terminate. (See [man stap] for some of the related
configurables.)
There is no contention over the s scalar value tracks elapsed time,
since it is implicitly aggregated on a per-cpu basis. That scales
without problem.
- FChE
--
To unsubscribe from this list: send the line "unsubscribe linux-perf-users" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html