|
| 1 | +# Profile allocation and PyPy |
| 2 | + |
| 3 | +```sh |
| 4 | +pip install vmprof |
| 5 | +sudo apt install libunwind-dev |
| 6 | +python -m vmprof -o tmp_output.log profile_alloc.py |
| 7 | +vmprofshow tmp_output.log tree |
| 8 | +``` |
| 9 | + |
| 10 | +Example of (truncated) output (/path/to/pypy was /home/me/.local/share/uv/python/pypy-3.11.11-linux-x86_64-gnu): |
| 11 | + |
| 12 | +```text |
| 13 | + 97.4% |. main 97.4% profile_alloc.py:9 |
| 14 | + 1.2% |.|. pypy_g_execute_frame 1.2% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 15 | + 1.2% |.|.|. pypy_g_ll_portal_runner__Unsigned_Bool_pypy_interpreter 100.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 16 | + 1.0% |.|.|.|. pypy_g_portal_12 86.7% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 17 | + 1.0% |.|.|.|.|. pypy_g_handle_bytecode__AccessDirect_None 100.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 18 | + 1.0% |.|.|.|.|.|. pypy_g_dispatch_bytecode__AccessDirect_None 100.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 19 | + 1.0% |.|.|.|.|.|.|. pypy_g_opcode_impl_for_mul__AccessDirect_star_2 100.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 20 | + 1.0% |.|.|.|.|.|.|.|. pypy_g_binop_mul_impl 100.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 21 | + 1.0% |.|.|.|.|.|.|.|.|. pypy_g__call_binop_impl____mul_____rmul__ 100.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 22 | + 1.0% |.|.|.|.|.|.|.|.|.|. pypy_g_get_and_call_function__star_1 100.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 23 | + 1.0% |.|.|.|.|.|.|.|.|.|.|. pypy_g_funccall__star_2 100.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 24 | + 1.0% |.|.|.|.|.|.|.|.|.|.|.|. pypy_g_BuiltinCode2_fastcall_2.part.0 100.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 25 | + 1.0% |.|.|.|.|.|.|.|.|.|.|.|.|. pypy_g_fastfunc_descr_mul_2_6 100.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 26 | + 1.0% |.|.|.|.|.|.|.|.|.|.|.|.|.|. pypy_g_ObjectListStrategy_mul 100.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 27 | +[...] |
| 28 | + 87.4% |.|. pypy_g__finish_create_instance 89.7% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 29 | + 49.1% |.|.|. pypy_g_IncrementalMiniMarkGC_malloc_fixed_or_varsize_no 56.2% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 30 | + 47.7% |.|.|.|. pypy_g_IncrementalMiniMarkGC_external_malloc 97.2% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 31 | + 2.1% |.|.|.|.|. malloc 4.4% /usr/lib/x86_64-linux-gnu/libc.so.6:0 |
| 32 | + 35.9% |.|.|.|.|. pypy_g_IncrementalMiniMarkGC_minor_collection_with_majo.part.0 75.3% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 33 | + 35.2% |.|.|.|.|.|. pypy_g_IncrementalMiniMarkGC_major_collection_step 97.9% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 34 | + 14.6% |.|.|.|.|.|.|. pypy_g_IncrementalMiniMarkGC_visit_all_objects_step 41.7% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 35 | + 2.2% |.|.|.|.|.|.|.|. pypy_g_trace__gc_callback__collect_ref_rec 15.3% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 36 | +[...] |
| 37 | + 4.2% |.|.|.|.|. pypy_g_ll_dict_setitem__DICTPtr_Address_Address 8.7% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 38 | +[...] |
| 39 | + 34.5% |.|.|. pypy_g_W_TupleObjectUserDictWeakrefable__hpy_set_raw_st 39.5% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 40 | + 28.2% |.|.|.|. pypy_g_AbstractAttribute_write 81.9% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 41 | + 26.7% |.|.|.|.|. pypy_g_Terminator__write_terminator 94.5% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 42 | + 24.4% |.|.|.|.|.|. pypy_g__reorder_and_add__v512___simple_call__function__ 91.6% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 43 | + 8.1% |.|.|.|.|.|.|. pypy_g_W_HPyObjectUserDictWeakrefable__set_mapdict_incr 33.1% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 44 | + 8.0% |.|.|.|.|.|.|.|. pypy_g_IncrementalMiniMarkGC_collect_and_reserve 99.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 45 | + 8.0% |.|.|.|.|.|.|.|.|. pypy_g_IncrementalMiniMarkGC__minor_collection 100.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 46 | + 4.8% |.|.|.|.|.|.|.|.|.|. pypy_g_IncrementalMiniMarkGC_collect_oldrefs_to_nursery 59.6% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 47 | + 3.5% |.|.|.|.|.|.|.|.|.|.|. pypy_g_trace__gc_callback__trace_drag_out 72.6% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 48 | +[...] |
| 49 | + 2.5% |.|.|.|.|.|.|.|.|.|. pypy_g_IncrementalMiniMarkGC_collect_cardrefs_to_nurser 31.7% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 50 | + 1.7% |.|.|.|.|.|.|.|.|.|.|. pypy_g_trace_partial__gc_callback__trace_drag_out 66.7% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 51 | +[...] |
| 52 | + 14.2% |.|.|.|.|.|.|. pypy_g_AbstractAttribute__find_branch_to_move_into 58.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 53 | + 11.3% |.|.|.|.|.|.|.|. pypy_g_IncrementalMiniMarkGC_collect_and_reserve 79.9% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 54 | + 11.3% |.|.|.|.|.|.|.|.|. pypy_g_IncrementalMiniMarkGC__minor_collection 100.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 55 | + 8.2% |.|.|.|.|.|.|.|.|.|. pypy_g_IncrementalMiniMarkGC_collect_oldrefs_to_nursery 72.1% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 56 | + 6.3% |.|.|.|.|.|.|.|.|.|.|. pypy_g_trace__gc_callback__trace_drag_out 77.4% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 57 | + 1.2% |.|.|.|.|.|.|.|.|.|.|.|. pypy_g_ArenaCollection_malloc 18.3% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 58 | +[...] |
| 59 | + 1.6% |.|.|.|.|.|.|.|.|.|. pypy_g_IncrementalMiniMarkGC_collect_cardrefs_to_nurser 14.3% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 60 | + 1.1% |.|.|.|.|.|.|.|.|.|.|. pypy_g_trace_partial__gc_callback__trace_drag_out 66.7% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 61 | +[...] |
| 62 | + 2.2% |.|.|.|.|.|.|.|. pypy_g_ll_dict_get__dicttablePtr_tuple2Ptr_GCREFPtr 15.2% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 63 | +[...] |
| 64 | + 4.4% |.|.|.|. pypy_g_IncrementalMiniMarkGC_collect_and_reserve 12.8% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 65 | + 4.4% |.|.|.|.|. pypy_g_IncrementalMiniMarkGC__minor_collection 100.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 66 | + 3.4% |.|.|.|.|.|. pypy_g_IncrementalMiniMarkGC_collect_oldrefs_to_nursery 77.2% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 67 | + 2.5% |.|.|.|.|.|.|. pypy_g_trace__gc_callback__trace_drag_out 75.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 68 | +[...] |
| 69 | + 2.2% |.|.|. pypy_g_W_TupleObjectUserDictWeakrefable__hpy_get_raw_st 2.6% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 70 | + 1.5% |.|.|.|. pypy_g_AbstractAttribute_read 69.0% /path/to/pypy/bin/libpypy3.11-c.so.debug:0 |
| 71 | +``` |
0 commit comments