Skip to content

Commit c082f32

Browse files
committed
microbench: profile_pypy
1 parent 4c792ef commit c082f32

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

microbench/profile_pypy/README.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
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+
```
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
2+
import hpy_simple as simple
3+
4+
import gc
5+
6+
Foo = simple.Foo
7+
N = 10000000
8+
9+
def main():
10+
objs = [None] * N
11+
for i in range(N):
12+
objs[i] = Foo()
13+
return objs
14+
15+
gc.collect()
16+
17+
main()

0 commit comments

Comments
 (0)