Skip to content

Latest commit

 

History

History
4485 lines (4198 loc) · 92.2 KB

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

File metadata and controls

4485 lines (4198 loc) · 92.2 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
CALL_INTRINSIC_1 523,000 277,334 -47.0%
LIST_EXTEND 523,000 277,334 -47.0%
FOR_ITER_LIST 1,095,000 1,340,724 22.4%
JUMP_BACKWARD_JIT 1,230,180 1,475,940 20.0%
POP_ITER 1,396,560 1,659,284 18.8%
BUILD_LIST 2,763,880 2,518,214 -8.9%
NOP 4,650,820 4,405,193 -5.3%
CALL_LIST_APPEND 4,123,800 4,328,600 5.0%
CALL_NON_PY_GENERAL 9,436,420 9,892,784 4.8%
LOAD_ATTR 7,523,440 7,277,714 -3.3%
LOAD_ATTR_SLOT 33,753,280 32,770,541 -2.9%
CALL_METHOD_DESCRIPTOR_NOARGS 14,748,980 15,158,580 2.8%
LOAD_DEREF 29,937,740 30,452,028 1.7%
PUSH_NULL 30,182,460 29,691,206 -1.6%
LOAD_ATTR_METHOD_WITH_VALUES 55,499,020 56,365,082 1.6%
POP_JUMP_IF_NOT_NONE 16,631,800 16,836,639 1.2%
STORE_FAST 66,604,860 67,219,358 0.9%
CALL_PY_EXACT_ARGS 34,336,360 34,090,797 -0.7%
POP_TOP 57,857,900 58,109,464 0.4%
RESUME_CHECK 65,590,380 65,346,130 -0.4%
LOAD_CONST_IMMORTAL 71,875,680 72,128,621 0.4%
LOAD_ATTR_METHOD_NO_DICT 17,774,000 17,733,080 -0.2%
ENTER_EXECUTOR 23,714,460 23,674,799 -0.2%
LOAD_FAST 287,756,320 288,009,898 0.1%
TO_BOOL_BOOL 40,418,260 40,384,601 -0.1%
POP_JUMP_IF_FALSE 78,860,120 78,826,500 -0.0%
LOAD_ATTR_INSTANCE_VALUE 35,381,380 35,388,504 0.0%
CALL_TYPE_1 764,700 764,739 0.0%
CONTAINS_OP_DICT 764,700 764,739 0.0%
CONTAINS_OP_SET 764,700 764,739 0.0%
CALL_KW_PY 764,820 764,859 0.0%
COPY 766,560 766,599 0.0%
FOR_ITER_TUPLE 805,560 805,599 0.0%
FOR_ITER_RANGE 806,940 806,960 0.0%
LOAD_CONST_MORTAL 2,448,280 2,448,319 0.0%
LOAD_GLOBAL_BUILTIN 6,507,900 6,507,978 0.0%
CALL_PY_GENERAL 4,116,380 4,116,419 0.0%
POP_JUMP_IF_TRUE 5,240,540 5,240,579 0.0%
BINARY_OP_SUBTRACT_INT 3,564,060 3,564,080 0.0%
CALL_BUILTIN_FAST 7,759,120 7,759,159 0.0%
LOAD_GLOBAL_MODULE 43,524,960 43,525,116 0.0%
LOAD_ATTR_MODULE 24,977,100 24,977,178 0.0%
LOAD_FAST_LOAD_FAST 82,611,380 82,611,458 0.0%
RETURN_VALUE 95,718,500 95,718,578 0.0%
LOAD_SMALL_INT 26,486,020 26,486,040 0.0%
STORE_ATTR_SLOT 56,779,020 56,779,020 0.0%
INTERPRETER_EXIT 23,714,760 23,714,760 0.0%
TO_BOOL_NONE 19,295,420 19,295,420 0.0%
COMPARE_OP_INT 18,164,700 18,164,700 0.0%
POP_JUMP_IF_NONE 17,356,320 17,356,320 0.0%
CALL_BUILTIN_O 12,508,500 12,508,500 0.0%
BINARY_OP_ADD_INT 12,317,100 12,317,100 0.0%
CALL_FUNCTION_EX 12,025,320 12,025,320 0.0%
STORE_DEREF 9,244,440 9,244,440 0.0%
EXIT_INIT_CHECK 7,830,320 7,830,320 0.0%
CALL_ALLOC_AND_ENTER_INIT 7,830,320 7,830,320 0.0%
CALL_METHOD_DESCRIPTOR_O 7,800,160 7,800,160 0.0%
RETURN_GENERATOR 6,710,540 6,710,540 0.0%
BUILD_TUPLE 4,479,540 4,479,540 0.0%
COPY_FREE_VARS 4,471,520 4,471,520 0.0%
BUILD_MAP 4,195,300 4,195,300 0.0%
END_SEND 4,187,100 4,187,100 0.0%
GET_AWAITABLE 4,187,100 4,187,100 0.0%
SEND_GEN 4,179,200 4,179,200 0.0%
JUMP_FORWARD 3,922,260 3,922,260 0.0%
COMPARE_OP_FLOAT 3,545,080 3,545,080 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%
CALL_ISINSTANCE 3,299,560 3,299,560 0.0%
MAKE_CELL 2,799,420 2,799,420 0.0%
CALL_BOUND_METHOD_EXACT_ARGS 2,799,420 2,799,420 0.0%
GET_ITER 2,530,380 2,530,380 0.0%
CALL_METHOD_DESCRIPTOR_FAST 2,523,620 2,523,620 0.0%
SEND 1,671,980 1,671,980 0.0%
JUMP_BACKWARD_NO_INTERRUPT 1,663,660 1,663,660 0.0%
YIELD_VALUE 1,663,660 1,663,660 0.0%
SWAP 1,406,580 1,406,580 0.0%
CALL_KW_NON_PY 1,122,700 1,122,700 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%
LOAD_SUPER_ATTR_METHOD 1,112,180 1,112,180 0.0%
TO_BOOL 562,080 562,080 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%
BINARY_OP_ADD_FLOAT 277,300 277,300 0.0%
COMPARE_OP 276,420 276,420 0.0%
TO_BOOL_LIST 248,460 248,460 0.0%
BINARY_SUBSCR_LIST_INT 245,940 245,940 0.0%
NOT_TAKEN 116,340 116,340 0.0%
CALL_LEN 4,140 4,140 0.0%
CALL 2,400 2,400 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,320 1,320 0.0%
BINARY_OP_EXTEND 360 360 0.0%
BINARY_SUBSCR 320 320 0.0%
BINARY_OP 320 320 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%
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_SUBSCR_DICT 120 120 0.0%
UNPACK_SEQUENCE 80 80 0.0%
IMPORT_NAME 60 60 0.0%
RAISE_VARARGS 60 60 0.0%
RERAISE 60 60 0.0%
BINARY_OP_SUBTRACT_FLOAT 60 60 0.0%
BINARY_SUBSCR_GETITEM 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.

18,753,400 100.0% 18,753,400 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 180 90.0% 180 90.0% 0.0%
Failure 20 10.0% 20 10.0% 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.1% 240 0.1% 0.0%
hit

Specialized instructions that complete.

276,580 99.9% 276,580 99.9% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 40 50.0% 40 50.0% 0.0%
Failure 40 50.0% 40 50.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 2.4% 3,359,520 2.4% 0.0%
hit

Specialized instructions that complete.

137,820,120 97.6% 137,820,120 97.6% 0.0%
miss

Specialized instructions that deopt.

3,424,120 2.4% 3,424,120 2.4% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 67,000 100.0% 67,000 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.

276,280 1.2% 276,280 1.2% 0.0%
hit

Specialized instructions that complete.

22,283,500 98.8% 22,283,500 98.8% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 20 14.3% 20 14.3% 0.0%
Failure 120 85.7% 120 85.7% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
float long 60 50.0% 60 50.0% 0.0%
tuple 40 33.3% 40 33.3% 0.0%
bool 20 16.7% 20 16.7% 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% 2,953,283 100.0% 9.1%
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
deferred

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

7,518,560 2.7% 7,272,894 2.7% -3.3%
miss

Specialized instructions that deopt.

508,940 0.2% 502,097 0.2% -1.3%
hit

Specialized instructions that complete.

265,894,140 97.1% 265,900,883 97.2% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Failure 2,200 15.2% 2,140 15.0% -2.7%
Success 12,260 84.8% 12,160 85.0% -0.8%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
method 920 41.8% 860 40.2% -6.5%
overriding descriptor 940 42.7% 940 43.9% 0.0%
module attr not found 260 11.8% 260 12.1% 0.0%
metaclass attribute 20 0.9% 20 0.9% 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.

50,032,800 100.0% 50,033,034 100.0% 0.0%
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,320 100.0% 1,320 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.

1,112,180 100.0% 1,112,180 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.

1,671,560 28.6% 1,671,560 28.6% 0.0%
hit

Specialized instructions that complete.

4,179,200 71.4% 4,179,200 71.4% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 0 0.0% 0 0.0%
Failure 420 100.0% 420 100.0% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
other 420 100.0% 420 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 5.5% 3,359,340 5.5% 0.0%
hit

Specialized instructions that complete.

54,444,120 88.8% 54,444,120 88.8% 0.0%
miss

Specialized instructions that deopt.

3,487,720 5.7% 3,487,720 5.7% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 66,700 98.7% 66,700 98.7% 0.0%
Failure 860 1.3% 860 1.3% 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.6% 561,300 0.6% 0.0%
hit

Specialized instructions that complete.

97,000,960 99.4% 97,000,960 99.4% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 580 74.4% 580 74.4% 0.0%
Failure 200 25.6% 200 25.6% 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
Not specialized

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

13,399,940 0.8% 13,154,214 0.8% -1.8%
Specialized hits

Specialized instructions, e.g. LOAD_ATTR_MODULE that complete.

635,060,580 39.8% 636,208,217 39.8% 0.2%
Specialized misses

Specialized instructions, e.g. LOAD_ATTR_MODULE that deopt.

7,432,640 0.5% 7,426,911 0.5% -0.1%
Basic

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

940,408,900 58.9% 940,963,485 58.9% 0.1%

Deferred by instruction

Breakdown of deferred (not specialized) instruction counts by family
Name Base Count Base Ratio Head Count Head Ratio Change
LOAD_ATTR 7,518,560 44.9% 7,272,894 44.1% -3.3%
CALL 3,359,520 20.1% 3,359,520 20.4% 0.0%
STORE_ATTR 3,359,340 20.1% 3,359,340 20.4% 0.0%
SEND 1,671,560 10.0% 1,671,560 10.1% 0.0%
TO_BOOL 561,300 3.4% 561,300 3.4% 0.0%
COMPARE_OP 276,280 1.6% 276,280 1.7% 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.0% 740 0.0% -65.1%
RESUME 11,800 0.2% 12,914 0.2% 9.4%
RESUME_CHECK 11,800 0.2% 12,914 0.2% 9.4%
LOAD_ATTR_SLOT 506,820 6.8% 501,357 6.7% -1.1%
STORE_ATTR_SLOT 3,487,720 46.8% 3,487,720 46.9% 0.0%
CALL_METHOD_DESCRIPTOR_NOARGS 3,424,000 46.0% 3,424,000 46.0% 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 23,714,820 23.4% 23,714,820 23.4% 0.0%
Calls to Python functions inlined 77,736,660 76.6% 77,736,660 76.6% 0.0%
Calls via PyEval_EvalFrame (total) 23,714,820 23.4% 23,714,820 23.4% 0.0%
Calls via PyEval_EvalFrame (vector) 19,519,820 19.2% 19,519,820 19.2% 0.0%
Calls via PyEval_EvalFrame (generator) 4,195,000 4.1% 4,195,000 4.1% 0.0%
Calls via PyEval_EvalFrame (legacy) 0 0.0% 0 0.0%
Calls via PyEval_EvalFrame (function vectorcall) 19,519,820 19.2% 19,519,820 19.2% 0.0%
Calls via PyEval_EvalFrame (build class) 0 0.0% 0 0.0%
Calls via PyEval_EvalFrame (slot) 3,299,140 3.3% 3,299,140 3.3% 0.0%
Calls via PyEval_EvalFrame (function ex) 559,860 0.6% 559,860 0.6% 0.0%
Calls via PyEval_EvalFrame (api) 60 0.0% 60 0.0% 0.0%
Calls via PyEval_EvalFrame (method) 11,749,220 11.6% 11,749,220 11.6% 0.0%
Frame objects created 420 0.0% 420 0.0% 0.0%
Frames pushed 100,907,600 99.5% 100,907,600 99.5% 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% 260 0.0% 333.3%
Method cache collisions 659,701 559,841 -15.1%
Method cache misses 660,063 560,325 -15.1%
Method cache dunder misses 169 165 -2.4%
Mortal decrefs 480,897,549 26.9% 478,740,000 26.8% -0.4%
Immortal decrefs 186,896,645 10.5% 186,089,986 10.4% -0.4%
Mortal increfs 450,637,493 28.9% 449,252,649 28.8% -0.3%
Interpreter immortal decrefs 261,391,300 14.6% 262,052,641 14.7% 0.3%
Method cache hits 43,070,777 43,163,612 0.2%
Immortal increfs 162,592,556 10.4% 162,315,157 10.4% -0.2%
Allocations to 4 kbytes 46,694 0.0% 46,758 0.0% 0.1%
Interpreter mortal decrefs 856,261,740 48.0% 857,410,276 48.1% 0.1%
Interpreter immortal increfs 166,445,820 10.7% 166,618,380 10.7% 0.1%
Interpreter mortal increfs 780,980,680 50.0% 781,351,296 50.1% 0.0%
Allocations from freelist 53,191,633 43.8% 53,197,288 43.8% 0.0%
Frees to freelist 53,191,693 53,197,348 0.0%
Allocations 68,331,714 56.2% 68,331,981 56.2% 0.0%
Frees 70,008,393 70,008,290 -0.0%
Method cache dunder hits 3,860,091 3,860,095 0.0%
Allocations to 512 bytes 68,284,960 56.2% 68,284,963 56.2% 0.0%
Inline values 4,195,360 4,195,360 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 13,800 160 404,545,208 24,416,060 35,904,086 13,800 160 404,555,154 24,415,963 35,904,694
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
Traces executed

The number of traces that were executed

27,186,640 26,318,243 -3.2%
Trace stack underflow

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

3,620 60.9% 3,560 59.9% -1.7%
Uops executed

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

1,251,529,200 4,603.5% 1,242,152,288 4,719.7% -0.7%
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.

5,940 5,940 0.0%
Traces created

The number of traces that were successfully created.

600 10.1% 600 10.1% 0.0%
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%
Trace too short

A potential trace is abandoned because it it too short.

5,340 89.9% 5,340 89.9% 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 1.0% 60 1.0% 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.

600 600 0.0%
Optimizer successes

The number of traces that were successfully optimized.

600 100.0% 600 100.0% 0.0%
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
Data size

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

984,480 12.1% 2,075,680 12.8% 110.8%
Code size

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

5,870,280 72.4% 12,371,320 76.3% 110.7%
Freed memory size

The size of the memory freed from the JIT traces

8,110,080 100.0% 16,302,080 100.5% 101.0%
Total memory size

The total size of the memory allocated for the JIT traces

8,110,080 16,220,160 100.0%
Padding size

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

1,255,320 15.5% 1,773,160 10.9% 41.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 20.0% 120 14.0% 0.0%
<= 8,192 180 30.0% 120 14.0% -33.3%
<= 16,384 180 30.0% 300 34.9% 66.7%
<= 32,768 60 10.0% 140 16.3% 133.3%
<= 65,536 60 10.0% 180 20.9% 200.0%

Trace length histogram

trace length histogram
Range Base Count Base Ratio Head Count Head Ratio Change
<= 8 60 10.0% 60 10.0% 0.0%
<= 16 120 20.0% 120 20.0% 0.0%
<= 32 0 0.0% 0 0.0%
<= 64 180 30.0% 180 30.0% 0.0%
<= 128 180 30.0% 180 30.0% 0.0%
<= 256 60 10.0% 60 10.0% 0.0%

Optimized trace length histogram

optimized trace length histogram
Range Base Count Base Ratio Head Count Head Ratio Change
<= 8 60 10.0% 60 10.0% 0.0%
<= 16 120 20.0% 120 20.0% 0.0%
<= 32 180 30.0% 180 30.0% 0.0%
<= 64 180 30.0% 180 30.0% 0.0%
<= 128 0 0.0% 0 0.0%
<= 256 60 10.0% 60 10.0% 0.0%

Trace run length histogram

trace run length histogram

Uop execution stats

uop execution stats
Name Base Count Head Count Change
_DEOPT 120 1,497 1,147.5%
_LOAD_DEREF 847,260 332,972 -60.7%
_POP_TOP 1,150,660 636,372 -44.7%
_CALL_NON_PY_GENERAL 2,867,760 2,411,396 -15.9%
_CHECK_IS_NOT_PY_CALLABLE 2,867,760 2,411,396 -15.9%
_STORE_FAST_4 5,189,040 4,779,440 -7.9%
_CALL_LIST_APPEND 2,594,520 2,389,720 -7.9%
_GUARD_IS_NONE_POP 2,594,520 2,389,720 -7.9%
_ITER_NEXT_LIST 2,594,520 2,389,720 -7.9%
_STORE_FAST_0 2,594,520 2,389,720 -7.9%
_JUMP_TO_TOP 2,624,680 2,419,880 -7.8%
_GUARD_NOT_EXHAUSTED_LIST 3,386,700 3,140,976 -7.3%
_ITER_CHECK_LIST 3,386,700 3,140,976 -7.3%
_LOAD_FAST_4 6,159,820 5,750,220 -6.6%
_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT 15,840,360 14,974,298 -5.5%
_GUARD_KEYS_VERSION 15,840,360 14,974,298 -5.5%
_LOAD_ATTR_METHOD_WITH_VALUES 15,840,360 14,974,298 -5.5%
_EXIT_TRACE 24,592,000 23,722,265 -3.5%
_CHECK_STACK_SPACE_OPERAND 7,583,060 7,828,760 3.2%
_BUILD_LIST 7,583,060 7,828,726 3.2%
_CALL_INTRINSIC_1 7,583,060 7,828,726 3.2%
_LIST_EXTEND 7,583,060 7,828,726 3.2%
_LOAD_ATTR 7,583,060 7,828,726 3.2%
_START_EXECUTOR 27,186,640 26,318,243 -3.2%
_CALL_METHOD_DESCRIPTOR_NOARGS 13,017,800 12,608,200 -3.1%
_CHECK_PERIODIC 36,557,940 35,446,237 -3.0%
_LOAD_ATTR_SLOT 32,956,920 33,939,579 3.0%
_INIT_CALL_PY_EXACT_ARGS_0 10,177,580 10,423,241 2.4%
_PUSH_NULL 23,526,320 24,017,535 2.1%
_CHECK_VALIDITY_AND_SET_IP 21,237,820 20,822,322 -2.0%
_LOAD_CONST_INLINE_BORROW 14,087,340 13,834,477 -1.8%
_CHECK_FUNCTION_EXACT_ARGS 17,961,140 18,206,703 1.4%
_RESUME_CHECK 17,961,140 18,206,684 1.4%
_CHECK_FUNCTION_VERSION 20,555,660 20,801,184 1.2%
_LOAD_FAST_3 18,370,060 18,159,396 -1.1%
_CHECK_VALIDITY 121,427,420 120,127,191 -1.1%
_PUSH_FRAME 23,150,180 23,395,665 1.1%
_SAVE_RETURN_OFFSET 23,150,180 23,395,665 1.1%
_SET_IP 141,983,080 140,723,614 -0.9%
_MAKE_WARM 29,811,320 29,548,596 -0.9%
_LOAD_FAST_0 75,416,320 75,783,104 0.5%
_GUARD_TYPE_VERSION 51,000,660 50,823,635 -0.3%
_LOAD_ATTR_METHOD_NO_DICT 18,036,500 18,077,400 0.2%
_GUARD_IS_FALSE_POP 34,986,060 35,019,758 0.1%
_TO_BOOL_BOOL 37,006,860 37,040,519 0.1%
_CHECK_MANAGED_OBJECT_HAS_VALUES 26,995,180 26,988,056 -0.0%
_LOAD_ATTR_INSTANCE_VALUE 26,995,180 26,988,056 -0.0%
_PUSH_NULL_CONDITIONAL 20,756,160 20,755,848 -0.0%
_CHECK_PEP_523 10,378,080 10,377,924 -0.0%
_LOAD_CONST_IMMORTAL 7,783,560 7,783,443 -0.0%
_RETURN_VALUE 5,189,040 5,188,962 -0.0%
_CHECK_ATTR_MODULE_PUSH_KEYS 5,189,040 5,188,962 -0.0%
_LOAD_ATTR_MODULE_FROM_KEYS 5,189,040 5,188,962 -0.0%
_LOAD_FAST_7 5,189,040 5,188,962 -0.0%
_COPY 2,594,520 2,594,481 -0.0%
_CALL_TYPE_1 2,594,520 2,594,481 -0.0%
_CONTAINS_OP_DICT 2,594,520 2,594,481 -0.0%
_CONTAINS_OP_SET 2,594,520 2,594,481 -0.0%
_CALL_BUILTIN_FAST 2,594,520 2,594,481 -0.0%
_CHECK_FUNCTION_VERSION_KW 2,594,520 2,594,481 -0.0%
_DYNAMIC_EXIT 2,594,520 2,594,481 -0.0%
_GUARD_IS_NOT_NONE_POP 2,594,520 2,594,481 -0.0%
_ITER_NEXT_TUPLE 2,594,520 2,594,481 -0.0%
_LOAD_FAST_5 2,594,520 2,594,481 -0.0%
_PY_FRAME_GENERAL 2,594,520 2,594,481 -0.0%
_PY_FRAME_KW 2,594,520 2,594,481 -0.0%
_STORE_FAST_7 2,594,520 2,594,481 -0.0%
_GUARD_IS_TRUE_POP 7,813,780 7,813,663 -0.0%
_CHECK_FUNCTION 10,681,480 10,681,324 -0.0%
_LOAD_CONST_INLINE 16,143,760 16,143,526 -0.0%
_LOAD_FAST_2 2,867,760 2,867,721 -0.0%
_CHECK_STACK_SPACE 10,378,080 10,377,943 -0.0%
_INIT_CALL_PY_EXACT_ARGS_1 7,783,560 7,783,462 -0.0%
_GUARD_NOT_EXHAUSTED_TUPLE 3,113,460 3,113,421 -0.0%
_ITER_CHECK_TUPLE 3,113,460 3,113,421 -0.0%
_LOAD_FAST_1 8,327,120 8,327,022 -0.0%
_STORE_FAST_2 5,462,280 5,462,221 -0.0%
_BINARY_OP_SUBTRACT_INT 2,594,520 2,594,500 -0.0%
_GUARD_NOS_INT 2,594,520 2,594,500 -0.0%
_LOAD_SMALL_INT_1 2,594,520 2,594,500 -0.0%
_ITER_NEXT_RANGE 10,423,280 10,423,260 -0.0%
_GUARD_NOT_EXHAUSTED_RANGE 10,943,600 10,943,580 -0.0%
_ITER_CHECK_RANGE 10,943,600 10,943,580 -0.0%
_TIER2_RESUME_CHECK 11,189,540 11,189,540 0.0%
_STORE_FAST_3 7,889,080 7,889,080 0.0%
_STORE_FAST 7,828,760 7,828,760 0.0%
_COMPARE_OP_INT 543,560 543,560 0.0%
_GUARD_BOTH_INT 543,560 543,560 0.0%
_LOAD_FAST_6 303,400 303,400 0.0%
_GET_ITER 273,240 273,240 0.0%
_STORE_DEREF 273,240 273,240 0.0%
_SWAP 273,240 273,240 0.0%
_CALL_KW_NON_PY 273,240 273,240 0.0%
_CHECK_IS_NOT_PY_CALLABLE_KW 273,240 273,240 0.0%
_TO_BOOL_LIST 30,220 30,220 0.0%
_BINARY_SUBSCR_LIST_INT 30,160 30,160 0.0%
_CALL_BUILTIN_O 30,160 30,160 0.0%
_CALL_METHOD_DESCRIPTOR_O 30,160 30,160 0.0%
_COMPARE_OP_FLOAT 30,160 30,160 0.0%
_GUARD_BOTH_FLOAT 30,160 30,160 0.0%
_LOAD_SMALL_INT_0 30,160 30,160 0.0%
_STORE_ATTR_SLOT 30,160 30,160 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 2,020 2,020 0.0%
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