[Python-ideas] Sampling Profiler for Python
Sümer Cip
sumerc at gmail.com
Thu Jan 5 07:45:29 CET 2012
More information about the Python-ideas mailing list
Thu Jan 5 07:45:29 CET 2012
- Previous message: [Python-ideas] Sampling Profiler for Python
- Next message: [Python-ideas] Sampling Profiler for Python
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Have you looked at yappi? yappi.start() accepts a sampling parameter. Regards, On Thu, Jan 5, 2012 at 12:32 AM, Torsten Landschoff <t.landschoff at gmx.net>wrote: > ** > Hello world, > > since I moved from Java development to Python development, I really miss > the sampling profiler of jvisualvm (http://visualvm.java.net/). Perhaps > it is only me but especially for long running GUI applications, I would > really like to know why it sometimes slows down to a crawl. > > cProfile is not really useful for this as it makes the software > unresponsive alone. Also if using multiple threads (like doing some I/O in > background, when using http://www.lag.net/paramiko/) it will give > meaningless results. > > I looked for an existing profiler and found statprof, mentioned in this > blog: http://wingolog.org/archives/2005/10/28/profiling > > However, this still fails profiling multiple threads. I don't think one > can do any better without touching the interpreter core. So that's what I > tried... > > My approach implements the profiler from the following parts: > > 1. Sample Trigger: A timer that triggers taking samples of all threads > at fixed intervals. > 2. Sampling function injection: Ensures that a sampling function is > called on each thread at the first opportunity after the sample trigger > fired. > 3. Sampling function: A function that assigns the current time slice > to the executing code on the thread it is called on. > > Only the second part has to be implemented in the Python interpreter core, > the sample trigger and sampling functions can be provided by external > modules. My implementation of (2) can be found at > https://bitbucket.org/bluehorn/sampling_prof > > I also prepared a first implementation of (1) and (3) at > https://bitbucket.org/bluehorn/profiler_util. Using that library, I can > profile pybench with a 3 % slowdown (taking 100 profiling samples per > second): > > $ export PYTHON_PATH=$HOME/python-work/profiler_util > $ python3 -m sampling_profiler -- Tools/pybench/pybench.py -c > stock.pybench -f prof.pybench > [...] > Totals: 3119ms 3072ms +1.5% 3198ms 3108ms > +2.9% > > This also shows that the string benchmark takes the most time: > > Thread MainThread (3842 samples, 38.434401 seconds) > ------------------------------------------------------------------------ > cpu_time (cum) ticks (cum) samples (cum) > filename:lineno function > 0.548 0.548 55 55 55 55 > Tools/pybench/Strings.py:455 test > 0.448 0.448 45 45 45 45 > Tools/pybench/Strings.py:568 calibrate > 0.428 0.428 43 43 43 43 > Tools/pybench/Constructs.py:484 test > 0.380 0.380 38 38 38 38 > Tools/pybench/Calls.py:445 f > 0.324 0.324 34 34 34 34 > Tools/pybench/Calls.py:122 f > > The output is explained as follows: > > cpu_time: cpu time in seconds accounted to that line. > (cum): This is the cpu time including the cumulative time of the functions > called on that line. Gathering that data means that the sampling function > has to walk the stack for each sample, which will cause a dramatic slowdown > for deeply recursive calls. There should be a switch to disable this. > ticks: Number of sampling profiler ticks accounted to that line. For my > example (where sample ticks are equidistant in wall time) this is a measure > of the time spent in that line, including any blocking calls (especially > I/O). > (cum): ... including called functions > samples: Number of times the sampling profiler function was called for > that line. This should equal ticks unless execution of that line took > longer than a profiler tick. > > The remaining output should be obvious. > > I have to admit that this is far from finished, but I hope to get some > feedback and perhaps even help by posting it here. > > What do you think? > > Greetings, Torsten > > > _______________________________________________ > Python-ideas mailing list > Python-ideas at python.org > http://mail.python.org/mailman/listinfo/python-ideas > > -- -- Sumer Cip -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-ideas/attachments/20120105/5a1d0759/attachment.html>
- Previous message: [Python-ideas] Sampling Profiler for Python
- Next message: [Python-ideas] Sampling Profiler for Python
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-ideas mailing list