Problems with profiling results (hotshot or normal) : almost all are incorrect
Irmen de Jong
irmen at -nospam-remove-this-xs4all.nl
Tue Nov 2 18:43:31 EST 2004
Hello
I haven't received any responses on my original posting,
and it could very well be that it never made it to the newsgroup
(because I can't find it back on my news server here).
So I'm posting this again. Sorry if it *did* make it to
the group.. Please consider trying my test-program that is given
here and let me know how it works on your python installation.
Thanks for any insight on this.
--Irmen
[original message follows]
Irmen de Jong wrote:
> Okay I tried some profiling, but am uncertain about the
> results I'm getting. They confuse the hell out of me.
>
> I have a test program (see below) that essentially has
> two loops that get called repeatedly. One that is an idle
> wait loop, and one that is a busy-wait CPU hogger.
> I wanted to see what profiling results that would give.
> The total runtime of the program is 10 seconds, where 5
> seconds are spent in the CPU-loop and 5 seconds in the idle
> wait loop.
>
> But what I'm getting is not what I expected.
>
> For instance, with python2.3.4 on windows, it says:
> (hotshot:) 21 function calls in 35.772 CPU seconds
> (normal: ) 23 function calls in 10.008 CPU seconds
> Python 2.4b1 on windows gives:
> (hotshot:) 21 function calls in 0.001 CPU seconds
> (normal: ) 260362 function calls in 6.724 CPU seconds
>
> I know that timing information on Windows is sometimes
> difficult to get, but the above is really weird. Anyway
> so I also tried it on my Linux (mandrake 10) computer:
>
> Python 2.3.4 on linux:
> (hotshot:) 21 function calls in 17.542 CPU seconds
> (normal: ) 23 function calls in 5.000 CPU seconds
> Python 2.4b1 on linux:
> (hotshot:) 21 function calls in 0.000 CPU seconds
> (normal: ) 52474 function calls in 1.650 CPU seconds
>
> Conclusion: only *one* of the above test runs gives the
> right summary (in my opinion): the normal profiler of
> python 2.3.4 on linux (5 CPU seconds).
> The normal profiler of python 2.3.4 on windows also counts
> the idle loop time apparently, and gives 10 CPU seconds.
> But all the others are waaaay off!
>
> (and I haven't event talked about the detailed function
> call profiling statistics).
>
> Can anybody please help me out? Am I doing something wrong,
> or is the profiler just not reliable yet?
>
> Confused-ly y'rs,
> --Irmen de Jong
>
>
> PS using the 'time' command on linux, when running the test
> program, gives 0:20.19elapsed 50%CPU which is what I expected.
>
>
> -------------------- test program ---------------
> import time
>
> def foo():
> # idle wait loop
> time.sleep(0.5)
> def bar():
> # busy (CPU) wait loop
> s=time.time()
> while time.time()<(s+0.5):
> pass
>
> def test():
> for i in range(10):
> foo()
> bar()
>
> if __name__=="__main__":
> import hotshot, hotshot.stats, wait
> import profile, pstats
>
> print "HOTSHOT profiling..."
> prof = hotshot.Profile("wait.prof")
> prof.runcall(wait.test)
> prof.close()
> print "PROFILE DONE"
> stats = hotshot.stats.load("wait.prof")
> stats.strip_dirs()
> stats.sort_stats('time', 'calls')
> stats.print_stats(40)
>
> print "Normal profiler..."
> profile.run('wait.test()', 'wait.prof')
> print "profile done"
> stats = pstats.Stats('wait.prof')
> stats.strip_dirs()
> stats.sort_stats('time', 'calls')
> stats.print_stats(40)
>
More information about the Python-list
mailing list