[Python-3000] Performance Notes
Nicholas Bastin
nick.bastin at gmail.com
Fri Sep 7 18:29:44 CEST 2007
On 9/3/07, Nicholas Bastin <nick.bastin at gmail.com> wrote:
> NOTE: This data is time sampling, not call graph. Added time could
> come from either more calls, or longer calls.
>
> +312.9% PyDict_GetItem
I've finally managed to get call graph data and it's fairly
interesting for this call. I try to find some way to post all of the
data at some point, but I thought some initial data might be useful.
Calls to PyDict_GetItem in 2.6 (pystone.py 10000):
160839 - instance_getattr2
30325 - class_lookup
5545 - PyString_InternInPlace
4808 - update_one_slot
2290 - PyObject_GenericGetAttr
...
Total: 208697
3.0 (pystone.py 10000):
575093 - PyEval_EvalFrameEx
416600 - PyObject_GenericGetAttr
321447 - PyObject_GenericSetAttr
25394 - update_one_slot
10142 - lookup_maybe
8925 - PyUnicode_InternInPlace
...
Total: 1368114
Almost all (522631) of the extra calls in PyEval_EvalFrameEx are
because in 2.6 we use the unrolled code in LOAD_GLOBAL, and in 3.0,
LOAD_GLOBAL always falls through to PyDict_GetItem.
I haven't investigated GenericGet/SetAttr yet.
--
Nick
More information about the Python-3000
mailing list