faster-cpython / ideas

1.67k stars 49 forks source link

Results from Linux perf sampling profiling #574

Open mdboom opened 1 year ago

mdboom commented 1 year ago

This is the results of the first run of running the Linux perf profiler on a per-benchmark basis. Rather than retaining call stacks and producing flame graphs etc, it was decided to just do the simplest thing and time the amount spent in each function (the "self" time, excluding "children"), regardless of call stacks.

A few notes:

Top 10 functions in each benchmark above 1% contribution ## 2to3 | percentage | object | symbol | | ---: | :--- | :--- | | 27.10% | `python` | `_PyEval_EvalFrameDefault` | | 3.58% | `python` | `gc_collect_main` | | 3.38% | `python` | `unicodekeys_lookup_unicode` | | 2.51% | `python` | `_PyObject_Malloc (inlined)` | | 1.82% | `python` | `_PyObject_Free` | | 1.76% | `python` | `_Py_dict_lookup` | | 1.73% | `libc-2.31.so` | `__nss_database_lookup` | | 1.68% | `python` | `sre_ucs1_match` | | 1.62% | `python` | `tupledealloc` | | 1.46% | `python` | `_PyType_Lookup` | | 1.34% | `python` | `visit_decref` | ## aiohttp | percentage | object | symbol | | ---: | :--- | :--- | | 25.77% | `python` | `_PyEval_EvalFrameDefault` | | 2.47% | `python` | `unicodekeys_lookup_unicode` | | 2.29% | `libc-2.31.so` | `__nss_database_lookup` | | 2.03% | `python` | `_PyObject_Malloc` | | 1.87% | `python` | `_PyObject_Free` | | 1.60% | `python` | `_PyFrame_ClearExceptCode` | | 1.52% | `python` | `initialize_locals` | | 1.39% | `python` | `gc_collect_main` | | 1.16% | `python` | `_Py_dict_lookup` | | 1.15% | `python` | `tupledealloc` | | 1.00% | `python` | `_PyType_Lookup` | ## async_generators | percentage | object | symbol | | ---: | :--- | :--- | | 22.58% | `python` | `_PyEval_EvalFrameDefault` | | 10.39% | `python` | `_PyErr_SetObject.part.0` | | 3.11% | `python` | `_PyObject_Free` | | 3.01% | `python` | `async_gen_asend_iternext` | | 2.58% | `python` | `_PyObject_Malloc` | | 2.54% | `python` | `PyType_GenericAlloc` | | 2.38% | `python` | `tupledealloc` | | 2.22% | `python` | `gc_collect_main` | | 2.01% | `libc-2.31.so` | `__nss_database_lookup` | | 1.91% | `python` | `async_gen_anext` | | 1.85% | `python` | `PyErr_ExceptionMatches` | ## async_tree | percentage | object | symbol | | ---: | :--- | :--- | | 26.24% | `python` | `gc_collect_main` | | 18.06% | `python` | `_PyEval_EvalFrameDefault` | | 6.94% | `python` | `visit_reachable` | | 6.63% | `python` | `visit_decref` | | 2.02% | `python` | `_PyObject_Malloc` | | 1.49% | `python` | `_PyObject_Free` | | 1.21% | `python` | `subtype_traverse` | | 1.04% | `python` | `initialize_locals` | ## async_tree_cpu_io_mixed | percentage | object | symbol | | ---: | :--- | :--- | | 18.84% | `python` | `gc_collect_main` | | 16.08% | `python` | `k_mul` | | 14.60% | `python` | `_PyEval_EvalFrameDefault` | | 4.84% | `python` | `visit_reachable` | | 4.60% | `python` | `visit_decref` | | 2.79% | `python` | `_PyObject_Malloc` | | 2.22% | `python` | `_PyObject_Free` | | 1.31% | `python` | `PyErr_CheckSignals` | | 1.22% | `math.cpython-312-x86_64-linux-gnu.so` | `factorial_partial_product` | ## async_tree_io | percentage | object | symbol | | ---: | :--- | :--- | | 33.95% | `python` | `gc_collect_main` | | 16.74% | `python` | `_PyEval_EvalFrameDefault` | | 8.03% | `python` | `visit_reachable` | | 7.21% | `python` | `visit_decref` | | 1.66% | `python` | `_PyObject_Malloc` | | 1.29% | `python` | `subtype_traverse` | | 1.21% | `python` | `_PyObject_Free` | | 1.04% | `python` | `initialize_locals` | ## async_tree_memoization | percentage | object | symbol | | ---: | :--- | :--- | | 25.84% | `python` | `gc_collect_main` | | 19.07% | `python` | `_PyEval_EvalFrameDefault` | | 6.66% | `python` | `visit_reachable` | | 6.52% | `python` | `visit_decref` | | 2.00% | `python` | `_PyObject_Malloc` | | 1.58% | `python` | `_PyObject_Free` | | 1.17% | `python` | `_PyFrame_ClearExceptCode` | | 1.11% | `python` | `subtype_traverse` | | 1.05% | `python` | `unicodekeys_lookup_unicode` | ## asyncio_tcp | percentage | object | symbol | | ---: | :--- | :--- | | 32.63% | `[kernel.kallsyms]` | `copy_user_enhanced_fast_string` | | 16.73% | `libc-2.31.so` | `__nss_database_lookup` | | 9.28% | `python` | `_PyEval_EvalFrameDefault` | | 8.16% | `[kernel.kallsyms]` | `clear_page_erms` | ## chameleon | percentage | object | symbol | | ---: | :--- | :--- | | 40.74% | `python` | `_PyEval_EvalFrameDefault` | | 3.16% | `python` | `_PyObject_Malloc` | | 3.09% | `python` | `unicodekeys_lookup_unicode` | | 2.73% | `python` | `_PyObject_Free` | | 2.08% | `python` | `_Py_dict_lookup` | | 2.04% | `libc-2.31.so` | `__nss_database_lookup` | | 1.93% | `python` | `sre_ucs2_charset.isra.0` | | 1.66% | `python` | `_PyFrame_ClearExceptCode` | | 1.65% | `python` | `_PyUnicode_JoinArray.part.0` | | 1.44% | `python` | `gc_collect_main` | | 1.28% | `python` | `long_to_decimal_string_internal` | ## chaos | percentage | object | symbol | | ---: | :--- | :--- | | 48.14% | `python` | `_PyEval_EvalFrameDefault` | | 2.34% | `python` | `_PyLong_Subtract` | | 1.98% | `python` | `_PyLong_Add` | | 1.82% | `python` | `_PyObject_Free` | | 1.79% | `python` | `PyType_IsSubtype` | | 1.58% | `python` | `_PyFrame_ClearExceptCode` | | 1.27% | `python` | `tupledealloc` | | 1.13% | `python` | `PyFloat_FromDouble` | | 1.04% | `python` | `initialize_locals` | | 1.02% | `python` | `_PyObject_Malloc (inlined)` | | 1.00% | `libc-2.31.so` | `__nss_database_lookup` | ## comprehensions | percentage | object | symbol | | ---: | :--- | :--- | | 32.34% | `python` | `_PyEval_EvalFrameDefault` | | 4.48% | `python` | `_Py_dict_lookup` | | 3.68% | `python` | `_PyObject_Malloc` | | 2.57% | `python` | `_PyObject_Free` | | 2.25% | `python` | `unicodekeys_lookup_unicode` | | 2.17% | `python` | `advance` | | 1.68% | `python` | `_PyFrame_ClearExceptCode` | | 1.58% | `python` | `PyFunction_NewWithQualName` | | 1.35% | `libc-2.31.so` | `__nss_database_lookup` | | 1.21% | `python` | `dict_get` | | 1.10% | `python` | `list_dealloc` | ## concurrent_imap | percentage | object | symbol | | ---: | :--- | :--- | | 14.02% | `python` | `_PyEval_EvalFrameDefault` | | 2.77% | `python` | `_PyObject_Free` | | 2.38% | `python` | `unicodekeys_lookup_unicode` | | 1.76% | `python` | `gc_collect_main` | | 1.64% | `python` | `tupledealloc` | | 1.49% | `libc-2.31.so` | `__nss_database_lookup` | | 1.32% | `python` | `_PyObject_Malloc` | | 1.31% | `python` | `initialize_locals` | | 1.21% | `python` | `_PyFrame_ClearExceptCode` | | 1.14% | `python` | `_PyEvalFramePushAndInit` | | 1.08% | `python` | `_Py_dict_lookup` | ## coroutines | percentage | object | symbol | | ---: | :--- | :--- | | 45.05% | `python` | `_PyEval_EvalFrameDefault` | | 5.99% | `python` | `gen_dealloc` | | 3.67% | `libc-2.31.so` | `__nss_database_lookup` | | 3.29% | `python` | `_PyObject_GC_NewVar` | | 3.20% | `python` | `make_gen` | | 3.19% | `python` | `_PyLong_Subtract` | | 2.69% | `python` | `_PyLong_Add` | | 2.67% | `python` | `_PyObject_Free` | | 2.12% | `python` | `_PyFrame_ClearExceptCode` | | 1.85% | `python` | `_PyObject_Malloc (inlined)` | | 1.79% | `python` | `PyObject_CallFinalizerFromDealloc` | ## coverage | percentage | object | symbol | | ---: | :--- | :--- | | 25.34% | `python` | `_PyEval_EvalFrameDefault` | | 5.74% | `tracer.cpython-312-x86_64-linux-gnu.so` | `CTracer_trace` | | 5.70% | `python` | `unicodekeys_lookup_unicode` | | 3.52% | `python` | `call_trace.part.0` | | 3.46% | `python` | `_Py_dict_lookup` | | 2.91% | `python` | `_PyObject_Malloc` | | 2.29% | `python` | `_PyObject_Free` | | 2.26% | `python` | `siphash13` | | 1.95% | `python` | `_PyType_Lookup` | | 1.68% | `libc-2.31.so` | `__nss_database_lookup` | | 1.57% | `python` | `gc_collect_main` | ## crypto_pyaes | percentage | object | symbol | | ---: | :--- | :--- | | 37.06% | `python` | `_PyEval_EvalFrameDefault` | | 6.90% | `python` | `long_bitwise` | | 4.79% | `python` | `_PyObject_Free` | | 3.87% | `python` | `long_rshift1` | | 3.83% | `python` | `_PyObject_Malloc` | | 2.69% | `python` | `PyObject_GenericGetAttr` | | 2.58% | `python` | `l_mod` | | 2.51% | `python` | `long_and` | | 2.35% | `python` | `unicodekeys_lookup_unicode` | | 1.72% | `python` | `PyLong_FromLong` | | 1.53% | `python` | `_PyLong_Add` | ## dask | percentage | object | symbol | | ---: | :--- | :--- | | 34.25% | `python` | `_PyEval_EvalFrameDefault` | | 3.85% | `python` | `gc_collect_main` | | 2.46% | `python` | `_PyObject_Malloc` | | 2.17% | `python` | `unicodekeys_lookup_unicode` | | 2.12% | `python` | `_PyObject_Free` | | 1.96% | `python` | `visit_decref` | | 1.72% | `libc-2.31.so` | `__nss_database_lookup` | | 1.65% | `python` | `_PyFrame_ClearExceptCode` | | 1.46% | `python` | `visit_reachable` | | 1.23% | `python` | `_Py_dict_lookup` | | 1.20% | `python` | `tupledealloc` | ## deepcopy | percentage | object | symbol | | ---: | :--- | :--- | | 46.42% | `python` | `_PyEval_EvalFrameDefault` | | 5.92% | `python` | `_Py_dict_lookup` | | 3.04% | `python` | `_PyFrame_ClearExceptCode` | | 2.89% | `python` | `_PyObject_Free` | | 2.37% | `python` | `_PyObject_Malloc` | | 2.03% | `python` | `dict_get` | | 1.50% | `python` | `PyLong_FromVoidPtr` | | 1.23% | `python` | `unicodekeys_lookup_unicode` | ## deltablue | percentage | object | symbol | | ---: | :--- | :--- | | 60.24% | `python` | `_PyEval_EvalFrameDefault` | | 3.06% | `python` | `_PyFrame_ClearExceptCode` | | 2.22% | `python` | `gc_collect_main` | | 1.93% | `python` | `unicodekeys_lookup_unicode` | | 1.77% | `python` | `_PyObject_Malloc` | | 1.68% | `python` | `_PyObject_GetMethod` | | 1.63% | `python` | `_PyObject_Free` | | 1.44% | `python` | `_PyType_Lookup` | | 1.08% | `python` | `visit_decref` | | 1.06% | `python` | `_PyThreadState_PopFrame` | ## django_template | percentage | object | symbol | | ---: | :--- | :--- | | 33.98% | `python` | `_PyEval_EvalFrameDefault` | | 3.33% | `python` | `unicodekeys_lookup_unicode` | | 2.82% | `python` | `_PyObject_Malloc (inlined)` | | 2.48% | `python` | `_PyObject_Free` | | 2.01% | `python` | `_PyFrame_ClearExceptCode` | | 1.96% | `python` | `gc_collect_main` | | 1.68% | `libc-2.31.so` | `__nss_database_lookup` | | 1.52% | `python` | `_Py_dict_lookup` | | 1.32% | `python` | `_PyType_Lookup` | | 1.27% | `python` | `_PyObject_GenericGetAttrWithDict` | | 1.12% | `python` | `initialize_locals` | ## djangocms | percentage | object | symbol | | ---: | :--- | :--- | | 17.57% | `python` | `_PyEval_EvalFrameDefault` | | 5.74% | `python` | `unicodekeys_lookup_unicode` | | 4.91% | `python` | `gc_collect_main` | | 2.47% | `python` | `_PyObject_Malloc` | | 2.40% | `python` | `_Py_dict_lookup` | | 2.05% | `python` | `visit_decref` | | 1.95% | `libc-2.31.so` | `__nss_database_lookup` | | 1.69% | `python` | `_PyType_Lookup` | | 1.58% | `python` | `_PyObject_Free` | | 1.56% | `python` | `visit_reachable` | ## docutils | percentage | object | symbol | | ---: | :--- | :--- | | 25.23% | `python` | `_PyEval_EvalFrameDefault` | | 7.00% | `python` | `sre_ucs1_match` | | 6.46% | `python` | `gc_collect_main` | | 3.23% | `python` | `unicodekeys_lookup_unicode` | | 2.68% | `python` | `_PyObject_Malloc` | | 2.37% | `python` | `_PyObject_Free` | | 2.30% | `python` | `visit_decref` | | 2.26% | `python` | `_PyType_Lookup` | | 2.04% | `libc-2.31.so` | `__nss_database_lookup` | | 1.69% | `python` | `sre_ucs2_charset.isra.0` | | 1.48% | `python` | `visit_reachable` | ## dulwich_log | percentage | object | symbol | | ---: | :--- | :--- | | 28.50% | `python` | `_PyEval_EvalFrameDefault` | | 2.91% | `libz.so.1.2.11` | `inflateCodesUsed` | | 2.76% | `python` | `_PyObject_Malloc` | | 2.43% | `libc-2.31.so` | `__nss_database_lookup` | | 2.20% | `python` | `_PyObject_Free` | | 1.80% | `libz.so.1.2.11` | `inflateBackEnd` | | 1.57% | `libz.so.1.2.11` | `inflate` | | 1.31% | `python` | `unicodekeys_lookup_unicode` | | 1.18% | `python` | `_PyFrame_ClearExceptCode` | | 1.15% | `python` | `gc_collect_main` | ## fannkuch | percentage | object | symbol | | ---: | :--- | :--- | | 37.68% | `python` | `_PyEval_EvalFrameDefault` | | 8.34% | `python` | `PySlice_AdjustIndices` | | 5.61% | `python` | `list_subscript` | | 5.19% | `python` | `list_ass_slice` | | 4.58% | `python` | `_PyLong_Add` | | 3.63% | `python` | `list_dealloc` | | 3.12% | `python` | `slice_dealloc` | | 2.45% | `python` | `PyNumber_AsSsize_t` | | 2.30% | `python` | `_PyEval_SliceIndex` | | 2.07% | `python` | `PySlice_Unpack` | | 1.60% | `python` | `PySlice_New` | ## float | percentage | object | symbol | | ---: | :--- | :--- | | 37.46% | `python` | `_PyEval_EvalFrameDefault` | | 4.41% | `libm-2.31.so` | `f64xsubf128` | | 3.86% | `python` | `gc_collect_main` | | 3.03% | `python` | `subtype_traverse` | | 2.88% | `python` | `visit_decref` | | 2.52% | `python` | `visit_reachable` | | 2.06% | `python` | `_PyObject_Free` | | 2.04% | `python` | `_PyObject_Malloc (inlined)` | | 2.03% | `python` | `PyFloat_FromDouble` | | 1.98% | `python` | `float_div` | | 1.82% | `python` | `subtype_dealloc` | ## gc_collect | percentage | object | symbol | | ---: | :--- | :--- | | 31.60% | `python` | `gc_collect_main` | | 14.78% | `python` | `visit_reachable` | | 14.17% | `python` | `visit_decref` | | 6.51% | `python` | `_PyEval_EvalFrameDefault` | | 5.19% | `python` | `dict_traverse` | | 1.91% | `python` | `PyObject_IS_GC` | | 1.90% | `python` | `_PyDict_MaybeUntrack` | | 1.80% | `python` | `subtype_traverse` | | 1.74% | `python` | `func_traverse` | | 1.62% | `python` | `set_traverse` | | 1.47% | `python` | `_PyObject_VisitManagedDict` | ## gc_traversal | percentage | object | symbol | | ---: | :--- | :--- | | 29.16% | `python` | `visit_reachable` | | 21.25% | `python` | `visit_decref` | | 15.38% | `python` | `list_traverse` | | 12.97% | `python` | `gc_collect_main` | | 3.73% | `python` | `_PyEval_EvalFrameDefault` | | 2.24% | `python` | `dict_traverse` | ## generators | percentage | object | symbol | | ---: | :--- | :--- | | 49.58% | `python` | `_PyEval_EvalFrameDefault` | | 4.44% | `python` | `gc_collect_main` | | 2.35% | `python` | `_PyObject_Malloc` | | 1.94% | `python` | `_PyObject_Free` | | 1.51% | `python` | `visit_reachable` | | 1.45% | `python` | `initialize_locals` | | 1.44% | `libc-2.31.so` | `__nss_database_lookup` | | 1.42% | `python` | `gen_dealloc` | | 1.38% | `python` | `visit_decref` | | 1.24% | `python` | `_PyFrame_ClearExceptCode` | | 1.18% | `python` | `_PyEvalFramePushAndInit` | ## genshi | percentage | object | symbol | | ---: | :--- | :--- | | 46.09% | `python` | `_PyEval_EvalFrameDefault` | | 2.96% | `python` | `unicodekeys_lookup_unicode` | | 2.49% | `python` | `_PyObject_Free` | | 2.40% | `python` | `_PyObject_Malloc` | | 2.35% | `python` | `_Py_dict_lookup` | | 1.43% | `python` | `insertdict` | | 1.36% | `python` | `_PyFrame_ClearExceptCode` | | 1.30% | `python` | `_PyType_Lookup` | | 1.23% | `python` | `insert_to_emptydict` | | 1.13% | `python` | `tupledealloc` | | 1.05% | `libc-2.31.so` | `__nss_database_lookup` | ## go | percentage | object | symbol | | ---: | :--- | :--- | | 65.16% | `python` | `_PyEval_EvalFrameDefault` | | 2.17% | `python` | `_PyFrame_ClearExceptCode` | | 2.00% | `python` | `unicodekeys_lookup_unicode` | | 1.54% | `python` | `_PyObject_GetMethod` | | 1.25% | `python` | `_PyObject_Free` | | 1.07% | `python` | `_Py_dict_lookup` | | 1.05% | `python` | `_PyType_Lookup` | | 1.04% | `python` | `_PyObject_Malloc (inlined)` | ## gunicorn | percentage | object | symbol | | ---: | :--- | :--- | | 27.12% | `python` | `_PyEval_EvalFrameDefault` | | 2.84% | `python` | `unicodekeys_lookup_unicode` | | 2.22% | `python` | `_PyObject_Malloc` | | 2.20% | `libc-2.31.so` | `__nss_database_lookup` | | 1.92% | `python` | `_PyObject_Free` | | 1.65% | `python` | `gc_collect_main` | | 1.53% | `python` | `_PyFrame_ClearExceptCode` | | 1.37% | `python` | `initialize_locals` | | 1.23% | `python` | `_Py_dict_lookup` | | 1.20% | `python` | `tupledealloc` | ## hexiom | percentage | object | symbol | | ---: | :--- | :--- | | 56.30% | `python` | `_PyEval_EvalFrameDefault` | | 2.38% | `python` | `long_richcompare` | | 2.34% | `python` | `list_contains` | | 2.32% | `python` | `PyObject_RichCompare` | | 2.17% | `python` | `_PyFrame_ClearExceptCode` | | 1.56% | `python` | `PyObject_RichCompareBool` | | 1.54% | `python` | `_PyObject_Free` | | 1.36% | `python` | `unicodekeys_lookup_unicode` | | 1.33% | `python` | `PyLong_FromSsize_t` | | 1.23% | `python` | `gen_iternext` | | 1.23% | `libc-2.31.so` | `__nss_database_lookup` | ## html5lib | percentage | object | symbol | | ---: | :--- | :--- | | 36.39% | `python` | `_PyEval_EvalFrameDefault` | | 6.32% | `python` | `sre_ucs2_charset.isra.0` | | 3.48% | `python` | `gc_collect_main` | | 2.34% | `python` | `unicodekeys_lookup_unicode` | | 1.98% | `python` | `_PyObject_Malloc` | | 1.77% | `python` | `_Py_dict_lookup` | | 1.76% | `python` | `_PyObject_Free` | | 1.46% | `libc-2.31.so` | `__nss_database_lookup` | | 1.19% | `python` | `visit_decref` | | 1.12% | `python` | `_PyFrame_ClearExceptCode` | ## json | percentage | object | symbol | | ---: | :--- | :--- | | 12.00% | `_json.cpython-312-x86_64-linux-gnu.so` | `scanstring_unicode` | | 7.81% | `python` | `_PyEval_EvalFrameDefault` | | 6.49% | `_json.cpython-312-x86_64-linux-gnu.so` | `scan_once_unicode` | | 6.01% | `python` | `siphash13` | | 5.14% | `python` | `unicodekeys_lookup_unicode` | | 5.06% | `python` | `_PyObject_Malloc` | | 3.73% | `python` | `PyDict_SetDefault` | | 3.63% | `python` | `_PyObject_Free` | | 3.03% | `python` | `PyLong_FromString` | | 2.64% | `python` | `insertdict` | | 2.45% | `python` | `_Py_dict_lookup` | ## json_dumps | percentage | object | symbol | | ---: | :--- | :--- | | 13.07% | `python` | `_PyEval_EvalFrameDefault` | | 8.34% | `_json.cpython-312-x86_64-linux-gnu.so` | `py_encode_basestring_ascii` | | 4.86% | `python` | `_PyObject_Malloc` | | 4.67% | `python` | `_PyObject_Free` | | 4.36% | `python` | `_copy_characters.part.0.constprop.0` | | 3.79% | `python` | `_PyUnicodeWriter_WriteStr` | | 3.25% | `_json.cpython-312-x86_64-linux-gnu.so` | `encoder_listencode_obj` | | 2.89% | `python` | `_Py_dict_lookup` | | 2.86% | `python` | `resize_compact` | | 2.86% | `libc-2.31.so` | `__nss_database_lookup` | | 2.57% | `python` | `unicodekeys_lookup_unicode` | ## json_loads | percentage | object | symbol | | ---: | :--- | :--- | | 13.10% | `_json.cpython-312-x86_64-linux-gnu.so` | `scanstring_unicode` | | 7.15% | `_json.cpython-312-x86_64-linux-gnu.so` | `scan_once_unicode` | | 6.98% | `python` | `siphash13` | | 6.74% | `python` | `unicodekeys_lookup_unicode` | | 5.60% | `python` | `_PyEval_EvalFrameDefault` | | 4.95% | `python` | `_PyObject_Malloc` | | 3.58% | `python` | `_PyObject_Free` | | 3.40% | `python` | `_Py_dict_lookup` | | 3.20% | `python` | `insertdict` | | 3.11% | `python` | `PyLong_FromString` | | 3.06% | `libc-2.31.so` | `__nss_database_lookup` | ## logging | percentage | object | symbol | | ---: | :--- | :--- | | 46.86% | `python` | `_PyEval_EvalFrameDefault` | | 3.54% | `python` | `_PyFrame_ClearExceptCode` | | 2.00% | `python` | `_Py_dict_lookup` | | 1.93% | `python` | `initialize_locals` | | 1.78% | `python` | `dict_dealloc` | | 1.78% | `python` | `advance` | | 1.71% | `libc-2.31.so` | `__nss_database_lookup` | | 1.62% | `python` | `_PyObject_Malloc (inlined)` | | 1.56% | `python` | `_PyObject_Free` | | 1.30% | `python` | `_PyEvalFramePushAndInit` | | 1.18% | `python` | `unicodekeys_lookup_unicode` | ## mako | percentage | object | symbol | | ---: | :--- | :--- | | 37.34% | `python` | `_PyEval_EvalFrameDefault` | | 8.02% | `python` | `replace` | | 5.03% | `python` | `long_to_decimal_string_internal` | | 3.93% | `python` | `_PyUnicode_JoinArray.part.0` | | 3.28% | `python` | `_PyObject_Free` | | 2.82% | `python` | `deque_append` | | 2.48% | `libc-2.31.so` | `__nss_database_lookup` | | 1.89% | `python` | `_PyObject_Malloc` | | 1.88% | `python` | `unicode_replace` | | 1.83% | `python` | `dequeiter_next` | | 1.41% | `python` | `list_extend` | ## mdp | percentage | object | symbol | | ---: | :--- | :--- | | 28.11% | `python` | `tuplehash` | | 15.59% | `python` | `_PyEval_EvalFrameDefault` | | 13.94% | `python` | `PyObject_Hash` | | 11.14% | `python` | `long_hash` | | 5.99% | `python` | `_Py_dict_lookup` | | 2.04% | `python` | `tuplerichcompare` | | 1.41% | `python` | `PyObject_RichCompareBool` | | 1.33% | `python` | `PyObject_RichCompare` | | 1.16% | `python` | `_PyObject_Free` | | 1.15% | `python` | `dict_subscript` | | 1.05% | `python` | `_PyObject_Malloc` | ## meteor_contest | percentage | object | symbol | | ---: | :--- | :--- | | 21.41% | `python` | `_PyEval_EvalFrameDefault` | | 8.21% | `python` | `set_issubset` | | 7.68% | `python` | `set_lookkey` | | 5.81% | `python` | `setiter_iternext` | | 3.49% | `python` | `set_difference` | | 3.26% | `python` | `set_dealloc` | | 2.37% | `python` | `PyObject_RichCompare` | | 2.07% | `python` | `_PyObject_Free` | | 1.92% | `python` | `set_add_entry` | | 1.90% | `python` | `list_dealloc` | | 1.81% | `python` | `_PyObject_Malloc` | ## mypy2 | percentage | object | symbol | | ---: | :--- | :--- | | 29.20% | `python` | `_PyEval_EvalFrameDefault` | | 13.85% | `python` | `gc_collect_main` | | 2.73% | `python` | `unicodekeys_lookup_unicode` | | 2.67% | `python` | `_PyObject_Malloc` | | 2.51% | `python` | `visit_decref` | | 1.98% | `python` | `_PyObject_Free` | | 1.92% | `python` | `_PyFrame_ClearExceptCode` | | 1.57% | `python` | `_Py_dict_lookup` | | 1.56% | `python` | `initialize_locals` | | 1.39% | `python` | `_PyType_Lookup` | | 1.33% | `libc-2.31.so` | `__nss_database_lookup` | ## nbody | percentage | object | symbol | | ---: | :--- | :--- | | 68.08% | `python` | `_PyEval_EvalFrameDefault` | | 6.42% | `python` | `PyFloat_FromDouble` | | 4.31% | `libm-2.31.so` | `f64xsubf128` | | 2.40% | `python` | `float_dealloc` | | 2.26% | `python` | `_Py_NewReference` | | 1.30% | `python` | `float_pow` | ## nqueens | percentage | object | symbol | | ---: | :--- | :--- | | 37.32% | `python` | `_PyEval_EvalFrameDefault` | | 4.69% | `python` | `_PyObject_Malloc (inlined)` | | 3.50% | `python` | `_PyObject_Free` | | 2.13% | `python` | `gen_iternext` | | 2.11% | `python` | `set_add_entry` | | 1.92% | `python` | `PySlice_AdjustIndices` | | 1.70% | `python` | `_PyLong_Add` | | 1.62% | `python` | `list_dealloc` | | 1.49% | `python` | `tupledealloc` | | 1.34% | `libc-2.31.so` | `__nss_database_lookup` | | 1.33% | `python` | `set_dealloc` | ## pathlib | percentage | object | symbol | | ---: | :--- | :--- | | 18.07% | `python` | `_PyEval_EvalFrameDefault` | | 3.76% | `python` | `_PyObject_Malloc` | | 3.35% | `python` | `_PyObject_Free` | | 1.65% | `libc-2.31.so` | `__nss_database_lookup` | | 1.58% | `python` | `unicodekeys_lookup_unicode` | | 1.50% | `python` | `_PyFrame_ClearExceptCode` | | 1.46% | `[kernel.kallsyms]` | `__d_lookup_rcu` | | 1.21% | `python` | `initialize_locals` | | 1.20% | `libpthread-2.31.so` | `__pthread_mutex_lock` | | 1.14% | `[kernel.kallsyms]` | `__ext4fs_dirhash` | | 1.13% | `[kernel.kallsyms]` | `memset_erms` | ## pickle | percentage | object | symbol | | ---: | :--- | :--- | | 26.17% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `save` | | 9.04% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `_Pickler_Write` | | 7.60% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `PyMemoTable_Set` | | 4.32% | `python` | `_PyEval_EvalFrameDefault` | | 4.32% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `Pickler_clear` | | 3.87% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `memo_put.isra.0` | | 3.75% | `libc-2.31.so` | `__nss_database_lookup` | | 3.14% | `python` | `PyDict_Next` | | 2.79% | `python` | `PyUnicode_AsUTF8AndSize` | | 2.43% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `_Pickler_Write.constprop.3` | | 1.65% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `memo_get.isra.0` | ## pickle_dict | percentage | object | symbol | | ---: | :--- | :--- | | 45.53% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `save` | | 12.01% | `python` | `PyDict_Next` | | 7.67% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `_Pickler_Write` | | 6.92% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `_Pickler_Write.constprop.3` | | 4.16% | `python` | `PyLong_AsLongAndOverflow` | | 3.12% | `python` | `_PyEval_EvalFrameDefault` | | 2.07% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `PyMemoTable_Set` | | 1.44% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `Pickler_clear` | ## pickle_list | percentage | object | symbol | | ---: | :--- | :--- | | 49.69% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `save` | | 10.32% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `_Pickler_Write` | | 4.70% | `python` | `PyLong_AsLongAndOverflow` | | 4.70% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `_Pickler_Write.constprop.3` | | 4.52% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `PyMemoTable_Set` | | 2.94% | `python` | `_PyEval_EvalFrameDefault` | | 2.40% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `Pickler_clear` | | 1.69% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `memo_put.isra.0` | | 1.66% | `libc-2.31.so` | `__nss_database_lookup` | | 1.47% | `libc-2.31.so` | `pthread_attr_setschedparam` | | 1.03% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `0x0000000000005cc4` | ## pickle_pure_python | percentage | object | symbol | | ---: | :--- | :--- | | 42.49% | `python` | `_PyEval_EvalFrameDefault` | | 3.82% | `python` | `_Py_dict_lookup` | | 2.72% | `python` | `_PyFrame_ClearExceptCode` | | 2.69% | `python` | `_PyObject_Malloc` | | 2.42% | `python` | `_PyObject_Free` | | 2.30% | `python` | `unicodekeys_lookup_unicode` | | 1.70% | `libc-2.31.so` | `__nss_database_lookup` | | 1.19% | `python` | `initialize_locals` | | 1.13% | `python` | `gc_collect_main` | ## pidigits | percentage | object | symbol | | ---: | :--- | :--- | | 35.94% | `python` | `x_divrem` | | 23.00% | `python` | `k_mul` | | 11.49% | `python` | `x_add` | | 7.46% | `python` | `x_sub` | | 4.15% | `python` | `_PyEval_EvalFrameDefault` | | 2.42% | `libc-2.31.so` | `pthread_attr_setschedparam` | | 1.64% | `libc-2.31.so` | `__nss_database_lookup` | ## pprint | percentage | object | symbol | | ---: | :--- | :--- | | 43.67% | `python` | `_PyEval_EvalFrameDefault` | | 3.51% | `python` | `_PyFrame_ClearExceptCode` | | 3.05% | `python` | `_PyObject_Malloc` | | 3.02% | `python` | `_PyObject_Free` | | 2.31% | `python` | `_PyType_Lookup` | | 1.85% | `libc-2.31.so` | `__nss_database_lookup` | | 1.84% | `python` | `tupledealloc` | | 1.42% | `python` | `_PyUnicode_JoinArray.part.0` | | 1.38% | `python` | `_Py_dict_lookup` | | 1.31% | `python` | `long_to_decimal_string_internal` | | 1.22% | `python` | `PyUnicode_Format` | ## pycparser | percentage | object | symbol | | ---: | :--- | :--- | | 33.28% | `python` | `_PyEval_EvalFrameDefault` | | 12.20% | `python` | `sre_ucs1_match` | | 4.12% | `python` | `gc_collect_main` | | 2.40% | `libc-2.31.so` | `pthread_attr_setschedparam` | | 2.26% | `python` | `_PyObject_Malloc` | | 2.18% | `python` | `_Py_dict_lookup` | | 1.90% | `python` | `_PyObject_Free` | | 1.75% | `python` | `unicodekeys_lookup_unicode` | | 1.17% | `python` | `visit_decref` | | 1.15% | `python` | `PySlice_AdjustIndices` | | 1.11% | `python` | `subtype_traverse` | ## pyflate | percentage | object | symbol | | ---: | :--- | :--- | | 45.53% | `python` | `_PyEval_EvalFrameDefault` | | 4.36% | `python` | `list_dealloc` | | 4.13% | `python` | `list_ass_slice` | | 2.86% | `python` | `_PyObject_Free` | | 2.82% | `libc-2.31.so` | `pthread_attr_setschedparam` | | 2.66% | `python` | `list_slice.isra.0` | | 2.03% | `python` | `_PyObject_Malloc` | | 1.99% | `python` | `list_concat` | | 1.62% | `python` | `_PyLong_Subtract` | | 1.54% | `python` | `_PyLong_Add` | | 1.44% | `libc-2.31.so` | `__nss_database_lookup` | ## python_startup | percentage | object | symbol | | ---: | :--- | :--- | | 8.77% | `python` | `_PyEval_EvalFrameDefault` | | 6.77% | `python` | `unicodekeys_lookup_unicode` | | 6.27% | `python` | `gc_collect_main` | | 3.96% | `python` | `visit_decref` | | 2.77% | `python` | `visit_reachable` | | 2.65% | `libc-2.31.so` | `__nss_database_lookup` | | 2.49% | `python` | `_Py_dict_lookup` | | 2.33% | `python` | `_PyObject_Malloc` | | 1.47% | `python` | `update_one_slot` | | 1.45% | `python` | `_PyObject_Free` | | 1.45% | `python` | `_PyStaticCode_Fini` | ## python_startup_no_site | percentage | object | symbol | | ---: | :--- | :--- | | 7.45% | `python` | `_PyEval_EvalFrameDefault` | | 6.93% | `python` | `gc_collect_main` | | 5.95% | `python` | `unicodekeys_lookup_unicode` | | 3.51% | `python` | `visit_decref` | | 3.42% | `python` | `visit_reachable` | | 3.12% | `python` | `_PyStaticCode_Fini` | | 2.44% | `libc-2.31.so` | `__nss_database_lookup` | | 2.03% | `python` | `_Py_dict_lookup` | | 1.83% | `python` | `_PyObject_Malloc` | | 1.73% | `python` | `_PyObject_Free` | | 1.41% | `python` | `update_one_slot` | ## raytrace | percentage | object | symbol | | ---: | :--- | :--- | | 49.07% | `python` | `_PyEval_EvalFrameDefault` | | 3.28% | `python` | `_PyFrame_ClearExceptCode` | | 2.18% | `python` | `_PyObject_Free` | | 1.73% | `python` | `PyFloat_FromDouble` | | 1.60% | `python` | `tupledealloc` | | 1.59% | `python` | `initialize_locals` | | 1.52% | `python` | `subtype_dealloc` | | 1.39% | `python` | `float_dealloc` | | 1.36% | `python` | `_PyObject_Malloc` | | 1.21% | `python` | `_PyEvalFramePushAndInit` | | 1.19% | `python` | `PyType_GenericAlloc` | ## regex_compile | percentage | object | symbol | | ---: | :--- | :--- | | 41.94% | `python` | `_PyEval_EvalFrameDefault` | | 3.24% | `python` | `sre_ucs1_match` | | 2.69% | `python` | `_PyObject_Malloc` | | 2.57% | `python` | `_PyObject_Free` | | 1.94% | `python` | `_PyFrame_ClearExceptCode` | | 1.28% | `python` | `unicodekeys_lookup_unicode` | | 1.14% | `python` | `tupledealloc` | | 1.14% | `python` | `_PyType_Lookup` | | 1.08% | `python` | `advance` | | 1.07% | `libc-2.31.so` | `__nss_database_lookup` | ## regex_dna | percentage | object | symbol | | ---: | :--- | :--- | | 33.77% | `python` | `sre_ucs1_match` | | 30.78% | `python` | `sre_ucs2_charset.isra.0` | | 6.96% | `python` | `sre_search` | | 6.17% | `python` | `_PyEval_EvalFrameDefault` | | 2.75% | `libm-2.31.so` | `__fmod_finite` | | 1.19% | `libc-2.31.so` | `__nss_database_lookup` | | 1.04% | `_bisect.cpython-312-x86_64-linux-gnu.so` | `_bisect_bisect_right` | ## regex_effbot | percentage | object | symbol | | ---: | :--- | :--- | | 40.91% | `python` | `sre_ucs1_match` | | 16.04% | `python` | `sre_ucs2_charset.isra.0` | | 6.86% | `python` | `sre_search` | | 6.37% | `python` | `_PyObject_Free` | | 4.52% | `python` | `_PyEval_EvalFrameDefault` | | 3.12% | `python` | `_PyObject_Malloc` | | 1.86% | `python` | `sre_ucs1_count` | | 1.13% | `python` | `unicodekeys_lookup_unicode` | | 1.09% | `python` | `gc_collect_main` | ## regex_v8 | percentage | object | symbol | | ---: | :--- | :--- | | 44.44% | `python` | `sre_ucs1_match` | | 7.62% | `python` | `_PyEval_EvalFrameDefault` | | 5.58% | `python` | `sre_search` | | 5.57% | `python` | `sre_ucs1_count` | | 4.31% | `libc-2.31.so` | `pthread_attr_setschedparam` | | 2.15% | `python` | `pattern_subx` | | 1.86% | `python` | `_PyObject_Free` | | 1.78% | `python` | `_PyObject_Malloc` | | 1.63% | `python` | `_sre_SRE_Pattern_search` | | 1.36% | `libc-2.31.so` | `__nss_database_lookup` | | 1.32% | `python` | `pattern_new_match.isra.0.part.0` | ## richards | percentage | object | symbol | | ---: | :--- | :--- | | 51.99% | `python` | `_PyEval_EvalFrameDefault` | | 6.22% | `python` | `unicodekeys_lookup_unicode` | | 3.76% | `python` | `_PyType_Lookup` | | 2.72% | `python` | `PyObject_GenericGetAttr` | | 2.48% | `python` | `_PyObject_GetInstanceAttribute` | | 2.35% | `python` | `_PyFrame_ClearExceptCode` | | 2.05% | `python` | `_PyObject_GetMethod` | | 1.46% | `python` | `PyObject_GetAttr` | | 1.23% | `python` | `gc_collect_main` | | 1.21% | `python` | `_Py_dict_lookup` | ## scimark | percentage | object | symbol | | ---: | :--- | :--- | | 44.25% | `python` | `_PyEval_EvalFrameDefault` | | 3.66% | `array.cpython-312-x86_64-linux-gnu.so` | `array_subscr` | | 3.60% | `python` | `PyFloat_FromDouble` | | 3.51% | `python` | `PyType_GetModuleByDef` | | 2.78% | `python` | `PyNumber_AsSsize_t` | | 2.72% | `python` | `_PyObject_Free` | | 2.60% | `python` | `vgetargs1_impl` | | 2.49% | `python` | `PyObject_GetItem` | | 2.13% | `python` | `_PyLong_Add` | | 1.83% | `python` | `_PyObject_Malloc` | | 1.56% | `python` | `convertitem` | ## spectral_norm | percentage | object | symbol | | ---: | :--- | :--- | | 37.76% | `python` | `_PyEval_EvalFrameDefault` | | 9.53% | `python` | `_PyLong_Add` | | 5.06% | `python` | `_PyObject_Free` | | 3.51% | `python` | `float_div` | | 3.49% | `python` | `_PyObject_Malloc (inlined)` | | 2.56% | `python` | `long_div` | | 1.98% | `python` | `_PyLong_Multiply` | | 1.91% | `python` | `PyType_IsSubtype` | | 1.90% | `python` | `enum_next` | | 1.78% | `python` | `listiter_next` | | 1.75% | `python` | `_PyFrame_ClearExceptCode` | ## sqlalchemy_declarative | percentage | object | symbol | | ---: | :--- | :--- | | 23.87% | `python` | `_PyEval_EvalFrameDefault` | | 4.81% | `python` | `unicodekeys_lookup_unicode` | | 3.18% | `python` | `gc_collect_main` | | 2.76% | `python` | `_Py_dict_lookup` | | 2.35% | `python` | `_PyObject_Malloc` | | 2.07% | `python` | `_PyType_Lookup` | | 2.02% | `libc-2.31.so` | `__nss_database_lookup` | | 1.86% | `python` | `visit_decref` | | 1.84% | `python` | `_PyObject_Free` | | 1.57% | `python` | `_PyFrame_ClearExceptCode` | | 1.50% | `python` | `visit_reachable` | ## sqlalchemy_imperative | percentage | object | symbol | | ---: | :--- | :--- | | 28.24% | `python` | `_PyEval_EvalFrameDefault` | | 4.85% | `python` | `unicodekeys_lookup_unicode` | | 2.56% | `python` | `gc_collect_main` | | 2.33% | `python` | `_Py_dict_lookup` | | 2.31% | `python` | `_PyObject_Malloc` | | 2.26% | `python` | `_PyType_Lookup` | | 2.15% | `python` | `PyObject_GenericGetAttr` | | 1.72% | `python` | `_PyObject_Free` | | 1.68% | `libc-2.31.so` | `__nss_database_lookup` | | 1.34% | `python` | `tupledealloc` | | 1.25% | `python` | `PyObject_GetAttr` | ## sqlglot | percentage | object | symbol | | ---: | :--- | :--- | | 36.89% | `python` | `_PyEval_EvalFrameDefault` | | 2.93% | `python` | `_PyObject_Free` | | 2.78% | `python` | `unicodekeys_lookup_unicode` | | 2.36% | `python` | `_PyType_Lookup` | | 2.36% | `python` | `_PyObject_Malloc` | | 2.01% | `python` | `_PyFrame_ClearExceptCode` | | 1.63% | `python` | `PyObject_GenericGetAttr` | | 1.48% | `python` | `PyType_IsSubtype` | | 1.39% | `python` | `gc_collect_main` | | 1.26% | `libc-2.31.so` | `__nss_database_lookup` | | 1.25% | `python` | `tupledealloc` | ## sqlite_synth | percentage | object | symbol | | ---: | :--- | :--- | | 11.83% | `libpthread-2.31.so` | `pthread_mutex_unlock` | | 11.81% | `libpthread-2.31.so` | `__pthread_mutex_lock` | | 8.98% | `python` | `_PyEval_EvalFrameDefault` | | 4.36% | `libsqlite3.so.0.8.6` | `sqlite3_reset` | | 2.83% | `python` | `take_gil` | | 2.29% | `python` | `_PyObject_Malloc` | | 2.23% | `python` | `_PyObject_Free` | | 2.07% | `libm-2.31.so` | `f64xsubf128` | | 1.29% | `libsqlite3.so.0.8.6` | `sqlite3_randomness` | | 1.14% | `python` | `unicodekeys_lookup_unicode` | | 1.10% | `libpthread-2.31.so` | `pthread_cond_signal@@GLIBC_2.3.2` | ## sympy | percentage | object | symbol | | ---: | :--- | :--- | | 25.90% | `python` | `_PyEval_EvalFrameDefault` | | 3.83% | `python` | `unicodekeys_lookup_unicode` | | 2.80% | `python` | `_PyObject_Malloc` | | 2.38% | `python` | `_PyObject_Free` | | 2.37% | `python` | `_PyType_Lookup` | | 1.80% | `python` | `tupledealloc` | | 1.78% | `libc-2.31.so` | `__nss_database_lookup` | | 1.46% | `python` | `_PyFrame_ClearExceptCode` | | 1.38% | `python` | `gc_collect_main` | | 1.36% | `python` | `initialize_locals` | | 1.26% | `python` | `_Py_dict_lookup` | ## telco | percentage | object | symbol | | ---: | :--- | :--- | | 17.31% | `python` | `_PyEval_EvalFrameDefault` | | 5.05% | `python` | `_PyObject_Malloc` | | 4.26% | `python` | `_PyObject_Free` | | 2.20% | `libc-2.31.so` | `__nss_database_lookup` | | 2.00% | `_decimal.cpython-312-x86_64-linux-gnu.so` | `_mpd_qaddsub` | | 1.93% | `_decimal.cpython-312-x86_64-linux-gnu.so` | `_mpd_check_exp` | | 1.67% | `python` | `PyContextVar_Get` | | 1.63% | `_decimal.cpython-312-x86_64-linux-gnu.so` | `_mpd_qmul` | | 1.62% | `_decimal.cpython-312-x86_64-linux-gnu.so` | `mpd_setdigits` | | 1.55% | `python` | `unicodekeys_lookup_unicode` | | 1.44% | `_decimal.cpython-312-x86_64-linux-gnu.so` | `nm_mpd_qadd` | ## thrift | percentage | object | symbol | | ---: | :--- | :--- | | 21.65% | `python` | `_PyEval_EvalFrameDefault` | | 3.61% | `python` | `unicodekeys_lookup_unicode` | | 3.32% | `python` | `_PyObject_Malloc` | | 2.94% | `python` | `initialize_locals` | | 2.77% | `python` | `_PyObject_Free` | | 1.89% | `python` | `PyObject_GenericGetAttr` | | 1.83% | `python` | `_PyType_Lookup` | | 1.71% | `fastbinary.cpython-312-x86_64-linux-gnu.so` | `apache::thrift::py::ProtocolBase::encodeValue` | | 1.62% | `python` | `insert_to_emptydict` | | 1.56% | `libc-2.31.so` | `__nss_database_lookup` | | 1.46% | `python` | `_Py_dict_lookup` | ## tornado_http | percentage | object | symbol | | ---: | :--- | :--- | | 26.87% | `python` | `_PyEval_EvalFrameDefault` | | 3.98% | `libc-2.31.so` | `__nss_database_lookup` | | 2.54% | `python` | `unicodekeys_lookup_unicode` | | 2.49% | `python` | `_PyObject_Malloc` | | 2.14% | `python` | `gc_collect_main` | | 1.87% | `python` | `_PyObject_Free` | | 1.29% | `python` | `_PyType_Lookup` | | 1.19% | `python` | `visit_decref` | | 1.06% | `python` | `_PyFrame_ClearExceptCode` | | 1.02% | `python` | `_Py_dict_lookup` | ## unpack_sequence | percentage | object | symbol | | ---: | :--- | :--- | | 80.90% | `python` | `_PyEval_EvalFrameDefault` | | 1.21% | `python` | `unicodekeys_lookup_unicode` | ## unpickle | percentage | object | symbol | | ---: | :--- | :--- | | 7.65% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `load` | | 6.58% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `load_counted_binunicode` | | 6.02% | `python` | `siphash13` | | 5.25% | `python` | `insertdict` | | 5.12% | `python` | `_PyObject_Free` | | 5.10% | `python` | `ascii_decode` | | 4.90% | `python` | `unicodekeys_lookup_unicode` | | 4.63% | `python` | `unicode_decode_utf8` | | 4.51% | `python` | `_PyObject_Malloc` | | 3.36% | `python` | `_PyEval_EvalFrameDefault` | | 2.95% | `python` | `PyUnicode_New.part.0` | ## unpickle_list | percentage | object | symbol | | ---: | :--- | :--- | | 17.37% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `load` | | 7.67% | `python` | `list_dealloc` | | 5.75% | `python` | `list_ass_slice` | | 5.36% | `python` | `PyList_New` | | 5.16% | `python` | `PyLong_FromLong` | | 4.93% | `python` | `_PyObject_Free` | | 4.45% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `Pdata_push` | | 3.84% | `python` | `_PyEval_EvalFrameDefault` | | 3.62% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `do_append.isra.0` | | 3.07% | `python` | `_PyObject_Malloc` | | 2.42% | `python` | `_PyObject_Calloc` | ## unpickle_pure_python | percentage | object | symbol | | ---: | :--- | :--- | | 49.53% | `python` | `_PyEval_EvalFrameDefault` | | 2.48% | `python` | `_Py_dict_lookup` | | 2.46% | `python` | `PyObject_IsTrue` | | 2.01% | `python` | `_PyFrame_ClearExceptCode` | | 1.68% | `libc-2.31.so` | `__nss_database_lookup` | | 1.65% | `python` | `_PyObject_Free` | | 1.63% | `python` | `bytes_subscript` | | 1.52% | `python` | `_PyObject_Malloc` | | 1.35% | `python` | `PyNumber_AsSsize_t` | | 1.10% | `python` | `insertdict` | | 1.10% | `python` | `unicodekeys_lookup_unicode` | ## xml_etree | percentage | object | symbol | | ---: | :--- | :--- | | 19.90% | `python` | `_PyEval_EvalFrameDefault` | | 3.31% | `python` | `_PyObject_Malloc` | | 3.09% | `python` | `gc_collect_main` | | 2.62% | `pyexpat.cpython-312-x86_64-linux-gnu.so` | `normal_contentTok` | | 2.58% | `pyexpat.cpython-312-x86_64-linux-gnu.so` | `normal_updatePosition` | | 2.30% | `python` | `_PyObject_Free` | | 1.89% | `python` | `_PyType_Lookup` | | 1.87% | `python` | `PyObject_GenericGetAttr` | | 1.87% | `python` | `visit_reachable` | | 1.77% | `libc-2.31.so` | `__nss_database_lookup` | | 1.67% | `python` | `visit_decref` |

This graph takes the top 10 functions across all benchmarks and plots their relative contributions.

Graph of time spent in the top 10 functions by benchmark *Apologies that this isn't color-blind friendly -- I need to work on improving this graph.* EDIT: Made it more obvious that the scales are percentages and the extra space is "other functions". ![perf](https://user-images.githubusercontent.com/38294/230391561-938abd00-ae77-464c-967a-b65708bf14d9.png)

All data as CSV: perf.zip

ericsnowcurrently commented 1 year ago

Would it be hard to have a graph with % time, to make it easier to compare benchmarks?

mdboom commented 1 year ago

Would it be hard to have a graph with % time, to make it easier to compare benchmarks?

You mean, for a particular benchmark, graph the % time spent in each function so you could compare two runs of the same benchmark side-by-side and see if something improved or regressed?

ericsnowcurrently commented 1 year ago

I mean take the graph you already posted and stretch each row until they are the same length (ergo percent instead of time).

mdboom commented 1 year ago

Ah, got it. That graph is in percentage of runtime, but the extra space on the right for each bar is "all other functions that don't make up the top 10 over all benchmarks". For example, the json benchmarks spend a lot of time in functions in the json C extension, but those aren't common in the benchmarks overall, so there's a lot of whitespace at the end -- you can see that from the table. Admittedly, it's not the greatest plot -- I can't really show all of the time in each benchmark because you quickly run out of easy-distinguishable colors. Maybe if I get some sort of tooltip working, you could hover over a bar to see the function name and then we wouldn't have to rely on colors for those "long tail" functions.

(I've edited the plot above to make this more obvious).

markshannon commented 1 year ago

What might be useful is to group the functions into categories:

ericsnowcurrently commented 1 year ago

(I've edited the plot above to make this more obvious).

Thanks! That solved it.

mdboom commented 1 year ago

At @markshannon's suggestion, here's what grouping looks like. The boundaries between categories are a bit messy, but I also didn't want to have too many. You can see which functions map to which categories in the tables below.

Table of results by benchmark with categories ## 2to3 | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 27.10% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.58% | `python` | `gc_collect_main` | gc | | 3.38% | `python` | `unicodekeys_lookup_unicode` | lookups | | 2.51% | `python` | `_PyObject_Malloc (inlined)` | memory | | 1.82% | `python` | `_PyObject_Free` | memory | | 1.76% | `python` | `_Py_dict_lookup` | lookups | | 1.73% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.68% | `python` | `sre_ucs1_match` | regex | | 1.62% | `python` | `tupledealloc` | containers | | 1.46% | `python` | `_PyType_Lookup` | lookups | | 1.34% | `python` | `visit_decref` | gc | | 1.18% | `python` | `PyObject_GenericGetAttr` | lookups | | 1.18% | `python` | `_PyFrame_ClearExceptCode` | exceptions | ## aiohttp | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 25.77% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.47% | `python` | `unicodekeys_lookup_unicode` | lookups | | 2.29% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 2.03% | `python` | `_PyObject_Malloc` | memory | | 1.87% | `python` | `_PyObject_Free` | memory | | 1.60% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.52% | `python` | `initialize_locals` | interpreter | | 1.39% | `python` | `gc_collect_main` | gc | | 1.16% | `python` | `_Py_dict_lookup` | lookups | | 1.15% | `python` | `tupledealloc` | containers | | 1.00% | `python` | `_PyType_Lookup` | lookups | ## async_generators | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 22.58% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 10.39% | `python` | `_PyErr_SetObject.part.0` | exceptions | | 3.11% | `python` | `_PyObject_Free` | memory | | 3.01% | `python` | `async_gen_asend_iternext` | async | | 2.58% | `python` | `_PyObject_Malloc` | memory | | 2.54% | `python` | `PyType_GenericAlloc` | memory | | 2.38% | `python` | `tupledealloc` | containers | | 2.22% | `python` | `gc_collect_main` | gc | | 2.01% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.91% | `python` | `async_gen_anext` | async | | 1.85% | `python` | `PyErr_ExceptionMatches` | exceptions | | 1.64% | `python` | `_Py_NewReference` | memory | | 1.55% | `python` | `_PyObject_MakeTpCall` | containers | | 1.55% | `python` | `advance` | compiler | | 1.52% | `python` | `_PyTuple_FromArray` | containers | | 1.35% | `python` | `async_gen_asend_dealloc` | memory | | 1.26% | `python` | `async_gen_wrapped_val_dealloc` | memory | | 1.25% | `python` | `PyObject_GC_UnTrack` | containers | | 1.23% | `python` | `_PyErr_Restore` | exceptions | | 1.22% | `python` | `_PyAsyncGenValueWrapperNew` | async | | 1.21% | `python` | `_PyGen_SetStopIterationValue` | unknown | | 1.17% | `python` | `_PyGen_FetchStopIterationValue` | unknown | | 1.09% | `python` | `PyObject_CallOneArg` | containers | | 1.06% | `python` | `tuple_alloc` | containers | | 1.04% | `python` | `type_call` | unknown | | 1.02% | `python` | `StopIteration_dealloc` | memory | ## async_tree | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 26.24% | `python` | `gc_collect_main` | gc | | 18.06% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 6.94% | `python` | `visit_reachable` | gc | | 6.63% | `python` | `visit_decref` | gc | | 2.02% | `python` | `_PyObject_Malloc` | memory | | 1.49% | `python` | `_PyObject_Free` | memory | | 1.21% | `python` | `subtype_traverse` | gc | | 1.04% | `python` | `initialize_locals` | interpreter | ## async_tree_cpu_io_mixed | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 18.84% | `python` | `gc_collect_main` | gc | | 16.08% | `python` | `k_mul` | numbers | | 14.60% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 4.84% | `python` | `visit_reachable` | gc | | 4.60% | `python` | `visit_decref` | gc | | 2.79% | `python` | `_PyObject_Malloc` | memory | | 2.22% | `python` | `_PyObject_Free` | memory | | 1.31% | `python` | `PyErr_CheckSignals` | exceptions | | 1.22% | `math.cpython-312-x86_64-linux-gnu.so` | `factorial_partial_product` | math | ## async_tree_io | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 33.95% | `python` | `gc_collect_main` | gc | | 16.74% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 8.03% | `python` | `visit_reachable` | gc | | 7.21% | `python` | `visit_decref` | gc | | 1.66% | `python` | `_PyObject_Malloc` | memory | | 1.29% | `python` | `subtype_traverse` | gc | | 1.21% | `python` | `_PyObject_Free` | memory | | 1.04% | `python` | `initialize_locals` | interpreter | ## async_tree_memoization | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 25.84% | `python` | `gc_collect_main` | gc | | 19.07% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 6.66% | `python` | `visit_reachable` | gc | | 6.52% | `python` | `visit_decref` | gc | | 2.00% | `python` | `_PyObject_Malloc` | memory | | 1.58% | `python` | `_PyObject_Free` | memory | | 1.17% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.11% | `python` | `subtype_traverse` | gc | | 1.05% | `python` | `unicodekeys_lookup_unicode` | lookups | ## asyncio_tcp | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 32.63% | `[kernel.kallsyms]` | `copy_user_enhanced_fast_string` | kernel | | 16.73% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 9.28% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 8.16% | `[kernel.kallsyms]` | `clear_page_erms` | kernel | ## chameleon | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 40.74% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.16% | `python` | `_PyObject_Malloc` | memory | | 3.09% | `python` | `unicodekeys_lookup_unicode` | lookups | | 2.73% | `python` | `_PyObject_Free` | memory | | 2.08% | `python` | `_Py_dict_lookup` | lookups | | 2.04% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.93% | `python` | `sre_ucs2_charset.isra.0` | regex | | 1.66% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.65% | `python` | `_PyUnicode_JoinArray.part.0` | strings | | 1.44% | `python` | `gc_collect_main` | gc | | 1.28% | `python` | `long_to_decimal_string_internal` | strings | | 1.22% | `python` | `PyUnicode_Format` | strings | | 1.12% | `python` | `_copy_characters.part.0.constprop.0` | unknown | | 1.03% | `python` | `_sre_SRE_Pattern_search` | regex | ## chaos | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 48.14% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.34% | `python` | `_PyLong_Subtract` | numbers | | 1.98% | `python` | `_PyLong_Add` | numbers | | 1.82% | `python` | `_PyObject_Free` | memory | | 1.79% | `python` | `PyType_IsSubtype` | unknown | | 1.58% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.27% | `python` | `tupledealloc` | containers | | 1.13% | `python` | `PyFloat_FromDouble` | numbers | | 1.04% | `python` | `initialize_locals` | interpreter | | 1.02% | `python` | `_PyObject_Malloc (inlined)` | memory | | 1.00% | `libc-2.31.so` | `__nss_database_lookup` | libc | ## comprehensions | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 32.34% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 4.48% | `python` | `_Py_dict_lookup` | lookups | | 3.68% | `python` | `_PyObject_Malloc` | memory | | 2.57% | `python` | `_PyObject_Free` | memory | | 2.25% | `python` | `unicodekeys_lookup_unicode` | lookups | | 2.17% | `python` | `advance` | compiler | | 1.68% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.58% | `python` | `PyFunction_NewWithQualName` | compiler | | 1.35% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.21% | `python` | `dict_get` | containers | | 1.10% | `python` | `list_dealloc` | memory | | 1.10% | `python` | `PyObject_RichCompare` | containers | | 1.05% | `python` | `gc_collect_main` | gc | | 1.00% | `python` | `_PyObject_Realloc` | containers | ## concurrent_imap | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 14.02% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 9.82% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.77% | `python` | `_PyObject_Free` | memory | | 2.38% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.76% | `python` | `gc_collect_main` | gc | | 1.64% | `python` | `tupledealloc` | containers | | 1.49% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.32% | `python` | `_PyObject_Malloc` | memory | | 1.31% | `python` | `initialize_locals` | interpreter | | 1.21% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.14% | `python` | `_PyEvalFramePushAndInit` | interpreter | | 1.08% | `python` | `_Py_dict_lookup` | lookups | | 1.03% | `python` | `visit_decref` | gc | ## coroutines | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 45.05% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 5.99% | `python` | `gen_dealloc` | memory | | 3.67% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 3.29% | `python` | `_PyObject_GC_NewVar` | containers | | 3.20% | `python` | `make_gen` | unknown | | 3.19% | `python` | `_PyLong_Subtract` | numbers | | 2.69% | `python` | `_PyLong_Add` | numbers | | 2.67% | `python` | `_PyObject_Free` | memory | | 2.12% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.85% | `python` | `_PyObject_Malloc (inlined)` | memory | | 1.79% | `python` | `PyObject_CallFinalizerFromDealloc` | memory | | 1.40% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.34% | `python` | `gc_collect_main` | gc | | 1.23% | `python` | `PyObject_GC_Del` | containers | | 1.10% | `python` | `_Py_MakeCoro` | unknown | ## coverage | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 25.34% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 5.74% | `tracer.cpython-312-x86_64-linux-gnu.so` | `CTracer_trace` | tracer | | 5.70% | `python` | `unicodekeys_lookup_unicode` | lookups | | 3.52% | `python` | `call_trace.part.0` | unknown | | 3.46% | `python` | `_Py_dict_lookup` | lookups | | 2.91% | `python` | `_PyObject_Malloc` | memory | | 2.29% | `python` | `_PyObject_Free` | memory | | 2.26% | `python` | `siphash13` | unknown | | 1.95% | `python` | `_PyType_Lookup` | lookups | | 1.68% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.57% | `python` | `gc_collect_main` | gc | | 1.35% | `python` | `PyDict_GetItem` | containers | | 1.34% | `python` | `PyLong_FromLong` | numbers | | 1.25% | `python` | `initialize_locals` | interpreter | | 1.24% | `python` | `set_add_entry` | containers | | 1.13% | `python` | `long_richcompare` | numbers | | 1.00% | `python` | `PyObject_GenericGetAttr` | lookups | ## crypto_pyaes | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 37.06% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 6.90% | `python` | `long_bitwise` | numbers | | 4.79% | `python` | `_PyObject_Free` | memory | | 3.87% | `python` | `long_rshift1` | numbers | | 3.83% | `python` | `_PyObject_Malloc` | memory | | 2.69% | `python` | `PyObject_GenericGetAttr` | lookups | | 2.58% | `python` | `l_mod` | numbers | | 2.51% | `python` | `long_and` | numbers | | 2.35% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.72% | `python` | `PyLong_FromLong` | numbers | | 1.53% | `python` | `_PyLong_Add` | numbers | | 1.52% | `python` | `long_rshift` | numbers | | 1.36% | `python` | `PyObject_GetAttr` | lookups | | 1.32% | `python` | `_PyType_Lookup` | lookups | | 1.17% | `python` | `PyNumber_And` | numbers | | 1.14% | `python` | `long_xor` | numbers | | 1.10% | `python` | `_PyObject_GetInstanceAttribute` | containers | | 1.04% | `python` | `_Py_NewReference` | memory | ## dask | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 34.25% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.85% | `python` | `gc_collect_main` | gc | | 2.46% | `python` | `_PyObject_Malloc` | memory | | 2.17% | `python` | `unicodekeys_lookup_unicode` | lookups | | 2.12% | `python` | `_PyObject_Free` | memory | | 1.96% | `python` | `visit_decref` | gc | | 1.72% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.65% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.46% | `python` | `visit_reachable` | gc | | 1.23% | `python` | `_Py_dict_lookup` | lookups | | 1.20% | `python` | `tupledealloc` | containers | ## deepcopy | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 46.42% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 5.92% | `python` | `_Py_dict_lookup` | lookups | | 3.04% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 2.89% | `python` | `_PyObject_Free` | memory | | 2.37% | `python` | `_PyObject_Malloc` | memory | | 2.03% | `python` | `dict_get` | containers | | 1.50% | `python` | `PyLong_FromVoidPtr` | numbers | | 1.23% | `python` | `unicodekeys_lookup_unicode` | lookups | ## deltablue | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 60.24% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.06% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 2.22% | `python` | `gc_collect_main` | gc | | 1.93% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.77% | `python` | `_PyObject_Malloc` | memory | | 1.68% | `python` | `_PyObject_GetMethod` | lookups | | 1.63% | `python` | `_PyObject_Free` | memory | | 1.44% | `python` | `_PyType_Lookup` | lookups | | 1.08% | `python` | `visit_decref` | gc | | 1.06% | `python` | `_PyThreadState_PopFrame` | unknown | ## django_template | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 33.98% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.33% | `python` | `unicodekeys_lookup_unicode` | lookups | | 2.82% | `python` | `_PyObject_Malloc (inlined)` | memory | | 2.48% | `python` | `_PyObject_Free` | memory | | 2.01% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.96% | `python` | `gc_collect_main` | gc | | 1.68% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.52% | `python` | `_Py_dict_lookup` | lookups | | 1.32% | `python` | `_PyType_Lookup` | lookups | | 1.27% | `python` | `_PyObject_GenericGetAttrWithDict` | containers | | 1.12% | `python` | `initialize_locals` | interpreter | ## djangocms | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 17.57% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 5.74% | `python` | `unicodekeys_lookup_unicode` | lookups | | 4.91% | `python` | `gc_collect_main` | gc | | 2.47% | `python` | `_PyObject_Malloc` | memory | | 2.40% | `python` | `_Py_dict_lookup` | lookups | | 2.05% | `python` | `visit_decref` | gc | | 1.95% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.69% | `python` | `_PyType_Lookup` | lookups | | 1.58% | `python` | `_PyObject_Free` | memory | | 1.56% | `python` | `visit_reachable` | gc | ## docutils | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 25.23% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 7.00% | `python` | `sre_ucs1_match` | regex | | 6.46% | `python` | `gc_collect_main` | gc | | 3.23% | `python` | `unicodekeys_lookup_unicode` | lookups | | 2.68% | `python` | `_PyObject_Malloc` | memory | | 2.37% | `python` | `_PyObject_Free` | memory | | 2.30% | `python` | `visit_decref` | gc | | 2.26% | `python` | `_PyType_Lookup` | lookups | | 2.04% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.69% | `python` | `sre_ucs2_charset.isra.0` | regex | | 1.48% | `python` | `visit_reachable` | gc | | 1.46% | `python` | `PyObject_GenericGetAttr` | lookups | | 1.44% | `python` | `_Py_dict_lookup` | lookups | | 1.30% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.00% | `python` | `advance` | compiler | ## dulwich_log | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 28.50% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.91% | `libz.so.1.2.11` | `inflateCodesUsed` | libz | | 2.76% | `python` | `_PyObject_Malloc` | memory | | 2.43% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 2.20% | `python` | `_PyObject_Free` | memory | | 1.80% | `libz.so.1.2.11` | `inflateBackEnd` | libz | | 1.57% | `libz.so.1.2.11` | `inflate` | libz | | 1.31% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.18% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.15% | `python` | `gc_collect_main` | gc | ## fannkuch | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 37.68% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 8.34% | `python` | `PySlice_AdjustIndices` | containers | | 5.61% | `python` | `list_subscript` | containers | | 5.19% | `python` | `list_ass_slice` | containers | | 4.58% | `python` | `_PyLong_Add` | numbers | | 3.63% | `python` | `list_dealloc` | memory | | 3.12% | `python` | `slice_dealloc` | memory | | 2.45% | `python` | `PyNumber_AsSsize_t` | numbers | | 2.30% | `python` | `_PyEval_SliceIndex` | unknown | | 2.07% | `python` | `PySlice_Unpack` | containers | | 1.60% | `python` | `PySlice_New` | containers | | 1.58% | `python` | `list_ass_subscript` | containers | | 1.57% | `python` | `_PyBuildSlice_ConsumeRefs` | unknown | | 1.56% | `python` | `_PyObject_Free` | memory | | 1.38% | `python` | `_PyObject_Malloc` | memory | | 1.34% | `python` | `_Py_NewReference` | memory | | 1.28% | `python` | `PyLong_AsSsize_t` | numbers | | 1.11% | `python` | `list_insert` | containers | | 1.09% | `python` | `PyObject_IsTrue` | containers | ## float | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 37.46% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 4.41% | `libm-2.31.so` | `f64xsubf128` | libm | | 3.86% | `python` | `gc_collect_main` | gc | | 3.03% | `python` | `subtype_traverse` | gc | | 2.88% | `python` | `visit_decref` | gc | | 2.52% | `python` | `visit_reachable` | gc | | 2.06% | `python` | `_PyObject_Free` | memory | | 2.04% | `python` | `_PyObject_Malloc (inlined)` | memory | | 2.03% | `python` | `PyFloat_FromDouble` | numbers | | 1.98% | `python` | `float_div` | numbers | | 1.82% | `python` | `subtype_dealloc` | memory | | 1.62% | `python` | `float_dealloc` | memory | | 1.25% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.00% | `python` | `PyType_IsSubtype` | unknown | | 1.00% | `python` | `_Py_NewReference` | memory | ## gc_collect | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 31.60% | `python` | `gc_collect_main` | gc | | 14.78% | `python` | `visit_reachable` | gc | | 14.17% | `python` | `visit_decref` | gc | | 6.51% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 5.19% | `python` | `dict_traverse` | gc | | 1.91% | `python` | `PyObject_IS_GC` | gc | | 1.90% | `python` | `_PyDict_MaybeUntrack` | gc | | 1.80% | `python` | `subtype_traverse` | gc | | 1.74% | `python` | `func_traverse` | gc | | 1.62% | `python` | `set_traverse` | gc | | 1.47% | `python` | `_PyObject_VisitManagedDict` | gc | | 1.32% | `python` | `type_is_gc` | gc | ## gc_traversal | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 29.16% | `python` | `visit_reachable` | gc | | 21.25% | `python` | `visit_decref` | gc | | 15.38% | `python` | `list_traverse` | gc | | 12.97% | `python` | `gc_collect_main` | gc | | 3.73% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.24% | `python` | `dict_traverse` | gc | ## generators | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 49.58% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 4.44% | `python` | `gc_collect_main` | gc | | 2.35% | `python` | `_PyObject_Malloc` | memory | | 1.94% | `python` | `_PyObject_Free` | memory | | 1.51% | `python` | `visit_reachable` | gc | | 1.45% | `python` | `initialize_locals` | interpreter | | 1.44% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.42% | `python` | `gen_dealloc` | memory | | 1.38% | `python` | `visit_decref` | gc | | 1.24% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.18% | `python` | `_PyEvalFramePushAndInit` | interpreter | ## genshi | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 46.09% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.96% | `python` | `unicodekeys_lookup_unicode` | lookups | | 2.49% | `python` | `_PyObject_Free` | memory | | 2.40% | `python` | `_PyObject_Malloc` | memory | | 2.35% | `python` | `_Py_dict_lookup` | lookups | | 1.43% | `python` | `insertdict` | containers | | 1.36% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.30% | `python` | `_PyType_Lookup` | lookups | | 1.23% | `python` | `insert_to_emptydict` | containers | | 1.13% | `python` | `tupledealloc` | containers | | 1.05% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.00% | `python` | `PyObject_IsTrue` | containers | ## go | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 65.16% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.17% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 2.00% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.54% | `python` | `_PyObject_GetMethod` | lookups | | 1.25% | `python` | `_PyObject_Free` | memory | | 1.07% | `python` | `_Py_dict_lookup` | lookups | | 1.05% | `python` | `_PyType_Lookup` | lookups | | 1.04% | `python` | `_PyObject_Malloc (inlined)` | memory | ## gunicorn | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 27.12% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.84% | `python` | `unicodekeys_lookup_unicode` | lookups | | 2.22% | `python` | `_PyObject_Malloc` | memory | | 2.20% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.92% | `python` | `_PyObject_Free` | memory | | 1.65% | `python` | `gc_collect_main` | gc | | 1.53% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.37% | `python` | `initialize_locals` | interpreter | | 1.23% | `python` | `_Py_dict_lookup` | lookups | | 1.20% | `python` | `tupledealloc` | containers | ## hexiom | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 56.30% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.38% | `python` | `long_richcompare` | numbers | | 2.34% | `python` | `list_contains` | containers | | 2.32% | `python` | `PyObject_RichCompare` | containers | | 2.17% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.56% | `python` | `PyObject_RichCompareBool` | containers | | 1.54% | `python` | `_PyObject_Free` | memory | | 1.36% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.33% | `python` | `PyLong_FromSsize_t` | numbers | | 1.23% | `python` | `gen_iternext` | containers | | 1.23% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.22% | `python` | `_PyObject_Malloc` | memory | | 1.11% | `python` | `gc_collect_main` | gc | ## html5lib | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 36.39% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 6.32% | `python` | `sre_ucs2_charset.isra.0` | regex | | 3.48% | `python` | `gc_collect_main` | gc | | 2.34% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.98% | `python` | `_PyObject_Malloc` | memory | | 1.77% | `python` | `_Py_dict_lookup` | lookups | | 1.76% | `python` | `_PyObject_Free` | memory | | 1.46% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.19% | `python` | `visit_decref` | gc | | 1.12% | `python` | `_PyFrame_ClearExceptCode` | exceptions | ## json | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 12.00% | `_json.cpython-312-x86_64-linux-gnu.so` | `scanstring_unicode` | _json | | 7.81% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 6.49% | `_json.cpython-312-x86_64-linux-gnu.so` | `scan_once_unicode` | _json | | 6.01% | `python` | `siphash13` | unknown | | 5.14% | `python` | `unicodekeys_lookup_unicode` | lookups | | 5.06% | `python` | `_PyObject_Malloc` | memory | | 3.73% | `python` | `PyDict_SetDefault` | containers | | 3.63% | `python` | `_PyObject_Free` | memory | | 3.03% | `python` | `PyLong_FromString` | numbers | | 2.64% | `python` | `insertdict` | containers | | 2.45% | `python` | `_Py_dict_lookup` | lookups | | 2.43% | `libc-2.31.so` | `pthread_attr_setschedparam` | libc | | 2.32% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 2.04% | `python` | `_PyUnicode_FromASCII (inlined)` | strings | | 1.84% | `python` | `free_keys_object` | unknown | | 1.61% | `python` | `find_empty_slot` | unknown | | 1.57% | `python` | `build_indices_unicode` | unknown | | 1.47% | `python` | `PyUnicode_Substring` | strings | ## json_dumps | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 13.07% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 8.34% | `_json.cpython-312-x86_64-linux-gnu.so` | `py_encode_basestring_ascii` | _json | | 4.86% | `python` | `_PyObject_Malloc` | memory | | 4.67% | `python` | `_PyObject_Free` | memory | | 4.36% | `python` | `_copy_characters.part.0.constprop.0` | unknown | | 3.79% | `python` | `_PyUnicodeWriter_WriteStr` | strings | | 3.25% | `_json.cpython-312-x86_64-linux-gnu.so` | `encoder_listencode_obj` | _json | | 2.89% | `python` | `_Py_dict_lookup` | lookups | | 2.86% | `python` | `resize_compact` | containers | | 2.86% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 2.57% | `python` | `unicodekeys_lookup_unicode` | lookups | | 2.52% | `python` | `PyUnicode_New` | strings | | 2.47% | `_json.cpython-312-x86_64-linux-gnu.so` | `encoder_encode_key_value` | _json | | 1.65% | `python` | `PyDict_Next` | containers | | 1.62% | `python` | `convertitem` | unknown | | 1.56% | `python` | `vgetargskeywords` | unknown | | 1.55% | `python` | `_PyObject_Realloc` | containers | | 1.28% | `python` | `tupledealloc` | containers | | 1.11% | `python` | `_PyUnicodeWriter_PrepareInternal` | strings | | 1.07% | `python` | `initialize_locals` | interpreter | ## json_loads | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 13.10% | `_json.cpython-312-x86_64-linux-gnu.so` | `scanstring_unicode` | _json | | 7.15% | `_json.cpython-312-x86_64-linux-gnu.so` | `scan_once_unicode` | _json | | 6.98% | `python` | `siphash13` | unknown | | 6.74% | `python` | `unicodekeys_lookup_unicode` | lookups | | 5.60% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 4.95% | `python` | `_PyObject_Malloc` | memory | | 3.58% | `python` | `_PyObject_Free` | memory | | 3.40% | `python` | `_Py_dict_lookup` | lookups | | 3.20% | `python` | `insertdict` | containers | | 3.11% | `python` | `PyLong_FromString` | numbers | | 3.06% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 3.04% | `python` | `_PyUnicode_FromASCII` | strings | | 2.81% | `python` | `PyDict_SetDefault` | containers | | 2.30% | `python` | `PyUnicode_Substring` | strings | | 1.30% | `python` | `free_keys_object` | unknown | | 1.30% | `python` | `find_empty_slot` | unknown | | 1.05% | `libc-2.31.so` | `pthread_attr_setschedparam` | libc | | 1.03% | `python` | `PyDict_SetItem` | containers | | 1.02% | `python` | `build_indices_unicode` | unknown | ## logging | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 46.86% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.54% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 2.00% | `python` | `_Py_dict_lookup` | lookups | | 1.93% | `python` | `initialize_locals` | interpreter | | 1.78% | `python` | `dict_dealloc` | memory | | 1.78% | `python` | `advance` | compiler | | 1.71% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.62% | `python` | `_PyObject_Malloc (inlined)` | memory | | 1.56% | `python` | `_PyObject_Free` | memory | | 1.30% | `python` | `_PyEvalFramePushAndInit` | interpreter | | 1.18% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.17% | `python` | `PyObject_GenericGetAttr` | lookups | ## mako | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 37.34% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 8.02% | `python` | `replace` | unknown | | 5.03% | `python` | `long_to_decimal_string_internal` | strings | | 3.93% | `python` | `_PyUnicode_JoinArray.part.0` | strings | | 3.28% | `python` | `_PyObject_Free` | memory | | 2.82% | `python` | `deque_append` | unknown | | 2.48% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.89% | `python` | `_PyObject_Malloc` | memory | | 1.88% | `python` | `unicode_replace` | strings | | 1.83% | `python` | `dequeiter_next` | unknown | | 1.41% | `python` | `list_extend` | containers | | 1.16% | `python` | `PyUnicode_New` | strings | | 1.15% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.06% | `python` | `gc_collect_main` | gc | | 1.00% | `python` | `sre_ucs2_charset.isra.0` | regex | ## mdp | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 28.11% | `python` | `tuplehash` | containers | | 15.59% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 13.94% | `python` | `PyObject_Hash` | containers | | 11.14% | `python` | `long_hash` | numbers | | 5.99% | `python` | `_Py_dict_lookup` | lookups | | 2.04% | `python` | `tuplerichcompare` | containers | | 1.41% | `python` | `PyObject_RichCompareBool` | containers | | 1.33% | `python` | `PyObject_RichCompare` | containers | | 1.16% | `python` | `_PyObject_Free` | memory | | 1.15% | `python` | `dict_subscript` | containers | | 1.05% | `python` | `_PyObject_Malloc` | memory | ## meteor_contest | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 21.41% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 8.21% | `python` | `set_issubset` | containers | | 7.68% | `python` | `set_lookkey` | containers | | 5.81% | `python` | `setiter_iternext` | containers | | 3.49% | `python` | `set_difference` | containers | | 3.26% | `python` | `set_dealloc` | memory | | 2.37% | `python` | `PyObject_RichCompare` | containers | | 2.07% | `python` | `_PyObject_Free` | memory | | 1.92% | `python` | `set_add_entry` | containers | | 1.90% | `python` | `list_dealloc` | memory | | 1.81% | `python` | `_PyObject_Malloc` | memory | | 1.52% | `python` | `long_richcompare` | numbers | | 1.44% | `python` | `min_max` | numbers | | 1.43% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.37% | `python` | `list_slice.isra.0` | containers | | 1.34% | `python` | `gc_collect_main` | gc | | 1.12% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.04% | `python` | `PyIter_Next` | unknown | ## mypy2 | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 29.20% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 13.85% | `python` | `gc_collect_main` | gc | | 2.73% | `python` | `unicodekeys_lookup_unicode` | lookups | | 2.67% | `python` | `_PyObject_Malloc` | memory | | 2.51% | `python` | `visit_decref` | gc | | 1.98% | `python` | `_PyObject_Free` | memory | | 1.92% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.57% | `python` | `_Py_dict_lookup` | lookups | | 1.56% | `python` | `initialize_locals` | interpreter | | 1.39% | `python` | `_PyType_Lookup` | lookups | | 1.33% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.30% | `python` | `subtype_traverse` | gc | | 1.20% | `python` | `subtype_dealloc` | memory | | 1.13% | `python` | `visit_reachable` | gc | ## nbody | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 68.08% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 6.42% | `python` | `PyFloat_FromDouble` | numbers | | 4.31% | `libm-2.31.so` | `f64xsubf128` | libm | | 2.40% | `python` | `float_dealloc` | memory | | 2.26% | `python` | `_Py_NewReference` | memory | | 1.30% | `python` | `float_pow` | numbers | ## nqueens | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 37.32% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 4.69% | `python` | `_PyObject_Malloc (inlined)` | memory | | 3.50% | `python` | `_PyObject_Free` | memory | | 2.13% | `python` | `gen_iternext` | containers | | 2.11% | `python` | `set_add_entry` | containers | | 1.92% | `python` | `PySlice_AdjustIndices` | containers | | 1.70% | `python` | `_PyLong_Add` | numbers | | 1.62% | `python` | `list_dealloc` | memory | | 1.49% | `python` | `tupledealloc` | containers | | 1.34% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.33% | `python` | `set_dealloc` | memory | | 1.31% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.11% | `python` | `PyLong_FromLong` | numbers | ## pathlib | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 18.07% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.76% | `python` | `_PyObject_Malloc` | memory | | 3.35% | `python` | `_PyObject_Free` | memory | | 1.65% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.58% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.50% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.46% | `[kernel.kallsyms]` | `__d_lookup_rcu` | kernel | | 1.21% | `python` | `initialize_locals` | interpreter | | 1.20% | `libpthread-2.31.so` | `__pthread_mutex_lock` | libpthread | | 1.14% | `[kernel.kallsyms]` | `__ext4fs_dirhash` | kernel | | 1.13% | `[kernel.kallsyms]` | `memset_erms` | kernel | | 1.08% | `python` | `gc_collect_main` | gc | ## pickle | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 26.17% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `save` | _pickle | | 9.04% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `_Pickler_Write` | _pickle | | 7.60% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `PyMemoTable_Set` | _pickle | | 4.32% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 4.32% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `Pickler_clear` | _pickle | | 3.87% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `memo_put.isra.0` | _pickle | | 3.75% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 3.14% | `python` | `PyDict_Next` | containers | | 2.79% | `python` | `PyUnicode_AsUTF8AndSize` | strings | | 2.43% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `_Pickler_Write.constprop.3` | _pickle | | 1.65% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `memo_get.isra.0` | _pickle | | 1.61% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.54% | `libc-2.31.so` | `pthread_attr_setschedparam` | libc | | 1.35% | `python` | `_PyObject_Free` | memory | | 1.24% | `python` | `gc_collect_main` | gc | | 1.14% | `python` | `_PyObject_Malloc` | memory | ## pickle_dict | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 45.53% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `save` | _pickle | | 12.01% | `python` | `PyDict_Next` | containers | | 7.67% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `_Pickler_Write` | _pickle | | 6.92% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `_Pickler_Write.constprop.3` | _pickle | | 4.16% | `python` | `PyLong_AsLongAndOverflow` | numbers | | 3.12% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.07% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `PyMemoTable_Set` | _pickle | | 1.44% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `Pickler_clear` | _pickle | ## pickle_list | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 49.69% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `save` | _pickle | | 10.32% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `_Pickler_Write` | _pickle | | 4.70% | `python` | `PyLong_AsLongAndOverflow` | numbers | | 4.70% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `_Pickler_Write.constprop.3` | _pickle | | 4.52% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `PyMemoTable_Set` | _pickle | | 2.94% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.40% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `Pickler_clear` | _pickle | | 1.69% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `memo_put.isra.0` | _pickle | | 1.66% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.47% | `libc-2.31.so` | `pthread_attr_setschedparam` | libc | | 1.03% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `0x0000000000005cc4` | _pickle | ## pickle_pure_python | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 42.49% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.82% | `python` | `_Py_dict_lookup` | lookups | | 2.72% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 2.69% | `python` | `_PyObject_Malloc` | memory | | 2.42% | `python` | `_PyObject_Free` | memory | | 2.30% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.70% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.19% | `python` | `initialize_locals` | interpreter | | 1.13% | `python` | `gc_collect_main` | gc | ## pidigits | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 35.94% | `python` | `x_divrem` | numbers | | 23.00% | `python` | `k_mul` | numbers | | 11.49% | `python` | `x_add` | numbers | | 7.46% | `python` | `x_sub` | numbers | | 4.15% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.42% | `libc-2.31.so` | `pthread_attr_setschedparam` | libc | | 1.64% | `libc-2.31.so` | `__nss_database_lookup` | libc | ## pprint | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 43.67% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.51% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 3.05% | `python` | `_PyObject_Malloc` | memory | | 3.02% | `python` | `_PyObject_Free` | memory | | 2.31% | `python` | `_PyType_Lookup` | lookups | | 1.85% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.84% | `python` | `tupledealloc` | containers | | 1.42% | `python` | `_PyUnicode_JoinArray.part.0` | strings | | 1.38% | `python` | `_Py_dict_lookup` | lookups | | 1.31% | `python` | `long_to_decimal_string_internal` | strings | | 1.22% | `python` | `PyUnicode_Format` | strings | | 1.16% | `python` | `_Py_type_getattro_impl` | lookups | ## pycparser | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 33.28% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 12.20% | `python` | `sre_ucs1_match` | regex | | 4.12% | `python` | `gc_collect_main` | gc | | 2.40% | `libc-2.31.so` | `pthread_attr_setschedparam` | libc | | 2.26% | `python` | `_PyObject_Malloc` | memory | | 2.18% | `python` | `_Py_dict_lookup` | lookups | | 1.90% | `python` | `_PyObject_Free` | memory | | 1.75% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.17% | `python` | `visit_decref` | gc | | 1.15% | `python` | `PySlice_AdjustIndices` | containers | | 1.11% | `python` | `subtype_traverse` | gc | | 1.08% | `python` | `visit_reachable` | gc | | 1.01% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.00% | `python` | `initialize_locals` | interpreter | ## pyflate | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 45.53% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 4.36% | `python` | `list_dealloc` | memory | | 4.13% | `python` | `list_ass_slice` | containers | | 2.86% | `python` | `_PyObject_Free` | memory | | 2.82% | `libc-2.31.so` | `pthread_attr_setschedparam` | libc | | 2.66% | `python` | `list_slice.isra.0` | containers | | 2.03% | `python` | `_PyObject_Malloc` | memory | | 1.99% | `python` | `list_concat` | containers | | 1.62% | `python` | `_PyLong_Subtract` | numbers | | 1.54% | `python` | `_PyLong_Add` | numbers | | 1.44% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.33% | `python` | `PySlice_AdjustIndices` | containers | | 1.21% | `python` | `bytes_subscript` | unknown | | 1.15% | `python` | `PyNumber_AsSsize_t` | numbers | | 1.11% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.05% | `python` | `PyLong_AsSsize_t` | numbers | ## python_startup | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 8.77% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 6.77% | `python` | `unicodekeys_lookup_unicode` | lookups | | 6.27% | `python` | `gc_collect_main` | gc | | 3.96% | `python` | `visit_decref` | gc | | 2.77% | `python` | `visit_reachable` | gc | | 2.65% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 2.49% | `python` | `_Py_dict_lookup` | lookups | | 2.33% | `python` | `_PyObject_Malloc` | memory | | 1.47% | `python` | `update_one_slot` | unknown | | 1.45% | `python` | `_PyObject_Free` | memory | | 1.45% | `python` | `_PyStaticCode_Fini` | compiler | | 1.12% | `python` | `dict_traverse` | gc | | 1.02% | `python` | `_PyType_Lookup` | lookups | ## python_startup_no_site | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 7.45% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 6.93% | `python` | `gc_collect_main` | gc | | 5.95% | `python` | `unicodekeys_lookup_unicode` | lookups | | 3.51% | `python` | `visit_decref` | gc | | 3.42% | `python` | `visit_reachable` | gc | | 3.12% | `python` | `_PyStaticCode_Fini` | compiler | | 2.44% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 2.03% | `python` | `_Py_dict_lookup` | lookups | | 1.83% | `python` | `_PyObject_Malloc` | memory | | 1.73% | `python` | `_PyObject_Free` | memory | | 1.41% | `python` | `update_one_slot` | unknown | | 1.37% | `python` | `dict_traverse` | gc | | 1.23% | `python` | `insertdict` | containers | | 1.00% | `python` | `free_keys_object` | unknown | ## raytrace | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 49.07% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.28% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 2.18% | `python` | `_PyObject_Free` | memory | | 1.73% | `python` | `PyFloat_FromDouble` | numbers | | 1.60% | `python` | `tupledealloc` | containers | | 1.59% | `python` | `initialize_locals` | interpreter | | 1.52% | `python` | `subtype_dealloc` | memory | | 1.39% | `python` | `float_dealloc` | memory | | 1.36% | `python` | `_PyObject_Malloc` | memory | | 1.21% | `python` | `_PyEvalFramePushAndInit` | interpreter | | 1.19% | `python` | `PyType_GenericAlloc` | memory | | 1.16% | `python` | `_PyType_Lookup` | lookups | | 1.10% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.03% | `python` | `PyType_IsSubtype` | unknown | | 1.01% | `python` | `_Py_NewReference` | memory | ## regex_compile | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 41.94% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.24% | `python` | `sre_ucs1_match` | regex | | 2.69% | `python` | `_PyObject_Malloc` | memory | | 2.57% | `python` | `_PyObject_Free` | memory | | 1.94% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.28% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.14% | `python` | `tupledealloc` | containers | | 1.14% | `python` | `_PyType_Lookup` | lookups | | 1.08% | `python` | `advance` | compiler | | 1.07% | `libc-2.31.so` | `__nss_database_lookup` | libc | ## regex_dna | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 33.77% | `python` | `sre_ucs1_match` | regex | | 30.78% | `python` | `sre_ucs2_charset.isra.0` | regex | | 6.96% | `python` | `sre_search` | regex | | 6.17% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.75% | `libm-2.31.so` | `__fmod_finite` | libm | | 1.19% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.04% | `_bisect.cpython-312-x86_64-linux-gnu.so` | `_bisect_bisect_right` | _bisect | ## regex_effbot | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 40.91% | `python` | `sre_ucs1_match` | regex | | 16.04% | `python` | `sre_ucs2_charset.isra.0` | regex | | 6.86% | `python` | `sre_search` | regex | | 6.37% | `python` | `_PyObject_Free` | memory | | 4.52% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.12% | `python` | `_PyObject_Malloc` | memory | | 1.86% | `python` | `sre_ucs1_count` | regex | | 1.13% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.09% | `python` | `gc_collect_main` | gc | ## regex_v8 | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 44.44% | `python` | `sre_ucs1_match` | regex | | 7.62% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 5.58% | `python` | `sre_search` | regex | | 5.57% | `python` | `sre_ucs1_count` | regex | | 4.31% | `libc-2.31.so` | `pthread_attr_setschedparam` | libc | | 2.15% | `python` | `pattern_subx` | regex | | 1.86% | `python` | `_PyObject_Free` | memory | | 1.78% | `python` | `_PyObject_Malloc` | memory | | 1.63% | `python` | `_sre_SRE_Pattern_search` | regex | | 1.36% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.32% | `python` | `pattern_new_match.isra.0.part.0` | regex | ## richards | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 51.99% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 6.22% | `python` | `unicodekeys_lookup_unicode` | lookups | | 3.76% | `python` | `_PyType_Lookup` | lookups | | 2.72% | `python` | `PyObject_GenericGetAttr` | lookups | | 2.48% | `python` | `_PyObject_GetInstanceAttribute` | containers | | 2.35% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 2.05% | `python` | `_PyObject_GetMethod` | lookups | | 1.46% | `python` | `PyObject_GetAttr` | lookups | | 1.23% | `python` | `gc_collect_main` | gc | | 1.21% | `python` | `_Py_dict_lookup` | lookups | ## scimark | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 44.25% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.66% | `array.cpython-312-x86_64-linux-gnu.so` | `array_subscr` | array | | 3.60% | `python` | `PyFloat_FromDouble` | numbers | | 3.51% | `python` | `PyType_GetModuleByDef` | unknown | | 2.78% | `python` | `PyNumber_AsSsize_t` | numbers | | 2.72% | `python` | `_PyObject_Free` | memory | | 2.60% | `python` | `vgetargs1_impl` | unknown | | 2.49% | `python` | `PyObject_GetItem` | containers | | 2.13% | `python` | `_PyLong_Add` | numbers | | 1.83% | `python` | `_PyObject_Malloc` | memory | | 1.56% | `python` | `convertitem` | unknown | | 1.56% | `python` | `PyLong_AsSsize_t` | numbers | | 1.40% | `python` | `PyLong_FromLong` | numbers | | 1.34% | `array.cpython-312-x86_64-linux-gnu.so` | `array_ass_subscr` | array | | 1.34% | `python` | `_Py_NewReference` | memory | | 1.17% | `python` | `float_dealloc` | memory | | 1.11% | `python` | `_PyFrame_ClearExceptCode` | exceptions | ## spectral_norm | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 37.76% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 9.53% | `python` | `_PyLong_Add` | numbers | | 5.06% | `python` | `_PyObject_Free` | memory | | 3.51% | `python` | `float_div` | numbers | | 3.49% | `python` | `_PyObject_Malloc (inlined)` | memory | | 2.56% | `python` | `long_div` | numbers | | 1.98% | `python` | `_PyLong_Multiply` | numbers | | 1.91% | `python` | `PyType_IsSubtype` | unknown | | 1.90% | `python` | `enum_next` | unknown | | 1.78% | `python` | `listiter_next` | containers | | 1.75% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.59% | `python` | `PyLong_FromLong` | numbers | | 1.38% | `python` | `_Py_NewReference` | memory | | 1.32% | `python` | `gc_collect_main` | gc | | 1.30% | `python` | `PyNumber_TrueDivide` | numbers | | 1.17% | `python` | `PyNumber_FloorDivide` | numbers | | 1.04% | `python` | `PyLong_AsDouble` | numbers | | 1.02% | `python` | `unicodekeys_lookup_unicode` | lookups | ## sqlalchemy_declarative | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 23.87% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 4.81% | `python` | `unicodekeys_lookup_unicode` | lookups | | 3.18% | `python` | `gc_collect_main` | gc | | 2.76% | `python` | `_Py_dict_lookup` | lookups | | 2.35% | `python` | `_PyObject_Malloc` | memory | | 2.07% | `python` | `_PyType_Lookup` | lookups | | 2.02% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.86% | `python` | `visit_decref` | gc | | 1.84% | `python` | `_PyObject_Free` | memory | | 1.57% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.50% | `python` | `visit_reachable` | gc | | 1.36% | `python` | `tupledealloc` | containers | | 1.32% | `python` | `PyObject_GenericGetAttr` | lookups | ## sqlalchemy_imperative | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 28.24% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 4.85% | `python` | `unicodekeys_lookup_unicode` | lookups | | 2.56% | `python` | `gc_collect_main` | gc | | 2.33% | `python` | `_Py_dict_lookup` | lookups | | 2.31% | `python` | `_PyObject_Malloc` | memory | | 2.26% | `python` | `_PyType_Lookup` | lookups | | 2.15% | `python` | `PyObject_GenericGetAttr` | lookups | | 1.72% | `python` | `_PyObject_Free` | memory | | 1.68% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.34% | `python` | `tupledealloc` | containers | | 1.25% | `python` | `PyObject_GetAttr` | lookups | | 1.16% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.12% | `python` | `visit_decref` | gc | ## sqlglot | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 36.89% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.93% | `python` | `_PyObject_Free` | memory | | 2.78% | `python` | `unicodekeys_lookup_unicode` | lookups | | 2.36% | `python` | `_PyType_Lookup` | lookups | | 2.36% | `python` | `_PyObject_Malloc` | memory | | 2.01% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.63% | `python` | `PyObject_GenericGetAttr` | lookups | | 1.48% | `python` | `PyType_IsSubtype` | unknown | | 1.39% | `python` | `gc_collect_main` | gc | | 1.26% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.25% | `python` | `tupledealloc` | containers | | 1.21% | `python` | `_Py_dict_lookup` | lookups | | 1.21% | `python` | `_PyObject_GenericGetAttrWithDict` | containers | | 1.13% | `python` | `initialize_locals` | interpreter | | 1.05% | `python` | `PyObject_GetAttr` | lookups | ## sqlite_synth | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 11.83% | `libpthread-2.31.so` | `pthread_mutex_unlock` | libpthread | | 11.81% | `libpthread-2.31.so` | `__pthread_mutex_lock` | libpthread | | 8.98% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 4.36% | `libsqlite3.so.0.8.6` | `sqlite3_reset` | libsqlite3 | | 2.83% | `python` | `take_gil` | gil | | 2.29% | `python` | `_PyObject_Malloc` | memory | | 2.23% | `python` | `_PyObject_Free` | memory | | 2.07% | `libm-2.31.so` | `f64xsubf128` | libm | | 1.29% | `libsqlite3.so.0.8.6` | `sqlite3_randomness` | libsqlite3 | | 1.14% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.10% | `libpthread-2.31.so` | `pthread_cond_signal@@GLIBC_2.3.2` | libpthread | | 1.04% | `python` | `_PyThreadState_Swap` | unknown | | 1.02% | `python` | `drop_gil` | gil | ## sympy | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 25.90% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.83% | `python` | `unicodekeys_lookup_unicode` | lookups | | 2.80% | `python` | `_PyObject_Malloc` | memory | | 2.38% | `python` | `_PyObject_Free` | memory | | 2.37% | `python` | `_PyType_Lookup` | lookups | | 1.80% | `python` | `tupledealloc` | containers | | 1.78% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.46% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.38% | `python` | `gc_collect_main` | gc | | 1.36% | `python` | `initialize_locals` | interpreter | | 1.26% | `python` | `_Py_dict_lookup` | lookups | | 1.06% | `python` | `PyObject_GenericGetAttr` | lookups | | 1.03% | `python` | `PyType_IsSubtype` | unknown | ## telco | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 17.31% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 5.05% | `python` | `_PyObject_Malloc` | memory | | 4.26% | `python` | `_PyObject_Free` | memory | | 2.20% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 2.00% | `_decimal.cpython-312-x86_64-linux-gnu.so` | `_mpd_qaddsub` | _decimal | | 1.93% | `_decimal.cpython-312-x86_64-linux-gnu.so` | `_mpd_check_exp` | _decimal | | 1.67% | `python` | `PyContextVar_Get` | unknown | | 1.63% | `_decimal.cpython-312-x86_64-linux-gnu.so` | `_mpd_qmul` | _decimal | | 1.62% | `_decimal.cpython-312-x86_64-linux-gnu.so` | `mpd_setdigits` | _decimal | | 1.55% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.44% | `_decimal.cpython-312-x86_64-linux-gnu.so` | `nm_mpd_qadd` | _decimal | | 1.43% | `_decimal.cpython-312-x86_64-linux-gnu.so` | `_mpd_baseshiftr` | _decimal | | 1.38% | `python` | `tupledealloc` | containers | | 1.34% | `python` | `PyObject_GenericGetAttr` | lookups | | 1.32% | `python` | `convertitem` | unknown | | 1.28% | `python` | `gc_collect_main` | gc | | 1.24% | `_decimal.cpython-312-x86_64-linux-gnu.so` | `mpd_qquantize` | _decimal | | 1.20% | `python` | `_PyArg_UnpackKeywordsWithVararg` | unknown | | 1.14% | `python` | `vgetargskeywords` | unknown | | 1.04% | `_decimal.cpython-312-x86_64-linux-gnu.so` | `nm_mpd_qmul` | _decimal | ## thrift | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 21.65% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.61% | `python` | `unicodekeys_lookup_unicode` | lookups | | 3.32% | `python` | `_PyObject_Malloc` | memory | | 2.94% | `python` | `initialize_locals` | interpreter | | 2.77% | `python` | `_PyObject_Free` | memory | | 1.89% | `python` | `PyObject_GenericGetAttr` | lookups | | 1.83% | `python` | `_PyType_Lookup` | lookups | | 1.71% | `fastbinary.cpython-312-x86_64-linux-gnu.so` | `apache::thrift::py::ProtocolBase::encodeValue` | fastbinary | | 1.62% | `python` | `insert_to_emptydict` | containers | | 1.56% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.46% | `python` | `_Py_dict_lookup` | lookups | | 1.41% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.32% | `python` | `insertdict` | containers | | 1.15% | `python` | `subtype_dealloc` | memory | | 1.13% | `python` | `gc_collect_main` | gc | | 1.12% | `python` | `tupledealloc` | containers | ## tornado_http | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 26.87% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.98% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 2.54% | `python` | `unicodekeys_lookup_unicode` | lookups | | 2.49% | `python` | `_PyObject_Malloc` | memory | | 2.14% | `python` | `gc_collect_main` | gc | | 1.87% | `python` | `_PyObject_Free` | memory | | 1.29% | `python` | `_PyType_Lookup` | lookups | | 1.19% | `python` | `visit_decref` | gc | | 1.06% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.02% | `python` | `_Py_dict_lookup` | lookups | ## unpack_sequence | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 80.90% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 1.21% | `python` | `unicodekeys_lookup_unicode` | lookups | ## unpickle | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 7.65% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `load` | _pickle | | 6.58% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `load_counted_binunicode` | _pickle | | 6.02% | `python` | `siphash13` | unknown | | 5.25% | `python` | `insertdict` | containers | | 5.12% | `python` | `_PyObject_Free` | memory | | 5.10% | `python` | `ascii_decode` | strings | | 4.90% | `python` | `unicodekeys_lookup_unicode` | lookups | | 4.63% | `python` | `unicode_decode_utf8` | strings | | 4.51% | `python` | `_PyObject_Malloc` | memory | | 3.36% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.95% | `python` | `PyUnicode_New.part.0` | strings | | 2.60% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 2.22% | `python` | `_Py_dict_lookup` | lookups | | 1.96% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `do_setitems.isra.0` | _pickle | | 1.84% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `_Unpickler_MemoPut` | _pickle | | 1.81% | `python` | `free_keys_object` | unknown | | 1.68% | `python` | `dict_ass_sub` | containers | | 1.40% | `python` | `_PyObject_Realloc` | containers | | 1.26% | `python` | `find_empty_slot` | unknown | | 1.23% | `python` | `build_indices_unicode` | unknown | | 1.08% | `python` | `PyObject_SetItem` | containers | ## unpickle_list | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 17.37% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `load` | _pickle | | 7.67% | `python` | `list_dealloc` | memory | | 5.75% | `python` | `list_ass_slice` | containers | | 5.36% | `python` | `PyList_New` | containers | | 5.16% | `python` | `PyLong_FromLong` | numbers | | 4.93% | `python` | `_PyObject_Free` | memory | | 4.45% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `Pdata_push` | _pickle | | 3.84% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.62% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `do_append.isra.0` | _pickle | | 3.07% | `python` | `_PyObject_Malloc` | memory | | 2.42% | `python` | `_PyObject_Calloc` | containers | | 2.16% | `python` | `PyMem_Calloc` | unknown | | 1.88% | `python` | `_Py_NewReference` | memory | | 1.65% | `python` | `PyObject_GC_UnTrack` | containers | | 1.48% | `python` | `_PyObject_Realloc` | containers | | 1.47% | `python` | `_PyTrash_begin` | gc | | 1.39% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.34% | `_pickle.cpython-312-x86_64-linux-gnu.so` | `marker.isra.0` | _pickle | | 1.32% | `python` | `gc_collect_main` | gc | | 1.19% | `python` | `_PyTrash_end` | gc | | 1.08% | `python` | `unicodekeys_lookup_unicode` | lookups | ## unpickle_pure_python | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 49.53% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 2.48% | `python` | `_Py_dict_lookup` | lookups | | 2.46% | `python` | `PyObject_IsTrue` | containers | | 2.01% | `python` | `_PyFrame_ClearExceptCode` | exceptions | | 1.68% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.65% | `python` | `_PyObject_Free` | memory | | 1.63% | `python` | `bytes_subscript` | unknown | | 1.52% | `python` | `_PyObject_Malloc` | memory | | 1.35% | `python` | `PyNumber_AsSsize_t` | numbers | | 1.10% | `python` | `insertdict` | containers | | 1.10% | `python` | `unicodekeys_lookup_unicode` | lookups | | 1.09% | `python` | `PyBytes_FromStringAndSize` | strings | | 1.00% | `python` | `initialize_locals` | interpreter | ## xml_etree | percentage | object | symbol | category | | ---: | :--- | :--- | :--- | | 19.90% | `python` | `_PyEval_EvalFrameDefault` | interpreter | | 3.31% | `python` | `_PyObject_Malloc` | memory | | 3.09% | `python` | `gc_collect_main` | gc | | 2.62% | `pyexpat.cpython-312-x86_64-linux-gnu.so` | `normal_contentTok` | pyexpat | | 2.58% | `pyexpat.cpython-312-x86_64-linux-gnu.so` | `normal_updatePosition` | pyexpat | | 2.30% | `python` | `_PyObject_Free` | memory | | 1.89% | `python` | `_PyType_Lookup` | lookups | | 1.87% | `python` | `PyObject_GenericGetAttr` | lookups | | 1.87% | `python` | `visit_reachable` | gc | | 1.77% | `libc-2.31.so` | `__nss_database_lookup` | libc | | 1.67% | `python` | `visit_decref` | gc | | 1.58% | `pyexpat.cpython-312-x86_64-linux-gnu.so` | `accountingDiffTolerated.part.0` | pyexpat | | 1.56% | `python` | `_Py_dict_lookup` | lookups | | 1.43% | `pyexpat.cpython-312-x86_64-linux-gnu.so` | `sip24_update` | pyexpat | | 1.35% | `python` | `_io_TextIOWrapper_write` | unknown | | 1.28% | `pyexpat.cpython-312-x86_64-linux-gnu.so` | `doContent` | pyexpat | | 1.23% | `pyexpat.cpython-312-x86_64-linux-gnu.so` | `normal_nameLength` | pyexpat | | 1.04% | `python` | `initialize_locals` | interpreter | ## Categories - **interpreter:** `_PyEval_EvalFrameDefault`, `_PyEvalFramePushAndInit`, `initialize_locals` - **gc:** `func_traverse`, `PyObject_IS_GC`, `_PyDict_MaybeUntrack`, `type_is_gc`, `list_traverse`, `visit_decref`, `subtype_traverse`, `gc_collect_main`, `set_traverse`, `_PyTrash_begin`, `_PyObject_VisitManagedDict`, `visit_reachable`, `dict_traverse`, `_PyTrash_end` - **lookups:** `unicodekeys_lookup_unicode`, `PyObject_GenericGetAttr`, `_PyType_Lookup`, `_PyObject_GetMethod`, `_Py_type_getattro_impl`, `_Py_dict_lookup`, `PyObject_GetAttr` - **memory:** `_Py_NewReference`, `_PyObject_Free`, `float_dealloc`, `gen_dealloc`, `set_dealloc`, `StopIteration_dealloc`, `_PyObject_Malloc`, `PyType_GenericAlloc`, `slice_dealloc`, `subtype_dealloc`, `list_dealloc`, `async_gen_asend_dealloc`, `_PyObject_Malloc (inlined)`, `PyObject_CallFinalizerFromDealloc`, `dict_dealloc`, `async_gen_wrapped_val_dealloc` - **libc:** `__nss_database_lookup`, `pthread_attr_setschedparam` - **regex:** `sre_ucs2_charset.isra.0`, `sre_ucs1_count`, `_sre_SRE_Pattern_search`, `pattern_new_match.isra.0.part.0`, `sre_ucs1_match`, `sre_search`, `pattern_subx` - **containers:** `tuplehash`, `insert_to_emptydict`, `set_issubset`, `PySlice_Unpack`, `listiter_next`, `_PyTuple_FromArray`, `set_difference`, `_PyObject_Realloc`, `PyObject_RichCompare`, `PyObject_GetItem`, `PyDict_SetDefault`, `list_insert`, `_PyObject_MakeTpCall`, `tupledealloc`, `PyDict_GetItem`, `PySlice_New`, `PyObject_Hash`, `_PyObject_GenericGetAttrWithDict`, `insertdict`, `list_contains`, `tuplerichcompare`, `dict_subscript`, `gen_iternext`, `list_slice.isra.0`, `list_concat`, `PyList_New`, `_PyObject_GC_NewVar`, `list_ass_subscript`, `set_add_entry`, `PyObject_GC_Del`, `list_subscript`, `PyObject_CallOneArg`, `dict_ass_sub`, `resize_compact`, `PyDict_SetItem`, `_PyObject_GetInstanceAttribute`, `PySlice_AdjustIndices`, `tuple_alloc`, `PyDict_Next`, `set_lookkey`, `list_ass_slice`, `setiter_iternext`, `PyObject_GC_UnTrack`, `_PyObject_Calloc`, `PyObject_IsTrue`, `PyObject_SetItem`, `PyObject_RichCompareBool`, `dict_get`, `list_extend` - **exceptions:** `PyErr_CheckSignals`, `PyErr_ExceptionMatches`, `_PyErr_Restore`, `_PyErr_SetObject.part.0`, `_PyFrame_ClearExceptCode` - **async:** `_PyAsyncGenValueWrapperNew`, `async_gen_anext`, `async_gen_asend_iternext` - **compiler:** `_PyStaticCode_Fini`, `advance`, `PyFunction_NewWithQualName` - **unknown:** `_Py_MakeCoro`, `_copy_characters.part.0.constprop.0`, `_PyEval_SliceIndex`, `make_gen`, `_PyBuildSlice_ConsumeRefs`, `PyIter_Next`, `replace`, `vgetargs1_impl`, `_PyThreadState_Swap`, `type_call`, `PyMem_Calloc`, `_PyGen_SetStopIterationValue`, `deque_append`, `enum_next`, `bytes_subscript`, `_PyThreadState_PopFrame`, `convertitem`, `vgetargskeywords`, `_io_TextIOWrapper_write`, `PyType_IsSubtype`, `find_empty_slot`, `dequeiter_next`, `build_indices_unicode`, `PyContextVar_Get`, `PyType_GetModuleByDef`, `_PyGen_FetchStopIterationValue`, `call_trace.part.0`, `siphash13`, `_PyArg_UnpackKeywordsWithVararg`, `update_one_slot`, `free_keys_object` - **numbers:** `PyFloat_FromDouble`, `PyLong_FromLong`, `long_xor`, `l_mod`, `_PyLong_Multiply`, `min_max`, `x_add`, `long_hash`, `PyNumber_AsSsize_t`, `float_div`, `k_mul`, `x_divrem`, `PyLong_AsLongAndOverflow`, `PyLong_AsSsize_t`, `_PyLong_Subtract`, `x_sub`, `PyLong_FromVoidPtr`, `PyLong_FromString`, `float_pow`, `PyLong_FromSsize_t`, `long_bitwise`, `PyNumber_TrueDivide`, `long_richcompare`, `long_rshift`, `_PyLong_Add`, `PyNumber_And`, `PyNumber_FloorDivide`, `long_rshift1`, `long_and`, `long_div`, `PyLong_AsDouble` - **math:** `factorial_partial_product` - **kernel:** `__d_lookup_rcu`, `clear_page_erms`, `copy_user_enhanced_fast_string`, `memset_erms`, `__ext4fs_dirhash` - **strings:** `_PyUnicode_FromASCII`, `_PyUnicodeWriter_PrepareInternal`, `ascii_decode`, `PyUnicode_AsUTF8AndSize`, `_PyUnicode_JoinArray.part.0`, `PyUnicode_New.part.0`, `long_to_decimal_string_internal`, `PyUnicode_New`, `unicode_decode_utf8`, `PyUnicode_Substring`, `PyUnicode_Format`, `unicode_replace`, `_PyUnicode_FromASCII (inlined)`, `_PyUnicodeWriter_WriteStr`, `PyBytes_FromStringAndSize` - **tracer:** `CTracer_trace` - **libz:** `inflateBackEnd`, `inflate`, `inflateCodesUsed` - **libm:** `f64xsubf128`, `__fmod_finite` - **_json:** `scanstring_unicode`, `encoder_listencode_obj`, `scan_once_unicode`, `py_encode_basestring_ascii`, `encoder_encode_key_value` - **libpthread:** `pthread_mutex_unlock`, `pthread_cond_signal@@GLIBC_2.3.2`, `__pthread_mutex_lock` - **_pickle:** `Pdata_push`, `marker.isra.0`, `_Pickler_Write.constprop.3`, `0x0000000000005cc4`, `load`, `Pickler_clear`, `memo_get.isra.0`, `load_counted_binunicode`, `do_setitems.isra.0`, `do_append.isra.0`, `PyMemoTable_Set`, `_Unpickler_MemoPut`, `save`, `memo_put.isra.0`, `_Pickler_Write` - **_bisect:** `_bisect_bisect_right` - **array:** `array_subscr`, `array_ass_subscr` - **libsqlite3:** `sqlite3_reset`, `sqlite3_randomness` - **gil:** `drop_gil`, `take_gil` - **_decimal:** `nm_mpd_qmul`, `_mpd_baseshiftr`, `nm_mpd_qadd`, `_mpd_check_exp`, `mpd_setdigits`, `_mpd_qaddsub`, `mpd_qquantize`, `_mpd_qmul` - **fastbinary:** `apache::thrift::py::ProtocolBase::encodeValue` - **pyexpat:** `sip24_update`, `normal_nameLength`, `accountingDiffTolerated.part.0`, `normal_contentTok`, `normal_updatePosition`, `doContent`
Plot, with the 10 top categories ![perf](https://user-images.githubusercontent.com/38294/230464438-58f4cb6f-19c7-49ac-975d-40135f88a8e6.png)
iritkatriel commented 1 year ago
<!DOCTYPE html>

10.39% | python | _PyErr_SetObject.part.0 | exceptions
-- | -- | -- | --

That's properly crazy. I'll look into it.

brandtbucher commented 1 year ago

That's properly crazy.

Maybe not. That's the "async generators" benchmark.

Async iterators always raise StopAsyncIteration to return. We are able to skip literally raising StopIteration for normal iterators in lots of cases, but I'm pretty sure async generators never got the same treatment. This seems confirmed by the other functions present in the 1-2% range for that benchmark (PyErr_ExceptionMatches, _PyErr_Restore, _PyGen_SetStopIterationValue, _PyGen_FetchStopIterationValue, and StopIteration_dealloc).

markshannon commented 1 year ago
<!DOCTYPE html>

10.39% | python | _PyErr_SetObject.part.0 | exceptions
-- | -- | -- | --

That's properly crazy. I'll look into it.

https://github.com/faster-cpython/ideas/issues/570

iritkatriel commented 1 year ago

Why do we need to normalise and chain the StopIteration? I think we could do:

diff --git a/Objects/genobject.c b/Objects/genobject.c
index 6316fa9865..e999718021 100644
--- a/Objects/genobject.c
+++ b/Objects/genobject.c
@@ -627,8 +627,9 @@ _PyGen_SetStopIterationValue(PyObject *value)
     if (e == NULL) {
         return -1;
     }
-    PyErr_SetObject(PyExc_StopIteration, e);
-    Py_DECREF(e);
+    PyErr_SetRaisedException(e);
     return 0;
 }

I ran the benchmarks on this but there was some problem with the baseline: https://github.com/faster-cpython/benchmarking/actions/runs/4632788258

markshannon commented 1 year ago

Despite the "except" in the name, _PyFrame_ClearExceptCode belongs in the "interpreter" category. It clears evaluation frames.

markshannon commented 1 year ago

There are a lot of functions in the "other" category, that don't belong there. I think we're going to have to manually classify the top 100 or so functions.

The tricky part is functions that depend on context. E.g. dict operations are "lookup" if called from a lookup function, but "library" if called as part of an explicit dictionary operation. We could just classify them as "ambiguous" for now.

Here's a revised list of classifications:

mdboom commented 1 year ago

I ran the benchmarks on this but there was some problem with the baseline: https://github.com/faster-cpython/benchmarking/actions/runs/4632788258

Yeah, it's some weird corner case where git says the base commit is the same commit. Not sure why it's happening: https://github.com/faster-cpython/benchmarking/issues/127

mdboom commented 1 year ago

I think this is close enough to merge and we can iterate on function classification.

The latest table and plot are now published to the repo using Mark's categories. These new results also display the total percentage for each category.

"Unclassified" functions currently make up 8.59% of the total, but each function within that is pretty low. Eyeballing this, I think categories of "numeric" (int/float/math), "collections" (list/dict/tuple/set), and "strings" (str/bytes) might make sense, but I don't know if that's useful in terms of going after performance opportunities.

@markshannon: Does ambiguous make sense as its own category (or should we just leave it as unclassified)?

Here is the code that classifies functions.

iritkatriel commented 1 year ago

I ran the benchmarks on this but there was some problem with the baseline: https://github.com/faster-cpython/benchmarking/actions/runs/4632788258

Yeah, it's some weird corner case where git says the base commit is the same commit. Not sure why it's happening: faster-cpython/benchmarking#127

I think I already had a branch with the same name in my fork, which has been merged, so I wasn't running on what I thought I was running. Will try again.

brandtbucher commented 1 year ago

@markshannon, @mdboom, here's a quick-and-dirty attempt to assign as many of the "unknown"s as possible to the most impactful individual builtin types. I got them from the list of unknowns from https://github.com/faster-cpython/benchmarking-public/blob/main/profiling/profiling.md.

It's not perfect, of course, but I think it helps make a dent in the "gray". Possible other ways of interpreting these:

# `int` | percentage | object | symbol | | ---: | :--- | :--- | | 0.53% | python | k_mul | | 0.49% | python | x_divrem | | 0.35% | python | _PyLong_Add | | 0.17% | python | PyLong_FromLong | | 0.16% | python | x_add | | 0.15% | python | long_hash | | 0.12% | python | PyLong_AsLongAndOverflow | | 0.10% | python | long_to_decimal_string_internal | | 0.10% | python | x_sub | | 0.10% | python | _PyLong_Subtract | | 0.09% | python | long_bitwise | | 0.08% | python | PyLong_FromString | | 0.07% | python | long_richcompare | | 0.05% | python | PyLong_AsSsize_t | | 0.05% | python | long_rshift1 | | 0.03% | python | l_mod | | 0.03% | python | long_div | | 0.03% | python | long_and | | 0.03% | python | _PyLong_Multiply | | 0.02% | python | long_rshift | | 0.02% | python | PyLong_FromVoidPtr | | 0.02% | python | PyLong_FromSsize_t | | 0.02% | python | long_xor | | 0.01% | python | PyLong_AsDouble | # `tuple` | percentage | object | symbol | | ---: | :--- | :--- | | 0.38% | python | tuplehash | | 0.37% | python | tupledealloc | | 0.03% | python | tuplerichcompare | | 0.02% | python | _PyTuple_FromArray | # `dict` | percentage | object | symbol | | ---: | :--- | :--- | | 0.23% | python | PyDict_Next | | 0.22% | python | insertdict | | 0.09% | python | PyDict_SetDefault | | 0.08% | python | free_keys_object | | 0.06% | python | find_empty_slot | | 0.05% | python | build_indices_unicode | | 0.04% | python | dict_get | | 0.04% | python | insert_to_emptydict | | 0.02% | python | dict_ass_sub | | 0.02% | python | PyDict_GetItem | | 0.02% | python | dict_subscript | | 0.01% | python | PyDict_SetItem | # `list` | percentage | object | symbol | | ---: | :--- | :--- | | 0.20% | python | list_ass_slice | | 0.08% | python | list_subscript | | 0.07% | python | PyList_New | | 0.05% | python | list_slice.isra.0 | | 0.03% | python | list_contains | | 0.03% | python | list_concat | | 0.02% | python | listiter_next | | 0.02% | python | list_ass_subscript | | 0.02% | python | list_extend | | 0.02% | python | list_insert | # `float` | percentage | object | symbol | | ---: | :--- | :--- | | 0.20% | python | PyFloat_FromDouble | | 0.07% | python | float_div | | 0.02% | python | float_pow | # `set` | percentage | object | symbol | | ---: | :--- | :--- | | 0.11% | python | set_issubset | | 0.10% | python | set_lookkey | | 0.08% | python | setiter_iternext | | 0.07% | python | set_add_entry | | 0.05% | python | set_difference | # `str` | percentage | object | symbol | | ---: | :--- | :--- | | 0.29% | python | siphash13 | | 0.11% | python | replace | | 0.09% | python | _PyUnicode_JoinArray.part.0 | | 0.07% | python | ascii_decode | | 0.07% | python | _copy_characters.part.0.constprop.0 | | 0.06% | python | unicode_decode_utf8 | | 0.05% | python | _PyUnicodeWriter_WriteStr | | 0.05% | python | PyUnicode_Substring | | 0.05% | python | PyUnicode_New | | 0.04% | python | _PyUnicode_FromASCII | | 0.04% | python | PyUnicode_New.part.0 | | 0.04% | python | PyUnicode_AsUTF8AndSize | | 0.04% | python | resize_compact | | 0.03% | python | PyUnicode_Format | | 0.03% | python | _PyUnicode_FromASCII (inlined) | | 0.03% | python | unicode_replace | | 0.02% | python | _PyUnicodeWriter_PrepareInternal | # `slice` | percentage | object | symbol | | ---: | :--- | :--- | | 0.17% | python | PySlice_AdjustIndices | | 0.03% | python | _PyEval_SliceIndex | | 0.03% | python | PySlice_Unpack | | 0.02% | python | PySlice_New | | 0.02% | python | _PyBuildSlice_ConsumeRefs |
mdboom commented 1 year ago

Thanks, @brandtbucher. I'll add these to the regular expressions and rerun the graphs.

mdboom commented 1 year ago

Updates to the regular expression and a regenerated plot are available here: https://github.com/faster-cpython/benchmarking/pull/143

Cc @brandtbucher, @markshannon