Profiling for wall-time on Linux
Asked Answered
P

3

9

I have an application that I want to profile wrt how much time is spent in various activities. Since this application is I/O intensive, I want to get a report that will summarize how much time is spent in every library/system call (wall time).

I've tried oprofile, but it seems it gives time in terms of Unhalted CPU cycles (thats cputime, not real time)

I've tried strace -T, which gives wall time, but the data generated is huge and getting the summary report is difficult (and awk/py scripts exist for this ?)

Now I'm looking upto SystemTap, but I don't find any script that is close enough and can be modified, and the onsite tutorial didn't help much either. I am not sure if what I am looking for can be done.

I need someone to point me in the right direction. Thanks a lot!

Ptyalin answered 5/7, 2011 at 9:54 Comment(1)
As for system calls: syscalltime - Combination shell/systemtap script to measure system call counts and times. Can be filtered by process IDs, process names and users.sourceware.org/systemtap/examples/process/syscalltimesMalanie
D
5

Judging from this commit, the recently released strace 4.9 supports this with:

strace -w -c

They call it "syscall latency" (and it's hard to see from the manpage alone that's what -w does).

Desiredesirea answered 4/10, 2014 at 17:37 Comment(3)
This is a working solution. Can't believe this was added as late as 2014.Celisse
And I can't believe it's still not available in CentOS 7!Pommard
It's good that strace.io points to build.opensuse.org/package/show/home:ldv_alt/strace where they have packages for many distrosPommard
Z
1

Are you doing this just out of measurement curiosity, or because you want to find time-drains that you can fix to make it run faster?

If your goal is to make it run as fast as possible, then try random-pausing. It doesn't measure anything, except very roughly. It may be counter-intuitive, but what it does is pinpoint the code that will result in the greatest speed-up.

Zygosis answered 5/7, 2011 at 13:29 Comment(1)
speeding it up might be the eventual goal, and random pausing might be a quick way to the solution, but i would prefer to have a proper analysis that can be presented if necessary , thanks btwPtyalin
D
1

See the fntimes.stp systemtap sample script. https://sourceware.org/systemtap/examples/index.html#profiling/fntimes.stp

The fntimes.stp script monitors the execution time history of a given function family (assumed non-recursive). Each time (beyond a warmup interval) is then compared to the historical maximum. If it exceeds a certain threshold (250%), a message is printed.

# stap fntimes.stp 'kernel.function("sys_*")'

or

# stap fntimes.stp 'process("/path/to/your/binary").function("*")'

The last line of that .stp script demonstrates the way to track time consumed in a given family of functions

probe $1.return { elapsed = gettimeofday_us()-@entry(gettimeofday_us()) }
Depopulate answered 4/10, 2014 at 22:9 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.