[C++-sig] profiling python extension

Ralf W. Grosse-Kunstleve rwgk at yahoo.com
Sun Feb 28 06:44:15 CET 2010


I usually use oprofile. Typically, I write a small piece of python to call the
extension multiple times so it runs the critical code for about a minute (10
seconds will probably do, too), then the extension code is the only thing
showing up near the top of the oprofile stats.
It is important that nothing else is running on the machine when you run
your extension for profiling, since oprofile is a kernel-level tool and sees
the entire system.
Last time I looked at the docs (ca. 5 years ago...) you had to be root for
"opcontrol --start". I'm not sure if that's still a requirement.
The commands I use are:

opcontrol --reset; opcontrol --start # root
# run as usual (not root)
opcontrol --shutdown # root
opreport -l > report
opannotate --source > annotated
grep '^[ 0-9][ 0-9][ 0-9][ 0-9][ 0-9][0-9] ' annotated | sort -n

You may need "yum install oprofile" or similar.



________________________________
From: Alexey Akimov <alexey.akimov85 at gmail.com>
To: Development of Python/C++ integration <cplusplus-sig at python.org>
Sent: Sat, February 27, 2010 7:52:17 PM
Subject: [C++-sig] profiling python extension

Dear all,

Does anyone know how one may profile a python extention? There is a bunch of literature on profiling of pure binaries (programs and even libraries), pure python code, etc. However the profiling of a python module from python script seems a tricky procedure. 
What I tried is to pass variant=profile to bjam. Everything works fine and I get .so library corresponding to my module (placed into /profile sub-directory of this particular build). When I execute the python script invoking my module's functions (performance of those functions is most interesting for me) there is no any output generated (something similar to gmon.out). So that is basically my question - how can I retrieve the profiling information about my extension? Of course I can compile a normal executable using the functions in the module and then use a standard approach (and of course gprof), but I hope that there should be more straightforward and easy way to do this (hopefully by passing some arguments to bjam).
Thanks in advance.

Alexey
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20100227/40e36441/attachment.html>


More information about the Cplusplus-sig mailing list