Skip to content

Latest commit

 

History

History
4473 lines (4186 loc) · 92.1 KB

bm-20250205-azure-x86_64-brandtbucher-justin_compact_exits-3.14.0a4+-31b1d53-pystats-async_tree_io-vs-base.md

File metadata and controls

4473 lines (4186 loc) · 92.1 KB

Execution counts

Execution counts for Tier 1 instructions.

The "miss ratio" column shows the percentage of times the instruction executed that it deoptimized. When this happens, the base unspecialized instruction is not counted.

Name Base Count Head Count Change
BINARY_SUBSCR_LIST_INT 263,000 447,275 70.1%
TO_BOOL_LIST 265,537 449,810 69.4%
JUMP_BACKWARD_JIT 1,001,437 1,619,931 61.8%
FOR_ITER_RANGE 806,940 1,052,679 30.5%
ENTER_EXECUTOR 33,264,818 25,434,073 -23.5%
LOAD_ATTR_INSTANCE_VALUE 53,113,832 62,277,445 17.3%
FOR_ITER_LIST 1,095,000 1,283,391 17.2%
POP_ITER 1,396,560 1,545,243 10.6%
TO_BOOL_BOOL 102,717,775 111,301,344 8.4%
CALL_INTRINSIC_1 3,046,479 3,293,329 8.1%
LIST_EXTEND 3,046,479 3,293,329 8.1%
POP_JUMP_IF_FALSE 139,844,452 148,796,583 6.4%
CALL_BUILTIN_O 3,062,300 3,246,575 6.0%
LOAD_CONST_IMMORTAL 142,825,035 150,944,411 5.7%
RESUME_CHECK 154,820,014 162,867,548 5.2%
LOAD_ATTR_METHOD_NO_DICT 17,515,140 18,347,963 4.8%
BUILD_LIST 5,287,359 5,534,209 4.7%
CALL_METHOD_DESCRIPTOR_NOARGS 14,473,060 15,032,812 3.9%
CALL_LIST_APPEND 4,123,800 4,280,812 3.8%
NOP 7,174,299 7,421,163 3.4%
LOAD_ATTR 9,771,659 10,018,569 2.5%
LOAD_FAST 527,540,329 539,615,260 2.3%
STORE_FAST 68,689,240 70,020,321 1.9%
CALL_METHOD_DESCRIPTOR_O 10,340,660 10,524,935 1.8%
CALL_NON_PY_GENERAL 19,530,240 19,821,683 1.5%
PUSH_NULL 49,046,078 49,724,083 1.4%
LOAD_SMALL_INT 15,029,780 15,214,064 1.2%
LOAD_ATTR_SLOT 143,219,337 144,390,224 0.8%
LOAD_DEREF 34,984,620 35,267,732 0.8%
LOAD_ATTR_METHOD_WITH_VALUES 82,705,080 83,310,584 0.7%
POP_JUMP_IF_NOT_NONE 23,926,200 24,083,226 0.7%
COMPARE_OP_FLOAT 43,150,520 43,334,795 0.4%
LOAD_ATTR_MODULE 44,905,820 45,090,123 0.4%
CALL_PY_EXACT_ARGS 64,341,780 64,587,559 0.4%
POP_TOP 100,773,440 101,092,146 0.3%
LOAD_GLOBAL_MODULE 96,891,620 97,075,955 0.2%
STORE_ATTR_SLOT 107,199,920 107,384,195 0.2%
FOR_ITER_TUPLE 805,560 805,578 0.0%
CALL_TYPE_1 764,700 764,714 0.0%
CONTAINS_OP_DICT 764,700 764,714 0.0%
CONTAINS_OP_SET 764,700 764,714 0.0%
CALL_KW_PY 764,820 764,834 0.0%
COPY 766,560 766,574 0.0%
BINARY_OP_SUBTRACT_INT 764,700 764,709 0.0%
LOAD_CONST_MORTAL 4,971,720 4,971,738 0.0%
GET_ITER 2,530,380 2,530,386 0.0%
CALL_PY_GENERAL 6,363,900 6,363,914 0.0%
SWAP 1,406,580 1,406,582 0.0%
CALL_BUILTIN_FAST 10,282,560 10,282,574 0.0%
POP_JUMP_IF_TRUE 10,287,420 10,287,434 0.0%
CALL_KW_NON_PY 3,646,140 3,646,144 0.0%
STORE_DEREF 9,244,440 9,244,446 0.0%
LOAD_GLOBAL_BUILTIN 51,143,220 51,143,248 0.0%
LOAD_FAST_LOAD_FAST 114,066,720 114,066,748 0.0%
RETURN_VALUE 189,994,920 189,994,948 0.0%
INTERPRETER_EXIT 75,920,400 75,920,400 0.0%
CALL_ISINSTANCE 42,888,000 42,888,000 0.0%
TO_BOOL_NONE 31,912,620 31,912,620 0.0%
CALL_FUNCTION_EX 19,595,640 19,595,640 0.0%
POP_JUMP_IF_NONE 17,356,320 17,356,320 0.0%
SEND_GEN 16,796,400 16,796,400 0.0%
EXIT_INIT_CHECK 12,877,200 12,877,200 0.0%
CALL_ALLOC_AND_ENTER_INIT 12,877,200 12,877,200 0.0%
END_SEND 11,757,420 11,757,420 0.0%
RETURN_GENERATOR 11,757,420 11,757,420 0.0%
GET_AWAITABLE 11,757,420 11,757,420 0.0%
JUMP_BACKWARD_NO_INTERRUPT 11,757,420 11,757,420 0.0%
YIELD_VALUE 11,757,420 11,757,420 0.0%
COPY_FREE_VARS 9,518,400 9,518,400 0.0%
COMPARE_OP_INT 6,721,560 6,721,560 0.0%
SEND 6,720,100 6,720,100 0.0%
BUILD_MAP 6,718,740 6,718,740 0.0%
BINARY_OP_ADD_INT 6,718,380 6,718,380 0.0%
LOAD_SUPER_ATTR_METHOD 6,159,060 6,159,060 0.0%
BUILD_TUPLE 4,479,540 4,479,540 0.0%
JUMP_FORWARD 3,922,200 3,922,200 0.0%
STORE_ATTR 3,361,100 3,361,100 0.0%
IS_OP 3,359,520 3,359,520 0.0%
DICT_MERGE 3,359,280 3,359,280 0.0%
DELETE_FAST 3,359,220 3,359,220 0.0%
STORE_SUBSCR_DICT 3,359,220 3,359,220 0.0%
LIST_APPEND 3,359,160 3,359,160 0.0%
BINARY_OP_ADD_FLOAT 2,800,740 2,800,740 0.0%
COMPARE_OP 2,800,640 2,800,640 0.0%
MAKE_CELL 2,799,420 2,799,420 0.0%
STORE_ATTR_INSTANCE_VALUE 1,122,660 1,122,660 0.0%
SET_FUNCTION_ATTRIBUTE 1,119,960 1,119,960 0.0%
TO_BOOL 562,120 562,120 0.0%
CALL_BUILTIN_CLASS 561,780 561,780 0.0%
MAKE_FUNCTION 560,100 560,100 0.0%
CALL_BUILTIN_FAST_WITH_KEYWORDS 559,980 559,980 0.0%
LOAD_FAST_AND_CLEAR 559,860 559,860 0.0%
CALL_LEN 4,140 4,140 0.0%
CALL 2,420 2,420 0.0%
TO_BOOL_INT 1,740 1,740 0.0%
CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 1,560 1,560 0.0%
LOAD_GLOBAL 1,340 1,340 0.0%
BINARY_OP_EXTEND 360 360 0.0%
BINARY_SUBSCR 340 340 0.0%
BINARY_OP 340 340 0.0%
BINARY_SUBSCR_TUPLE_INT 300 300 0.0%
FORMAT_SIMPLE 240 240 0.0%
FOR_ITER 240 240 0.0%
LOAD_ATTR_CLASS 240 240 0.0%
UNPACK_SEQUENCE_TWO_TUPLE 240 240 0.0%
STORE_FAST_STORE_FAST 180 180 0.0%
CALL_METHOD_DESCRIPTOR_FAST 180 180 0.0%
LOAD_SUPER_ATTR 160 160 0.0%
CHECK_EXC_MATCH 120 120 0.0%
POP_EXCEPT 120 120 0.0%
PUSH_EXC_INFO 120 120 0.0%
UNARY_INVERT 120 120 0.0%
UNARY_NOT 120 120 0.0%
BUILD_STRING 120 120 0.0%
BINARY_OP_SUBTRACT_FLOAT 120 120 0.0%
BINARY_SUBSCR_DICT 120 120 0.0%
UNPACK_SEQUENCE 80 80 0.0%
NOT_TAKEN 60 60 0.0%
IMPORT_NAME 60 60 0.0%
RAISE_VARARGS 60 60 0.0%
RERAISE 60 60 0.0%
BINARY_SUBSCR_GETITEM 60 60 0.0%
CALL_BOUND_METHOD_EXACT_ARGS 60 60 0.0%
CALL_BOUND_METHOD_GENERAL 60 60 0.0%
LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES 60 60 0.0%
CALL_KW 40 40 0.0%
STORE_SUBSCR 20 20 0.0%
CONTAINS_OP 20 20 0.0%

Pair counts

Pair counts for top 100 opcode pairs

Pairs of specialized operations that deoptimize and are then followed by the corresponding unspecialized instruction are not counted as pairs.

Not included in comparative output.

Predecessor/Successor Pairs

Top 5 predecessors and successors of each Tier 1 opcode.

This does not include the unspecialized instructions that occur after a specialized instruction deoptimizes.

Not included in comparative output.

Specialization stats

Specialization stats by family

BINARY_OP

specialization stats for BINARY_OP family
Kind Base Count Base Ratio Head Count Head Ratio Change
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

120 0.0% 120 0.0% 0.0%
hit

Specialized instructions that complete.

12,878,820 100.0% 12,878,820 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 200 90.9% 200 90.9% 0.0%
Failure 20 9.1% 20 9.1% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
true divide other 20 100.0% 20 100.0% 0.0%

BINARY_SUBSCR

specialization stats for BINARY_SUBSCR family
Kind Base Count Base Ratio Head Count Head Ratio Change
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

240 0.0% 240 0.0% 0.0%
hit

Specialized instructions that complete.

2,800,080 100.0% 2,800,080 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 60 60.0% 60 60.0% 0.0%
Failure 40 40.0% 40 40.0% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
other 40 100.0% 40 100.0% 0.0%

CALL

specialization stats for CALL family
Kind Base Count Base Ratio Head Count Head Ratio Change
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

3,359,520 1.5% 3,359,520 1.5% 0.0%
hit

Specialized instructions that complete.

214,787,040 98.4% 214,787,040 98.4% 0.0%
miss

Specialized instructions that deopt.

3,424,120 1.6% 3,424,120 1.6% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 67,020 100.0% 67,020 100.0% 0.0%
Failure 0 0.0% 0 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
init not python 20 20 / 0 !! 20 20 / 0 !! 0.0%

CALL_KW

specialization stats for CALL_KW family
Success Base Count Base Ratio Head Count Head Ratio Change
Success 40 100.0% 40 100.0% 0.0%
Failure 0 0.0% 0 0.0%

COMPARE_OP

specialization stats for COMPARE_OP family
Kind Base Count Base Ratio Head Count Head Ratio Change
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

2,799,840 5.1% 2,799,840 5.1% 0.0%
hit

Specialized instructions that complete.

52,408,680 94.9% 52,408,680 94.9% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 20 2.5% 20 2.5% 0.0%
Failure 780 97.5% 780 97.5% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
float long 720 92.3% 720 92.3% 0.0%
tuple 40 5.1% 40 5.1% 0.0%
bool 20 2.6% 20 2.6% 0.0%

CONTAINS_OP

specialization stats for CONTAINS_OP family
Kind Base Count Base Ratio Head Count Head Ratio Change
hit

Specialized instructions that complete.

6,718,440 100.0% 6,718,440 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 20 100.0% 20 100.0% 0.0%
Failure 0 0.0% 0 0.0%

FOR_ITER

specialization stats for FOR_ITER family
Kind Base Count Base Ratio Head Count Head Ratio Change
hit

Specialized instructions that complete.

2,707,500 100.0% 3,141,648 100.0% 16.0%
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

180 0.0% 180 0.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 20 33.3% 20 33.3% 0.0%
Failure 40 66.7% 40 66.7% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
dict items 40 100.0% 40 100.0% 0.0%

LOAD_ATTR

specialization stats for LOAD_ATTR family
Kind Base Count Base Ratio Head Count Head Ratio Change
miss

Specialized instructions that deopt.

17,080 0.0% 38,280 0.0% 124.1%
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

9,766,119 1.9% 10,012,969 2.0% 2.5%
hit

Specialized instructions that complete.

500,920,620 98.1% 501,084,095 98.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 3,080 52.7% 3,480 55.2% 13.0%
Failure 2,760 47.3% 2,820 44.8% 2.2%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
method 860 31.2% 920 32.6% 7.0%
overriding descriptor 940 34.1% 940 33.3% 0.0%
module attr not found 880 31.9% 880 31.2% 0.0%
metaclass attribute 20 0.7% 20 0.7% 0.0%

LOAD_GLOBAL

specialization stats for LOAD_GLOBAL family
Kind Base Count Base Ratio Head Count Head Ratio Change
hit

Specialized instructions that complete.

148,034,780 100.0% 148,219,143 100.0% 0.1%
deopt

Specialized instructions that deopt.

60 0.0% 60 0.0% 0.0%
miss

Specialized instructions that deopt.

60 0.0% 60 0.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 1,340 100.0% 1,340 100.0% 0.0%
Failure 0 0.0% 0 0.0%

LOAD_SUPER_ATTR

specialization stats for LOAD_SUPER_ATTR family
Kind Base Count Base Ratio Head Count Head Ratio Change
hit

Specialized instructions that complete.

6,159,060 100.0% 6,159,060 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 160 100.0% 160 100.0% 0.0%
Failure 0 0.0% 0 0.0%

SEND

specialization stats for SEND family
Kind Base Count Base Ratio Head Count Head Ratio Change
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

6,718,440 28.6% 6,718,440 28.6% 0.0%
hit

Specialized instructions that complete.

16,796,400 71.4% 16,796,400 71.4% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 0 0.0% 0 0.0%
Failure 1,660 100.0% 1,660 100.0% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
other 1,660 100.0% 1,660 100.0% 0.0%

STORE_ATTR

specialization stats for STORE_ATTR family
Kind Base Count Base Ratio Head Count Head Ratio Change
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

3,359,340 2.9% 3,359,340 2.9% 0.0%
hit

Specialized instructions that complete.

110,814,420 97.0% 110,814,420 97.0% 0.0%
miss

Specialized instructions that deopt.

44,700 0.0% 44,700 0.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 1,740 66.9% 1,740 66.9% 0.0%
Failure 860 33.1% 860 33.1% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
overriding descriptor 840 97.7% 840 97.7% 0.0%

STORE_SUBSCR

specialization stats for STORE_SUBSCR family
Kind Base Count Base Ratio Head Count Head Ratio Change
hit

Specialized instructions that complete.

3,359,220 100.0% 3,359,220 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 20 100.0% 20 100.0% 0.0%
Failure 0 0.0% 0 0.0%

TO_BOOL

specialization stats for TO_BOOL family
Kind Base Count Base Ratio Head Count Head Ratio Change
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

561,300 0.3% 561,300 0.3% 0.0%
hit

Specialized instructions that complete.

189,581,760 99.7% 189,581,760 99.7% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 620 75.6% 620 75.6% 0.0%
Failure 200 24.4% 200 24.4% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
tuple 140 70.0% 140 70.0% 0.0%
sequence 60 30.0% 60 30.0% 0.0%

UNPACK_SEQUENCE

specialization stats for UNPACK_SEQUENCE family
Kind Base Count Base Ratio Head Count Head Ratio Change
hit

Specialized instructions that complete.

240 75.0% 240 75.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 80 100.0% 80 100.0% 0.0%
Failure 0 0.0% 0 0.0%

Specialization effectiveness

specialization effectiveness

All entries are execution counts. Should add up to the total number of Tier 1 instructions executed.

Instructions Base Count Base Ratio Head Count Head Ratio Change
Specialized hits

Specialized instructions, e.g. LOAD_ATTR_MODULE that complete.

1,318,384,069 45.2% 1,358,665,773 45.7% 3.1%
Basic

Instructions that are not and cannot be specialized, e.g. LOAD_FAST.

1,569,000,593 53.8% 1,586,285,319 53.4% 1.1%
Not specialized

Instructions that could be specialized but aren't, e.g. LOAD_ATTR, BINARY_SLICE.

23,220,619 0.8% 23,467,529 0.8% 1.1%
Specialized misses

Specialized instructions, e.g. LOAD_ATTR_MODULE that deopt.

3,507,338 0.1% 3,529,997 0.1% 0.6%

Deferred by instruction

Breakdown of deferred (not specialized) instruction counts by family
Name Base Count Base Ratio Head Count Head Ratio Change
LOAD_ATTR 9,766,119 36.8% 10,012,969 37.3% 2.5%
SEND 6,718,440 25.3% 6,718,440 25.1% 0.0%
CALL 3,359,520 12.6% 3,359,520 12.5% 0.0%
STORE_ATTR 3,359,340 12.6% 3,359,340 12.5% 0.0%
COMPARE_OP 2,799,840 10.5% 2,799,840 10.4% 0.0%
TO_BOOL 561,300 2.1% 561,300 2.1% 0.0%
BINARY_SUBSCR 240 0.0% 240 0.0% 0.0%
FOR_ITER 180 0.0% 180 0.0% 0.0%
BINARY_OP 120 0.0% 120 0.0% 0.0%
BINARY_SLICE 0 0.0% 0 0.0%

Misses by instruction

Breakdown of misses (specialized deopts) instruction counts by family
Name Base Count Base Ratio Head Count Head Ratio Change
LOAD_ATTR_METHOD_NO_DICT 2,120 0.1% 6,360 0.2% 200.0%
LOAD_ATTR_SLOT 14,960 0.4% 31,920 0.9% 113.4%
RESUME 21,378 0.6% 22,837 0.6% 6.8%
RESUME_CHECK 21,378 0.6% 22,837 0.6% 6.8%
CALL_METHOD_DESCRIPTOR_NOARGS 3,424,000 97.0% 3,424,000 96.4% 0.0%
STORE_ATTR_SLOT 44,700 1.3% 44,700 1.3% 0.0%
CALL_METHOD_DESCRIPTOR_O 120 0.0% 120 0.0% 0.0%
LOAD_GLOBAL_BUILTIN 60 0.0% 60 0.0% 0.0%
CACHE 0 0.0% 0 0.0%
CALL_FUNCTION_EX 0 0.0% 0 0.0%

Call stats

Inlined calls and frame stats

This shows what fraction of calls to Python functions are inlined (i.e. not having a call at the C level) and for those that are not, where the call comes from. The various categories overlap.

Also includes the count of frame objects created.

Base Count Base Ratio Head Count Head Ratio Change
Calls to PyEval_EvalDefault 75,920,460 36.9% 75,920,460 36.9% 0.0%
Calls to Python functions inlined 129,901,200 63.1% 129,901,200 63.1% 0.0%
Calls via PyEval_EvalFrame (total) 75,920,460 36.9% 75,920,460 36.9% 0.0%
Calls via PyEval_EvalFrame (vector) 69,202,020 33.6% 69,202,020 33.6% 0.0%
Calls via PyEval_EvalFrame (generator) 6,718,440 3.3% 6,718,440 3.3% 0.0%
Calls via PyEval_EvalFrame (legacy) 0 0.0% 0 0.0%
Calls via PyEval_EvalFrame (function vectorcall) 69,202,020 33.6% 69,202,020 33.6% 0.0%
Calls via PyEval_EvalFrame (build class) 0 0.0% 0 0.0%
Calls via PyEval_EvalFrame (slot) 42,887,580 20.8% 42,887,580 20.8% 0.0%
Calls via PyEval_EvalFrame (function ex) 559,860 0.3% 559,860 0.3% 0.0%
Calls via PyEval_EvalFrame (api) 60 0.0% 60 0.0% 0.0%
Calls via PyEval_EvalFrame (method) 16,796,100 8.2% 16,796,100 8.2% 0.0%
Frame objects created 420 0.0% 420 0.0% 0.0%
Frames pushed 195,184,020 94.8% 195,184,020 94.8% 0.0%

Object stats

Allocations, frees and dict materializatons

Below, "allocations" means "allocations that are not from a freelist". Total allocations = "Allocations from freelist" + "Allocations".

"Inline values" is the number of values arrays inlined into objects.

The cache hit/miss numbers are for the MRO cache, split into dunder and other names.

Base Count Base Ratio Head Count Head Ratio Change
Allocations over 4 kbytes 60 0.0% 300 0.0% 400.0%
Method cache dunder misses 134 141 5.2%
Interpreter immortal increfs 187,556,032 6.5% 196,293,086 6.9% 4.7%
Immortal increfs 226,764,386 7.9% 218,044,553 7.6% -3.8%
Mortal increfs 830,740,333 28.9% 803,345,868 28.1% -3.3%
Mortal decrefs 890,903,463 27.6% 863,411,519 26.9% -3.1%
Immortal decrefs 325,694,540 10.1% 316,863,329 9.9% -2.7%
Interpreter mortal increfs 1,632,617,969 56.7% 1,641,115,000 57.4% 0.5%
Interpreter mortal decrefs 1,743,078,775 53.9% 1,751,681,593 54.7% 0.5%
Interpreter immortal decrefs 271,530,651 8.4% 272,547,752 8.5% 0.4%
Allocations to 4 kbytes 86,940 0.0% 87,211 0.0% 0.3%
Method cache hits 51,576,958 51,598,239 0.0%
Method cache collisions 559,843 559,790 -0.0%
Allocations from freelist 93,167,212 46.1% 93,175,352 46.1% 0.0%
Frees to freelist 93,167,272 93,175,412 0.0%
Method cache misses 560,322 560,301 -0.0%
Frees 110,801,299 110,801,817 0.0%
Allocations 109,124,720 53.9% 109,125,155 53.9% 0.0%
Allocations to 512 bytes 109,037,720 53.9% 109,037,644 53.9% -0.0%
Method cache dunder hits 43,448,566 43,448,559 -0.0%
Inline values 6,718,800 6,718,800 0.0%
Materialize dict (on request) 0 0.0% 0 0.0%
Materialize dict (new key) 0 0.0% 0 0.0%
Materialize dict (too big) 0 0.0% 0 0.0%
Materialize dict (str subclass) 0 0.0% 0 0.0%

GC stats

GC collections and effectiveness

Collected/visits gives some measure of efficiency.

Generation Base Collections Base Objects collected Base Object visits Base Reachable from roots Base Not reachable from roots Head Collections Head Objects collected Head Object visits Head Reachable from roots Head Not reachable from roots
0 0 0 0 0 0 0 0 0 0 0
1 25,222 160 949,604,761 90,935,436 61,736,487 25,221 160 949,761,576 91,036,321 61,698,959
2 0 0 0 0 0 0 0 0 0 0

Optimization (Tier 2) stats

statistics about the Tier 2 optimizer
Base Count Base Ratio Head Count Head Ratio Change
Trace stack underflow

A potential trace is abandoned because it pops more frames than it pushes.

4,740 57.2% 2,834 44.2% -40.2%
Traces created

The number of traces that were successfully created.

540 6.5% 751 11.7% 39.1%
Traces executed

The number of traces that were executed

39,260,263 27,991,923 -28.7%
Trace too short

A potential trace is abandoned because it it too short.

7,740 93.5% 5,665 88.3% -26.8%
Optimization attempts

The number of times a potential trace is identified. Specifically, this occurs in the JUMP BACKWARD instruction when the counter reaches a threshold.

8,280 6,416 -22.5%
Uops executed

The total number of uops (micro-operations) that were executed

1,811,822,204 4,614.9% 1,693,400,483 6,049.6% -6.5%
Trace stack overflow

A trace is truncated because it would require more than 5 stack frames.

0 0.0% 0 0.0%
Trace too long

A trace is truncated because it is longer than the instruction buffer.

0 0.0% 0 0.0%
Inner loop found

A trace is truncated because it has an inner loop

0 0.0% 0 0.0%
Recursive call

A trace is truncated because it has a recursive call.

60 0.7% 60 0.9% 0.0%
Low confidence

A trace is abandoned because the likelihood of the jump to top being taken is too low.

0 0.0% 0 0.0%
Executors invalidated

The number of executors that were invalidated due to watched dictionary changes.

0 0.0% 0 0.0%
Base Count Base Ratio Head Count Head Ratio Change
Optimizer attempts

The number of times the trace optimizer (_Py_uop_analyze_and_optimize) was run.

540 751 39.1%
Optimizer successes

The number of traces that were successfully optimized.

540 100.0% 751 100.0% 39.1%
Optimizer no memory

The number of optimizations that failed due to no memory.

0 0.0% 0 0.0%
Remove globals builtins changed

The builtins changed during optimization

0 0.0% 0 0.0%
Remove globals incorrect keys

The keys in the globals dictionary aren't what was expected

0 0.0% 0 0.0%

JIT memory stats

JIT memory stats
Base Size (bytes) Base Ratio Head Size (bytes) Head Ratio Change
Code size

The size of the memory allocated for the code of the JIT traces

5,652,960 74.2% 15,827,108 76.8% 180.0%
Data size

The size of the memory allocated for the data of the JIT traces

953,760 12.5% 2,663,616 12.9% 179.3%
Total memory size

The total size of the memory allocated for the JIT traces

7,618,560 20,598,784 170.4%
Freed memory size

The size of the memory freed from the JIT traces

7,618,560 100.0% 20,484,096 99.4% 168.9%
Padding size

The size of the memory allocated for the padding of the JIT traces

1,011,840 13.3% 2,108,060 10.2% 108.3%
Trampoline size

The size of the memory allocated for the trampolines of the JIT traces

0 0.0% 0 0.0%

JIT trace total memory histogram

JIT trace total memory histogram
Size (bytes) Base Count Base Ratio Head Count Head Ratio Change
<= 4,096 120 22.2% 120 11.4% 0.0%
<= 8,192 120 22.2% 120 11.4% 0.0%
<= 16,384 180 33.3% 346 32.9% 92.2%
<= 32,768 60 11.1% 285 27.1% 375.0%
<= 65,536 60 11.1% 180 17.1% 200.0%

Trace length histogram

trace length histogram
Range Base Count Base Ratio Head Count Head Ratio Change
<= 8 60 11.1% 60 8.0% 0.0%
<= 16 60 11.1% 60 8.0% 0.0%
<= 32 0 0.0% 60 8.0% 60 / 0 !!
<= 64 180 33.3% 180 24.0% 0.0%
<= 128 180 33.3% 331 44.1% 83.9%
<= 256 60 11.1% 60 8.0% 0.0%

Optimized trace length histogram

optimized trace length histogram
Range Base Count Base Ratio Head Count Head Ratio Change
<= 8 60 11.1% 60 8.0% 0.0%
<= 16 60 11.1% 120 16.0% 100.0%
<= 32 180 33.3% 180 24.0% 0.0%
<= 64 180 33.3% 271 36.1% 50.6%
<= 128 0 0.0% 60 8.0% 60 / 0 !!
<= 256 60 11.1% 60 8.0% 0.0%

Trace run length histogram

trace run length histogram

Uop execution stats

uop execution stats
Name Base Count Head Count Change
_DEOPT 214 2,098 880.4%
_TIER2_RESUME_CHECK 16,236,420 8,436,480 -48.0%
_LOAD_CONST_INLINE_BORROW 21,640,545 13,521,197 -37.5%
_LOAD_DEREF 847,260 564,148 -33.4%
_EXIT_TRACE 36,665,529 25,395,319 -30.7%
_START_EXECUTOR 39,260,263 27,991,923 -28.7%
_CHECK_MANAGED_OBJECT_HAS_VALUES 52,161,388 42,997,775 -17.6%
_LOAD_ATTR_INSTANCE_VALUE 52,161,388 42,997,775 -17.6%
_GUARD_IS_FALSE_POP 52,089,525 43,321,695 -16.8%
_TO_BOOL_BOOL 52,147,445 43,563,876 -16.5%
_GUARD_TYPE_VERSION 88,783,888 100,757,077 13.5%
_POP_TOP 3,657,040 3,189,651 -12.8%
_CALL_NON_PY_GENERAL 2,867,760 2,576,317 -10.2%
_CHECK_IS_NOT_PY_CALLABLE 2,867,760 2,576,317 -10.2%
_LOAD_FAST_0 115,723,051 105,482,190 -8.8%
_CALL_BUILTIN_O 2,536,540 2,352,265 -7.3%
_CALL_METHOD_DESCRIPTOR_O 2,536,540 2,352,265 -7.3%
_STORE_ATTR_SLOT 2,536,540 2,352,265 -7.3%
_BINARY_SUBSCR_LIST_INT 2,536,600 2,352,325 -7.3%
_COMPARE_OP_FLOAT 2,536,600 2,352,325 -7.3%
_GUARD_BOTH_FLOAT 2,536,600 2,352,325 -7.3%
_LOAD_SMALL_INT_0 2,536,600 2,352,325 -7.3%
_TO_BOOL_LIST 2,536,643 2,352,370 -7.3%
_CHECK_VALIDITY 181,310,013 168,921,727 -6.8%
_JUMP_TO_TOP 5,131,060 4,789,773 -6.7%
_LOAD_FAST_6 2,809,840 2,625,559 -6.6%
_SET_IP 206,912,553 194,121,478 -6.2%
_LOAD_FAST_4 5,189,040 4,875,016 -6.1%
_STORE_FAST_4 5,189,040 4,875,016 -6.1%
_CALL_LIST_APPEND 2,594,520 2,437,508 -6.1%
_GUARD_IS_NONE_POP 2,594,520 2,437,508 -6.1%
_ITER_NEXT_LIST 2,594,520 2,437,508 -6.1%
_STORE_FAST_0 2,594,520 2,437,508 -6.1%
_GUARD_NOT_EXHAUSTED_LIST 3,386,700 3,198,309 -5.6%
_ITER_CHECK_LIST 3,386,700 3,198,309 -5.6%
_CHECK_VALIDITY_AND_SET_IP 38,850,741 37,356,879 -3.8%
_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT 15,840,360 15,234,856 -3.8%
_GUARD_KEYS_VERSION 15,840,360 15,234,856 -3.8%
_LOAD_ATTR_METHOD_WITH_VALUES 15,840,360 15,234,856 -3.8%
_LOAD_FAST_3 35,983,020 34,647,296 -3.7%
_CHECK_PERIODIC 53,627,323 51,789,217 -3.4%
_STORE_FAST_3 17,948,780 17,334,502 -3.4%
_CALL_METHOD_DESCRIPTOR_NOARGS 18,064,680 17,504,928 -3.1%
_MAKE_WARM 44,391,323 43,101,369 -2.9%
_LOAD_ATTR_METHOD_NO_DICT 30,636,640 29,803,897 -2.7%
_LOAD_ATTR_SLOT 55,650,763 54,480,196 -2.1%
_BUILD_LIST 12,629,901 12,383,051 -2.0%
_CALL_INTRINSIC_1 12,629,901 12,383,051 -2.0%
_LIST_EXTEND 12,629,901 12,383,051 -2.0%
_LOAD_ATTR 12,629,901 12,383,051 -2.0%
_CHECK_STACK_SPACE_OPERAND 12,629,940 12,384,212 -1.9%
_STORE_FAST 12,875,640 12,629,912 -1.9%
_PUSH_NULL 36,126,382 35,448,359 -1.9%
_GUARD_IS_TRUE_POP 10,320,203 10,135,888 -1.8%
_INIT_CALL_PY_EXACT_ARGS_0 15,224,460 14,978,718 -1.6%
_ITER_NEXT_RANGE 15,470,160 15,224,423 -1.6%
_GUARD_NOT_EXHAUSTED_RANGE 15,990,480 15,744,741 -1.5%
_ITER_CHECK_RANGE 15,990,480 15,744,741 -1.5%
_CHECK_FUNCTION 13,187,860 13,003,525 -1.4%
_RESUME_CHECK 23,008,020 22,762,236 -1.1%
_CHECK_FUNCTION_EXACT_ARGS 23,008,020 22,762,241 -1.1%
_LOAD_CONST_INLINE 18,650,140 18,465,773 -1.0%
_CHECK_FUNCTION_VERSION 25,602,540 25,356,747 -1.0%
_PUSH_FRAME 28,197,060 27,951,253 -0.9%
_SAVE_RETURN_OFFSET 28,197,060 27,951,253 -0.9%
_GET_ITER 273,240 273,234 -0.0%
_STORE_DEREF 273,240 273,234 -0.0%
_CALL_KW_NON_PY 273,240 273,236 -0.0%
_CHECK_IS_NOT_PY_CALLABLE_KW 273,240 273,236 -0.0%
_SWAP 273,240 273,238 -0.0%
_LOAD_FAST_2 2,867,760 2,867,742 -0.0%
_GUARD_NOT_EXHAUSTED_TUPLE 3,113,460 3,113,442 -0.0%
_ITER_CHECK_TUPLE 3,113,460 3,113,442 -0.0%
_PUSH_NULL_CONDITIONAL 20,756,160 20,756,048 -0.0%
_CHECK_PEP_523 10,378,080 10,378,024 -0.0%
_LOAD_CONST_IMMORTAL 7,783,560 7,783,518 -0.0%
_RETURN_VALUE 5,189,040 5,189,012 -0.0%
_CHECK_ATTR_MODULE_PUSH_KEYS 5,189,040 5,189,012 -0.0%
_LOAD_ATTR_MODULE_FROM_KEYS 5,189,040 5,189,012 -0.0%
_LOAD_FAST_7 5,189,040 5,189,012 -0.0%
_COPY 2,594,520 2,594,506 -0.0%
_CALL_TYPE_1 2,594,520 2,594,506 -0.0%
_CONTAINS_OP_DICT 2,594,520 2,594,506 -0.0%
_CONTAINS_OP_SET 2,594,520 2,594,506 -0.0%
_CALL_BUILTIN_FAST 2,594,520 2,594,506 -0.0%
_CHECK_FUNCTION_VERSION_KW 2,594,520 2,594,506 -0.0%
_DYNAMIC_EXIT 2,594,520 2,594,506 -0.0%
_GUARD_IS_NOT_NONE_POP 2,594,520 2,594,506 -0.0%
_ITER_NEXT_TUPLE 2,594,520 2,594,506 -0.0%
_LOAD_FAST_5 2,594,520 2,594,506 -0.0%
_PY_FRAME_GENERAL 2,594,520 2,594,506 -0.0%
_PY_FRAME_KW 2,594,520 2,594,506 -0.0%
_STORE_FAST_7 2,594,520 2,594,506 -0.0%
_CHECK_STACK_SPACE 10,378,080 10,378,029 -0.0%
_INIT_CALL_PY_EXACT_ARGS_1 7,783,560 7,783,523 -0.0%
_LOAD_FAST_1 7,783,560 7,783,523 -0.0%
_STORE_FAST_2 5,462,280 5,462,255 -0.0%
_BINARY_OP_SUBTRACT_INT 2,594,520 2,594,511 -0.0%
_GUARD_NOS_INT 2,594,520 2,594,511 -0.0%
_LOAD_SMALL_INT_1 2,594,520 2,594,511 -0.0%

Pair counts

Pair counts for top 100 Non-JIT uop pairs

Pairs of specialized operations that deoptimize and are then followed by the corresponding unspecialized instruction are not counted as pairs.

Not included in comparative output.

Unsupported opcodes

unsupported opcodes
Opcode Base Count Head Count Change
CALL_FUNCTION_EX 3,240 3,191 -1.5%
CALL 60 60 0.0%

Optimizer errored out with opcode

Optimization stopped after encountering this opcode

Rare events

Counts of rare/unlikely events
Event Base Count Head Count Change
set class

Setting an object's class, obj.__class__ = ...

0 0
set bases

Setting the bases of a class, cls.__bases__ = ...

0 0
set eval frame func

Setting the PEP 523 frame eval function _PyInterpreterState_SetFrameEvalFunc()

0 0
builtin dict

Modifying the builtins, __builtins__.__dict__[var] = ...

0 0
func modification

Modifying a function, e.g. func.__defaults__ = ..., etc.

0 0
watched dict modification

A watched dict has been modified

0 0
watched globals modification

A watched globals() dict has been modified

0 0

Meta stats

Meta statistics
Base Count Head Count Change
Number of data files 20 20 0.0%

Stats gathered on: 2025-02-06