[Python-3000] Performance Notes

Adam Olsen rhamph at gmail.com
Tue Sep 4 06:10:45 CEST 2007


On 9/3/07, Nicholas Bastin <nick.bastin at gmail.com> wrote:
> I've been doing some profiling of 3.0 vs. 2.6 release builds on
> Windows XP for the purpose of hopefully closing the performance gap.
> This data is very preliminary, but I thought I'd throw it out here in
> case someone else also wanted to look into this.  Also, possibly
> useful for comparing against profiling data on other platforms.  The
> table below just lists functions and speed differentials in 3.0 vs.
> 2.6, ordered by the functions in which we spend the most total time.
>
> NOTE:  This data is time sampling, not call graph.  Added time could
> come from either more calls, or longer calls.
>
> +  11.5% PyEval_EvalFrameEx
> +  40.2% lookdict (replacing lookdict_string)
> +312.9% PyDict_GetItem
> -   13.2% call_function
> +  19.4% fast_function

lookdict_string appears to still use the old string type, rather than
unicode.  This prevents it from being used.  It's probably not too
hard to fix.


> Other notes:
> * PyLong_FitsInLong consumes about 2% of total pystone runtime.
> * unicode_compare consumes the exact same time in 3.0 that
> string_richcompare consumed in 2.6.  Either these functions share a
> similar CPU profile, or their call counts vary dramatically.
>
> Top 5 functions in Python 2.6:
>
> * PyEval_EvalFrameEx (48.66%)
> * lookdict_string (5.76%)
> * call_function (4.80%)
> * frame_dealloc (2.80%)
> * fast_function (2.48%)
>
> Top 5 functions in Python 3.0:
>
> * PyEval_EvalFrameEx (44.37%)
> * lookdict (6.66%)
> * PyDict_GetItem (4.63%)
> * unicode_hash (3.51%)
> * call_function (3.38%)


-- 
Adam Olsen, aka Rhamphoryncus


More information about the Python-3000 mailing list