Skip to content

Latest commit

 

History

History
4331 lines (4048 loc) · 88.5 KB

bm-20250206-azure-x86_64-brandtbucher-justin_compact_exits-3.14.0a4+-aa6e11c-pystats-async_tree-vs-base.md

File metadata and controls

4331 lines (4048 loc) · 88.5 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
JUMP_BACKWARD_JIT 738,480 1,280 -99.8%
POP_ITER 1,396,020 3,840 -99.7%
FOR_ITER_LIST 1,094,640 562,320 -48.6%
CALL_KW_NON_PY 846,780 560,160 -33.8%
FOR_ITER_TUPLE 805,560 559,860 -30.5%
FOR_ITER_RANGE 806,760 561,160 -30.4%
CALL_TYPE_1 764,700 559,920 -26.8%
CONTAINS_OP_DICT 764,700 559,920 -26.8%
CONTAINS_OP_SET 764,700 559,920 -26.8%
CALL_KW_PY 764,820 560,040 -26.8%
BINARY_OP_SUBTRACT_INT 764,700 560,020 -26.8%
CALL_PY_GENERAL 765,180 560,400 -26.8%
COPY 766,380 561,600 -26.7%
LOAD_CONST_MORTAL 2,172,360 1,680,960 -22.6%
SWAP 1,406,580 1,119,960 -20.4%
LOAD_GLOBAL_BUILTIN 2,656,200 2,246,640 -15.4%
GET_ITER 2,529,840 2,243,220 -11.3%
CALL_NON_PY_GENERAL 8,332,560 7,841,160 -5.9%
CALL_LIST_APPEND 4,123,800 3,919,020 -5.0%
NOP 4,128,660 3,923,880 -5.0%
LOAD_GLOBAL_MODULE 22,947,660 21,841,920 -4.8%
LOAD_DEREF 29,385,900 27,993,720 -4.7%
POP_JUMP_IF_TRUE 4,688,160 4,483,380 -4.4%
STORE_FAST 40,167,240 38,652,040 -3.8%
TO_BOOL_BOOL 31,344,460 30,238,560 -3.5%
CALL_METHOD_DESCRIPTOR_NOARGS 11,673,520 11,263,960 -3.5%
PUSH_NULL 20,297,580 19,601,400 -3.4%
LOAD_ATTR_METHOD_WITH_VALUES 46,312,620 44,797,420 -3.3%
POP_JUMP_IF_NOT_NONE 12,728,580 12,319,020 -3.2%
STORE_DEREF 9,244,440 8,957,820 -3.1%
CALL_PY_EXACT_ARGS 27,703,440 26,884,420 -3.0%
CALL_BUILTIN_FAST 7,483,200 7,278,420 -2.7%
POP_JUMP_IF_FALSE 56,747,320 55,436,640 -2.3%
LOAD_ATTR_MODULE 19,448,520 19,038,960 -2.1%
LOAD_FAST 207,983,260 203,846,960 -2.0%
LOAD_ATTR_METHOD_NO_DICT 11,407,320 11,202,540 -1.8%
RESUME_CHECK 47,300,440 46,481,160 -1.7%
LOAD_SMALL_INT 11,966,820 11,762,140 -1.7%
ENTER_EXECUTOR 22,067,320 22,394,880 1.5%
LOAD_CONST_IMMORTAL 66,978,580 66,077,460 -1.3%
LOAD_ATTR_INSTANCE_VALUE 29,419,300 29,132,520 -1.0%
LOAD_ATTR_SLOT 22,604,940 22,400,160 -0.9%
LOAD_FAST_LOAD_FAST 66,477,420 66,067,860 -0.6%
POP_TOP 52,921,140 52,634,520 -0.5%
RETURN_VALUE 77,122,560 76,713,000 -0.5%
STORE_ATTR_SLOT 50,949,060 50,949,060 0.0%
INTERPRETER_EXIT 19,036,020 19,036,020 0.0%
TO_BOOL_NONE 17,915,820 17,915,820 0.0%
POP_JUMP_IF_NONE 17,356,320 17,356,320 0.0%
CALL_FUNCTION_EX 11,197,560 11,197,560 0.0%
CALL_METHOD_DESCRIPTOR_O 7,278,480 7,278,480 0.0%
EXIT_INIT_CHECK 7,278,480 7,278,480 0.0%
CALL_ALLOC_AND_ENTER_INIT 7,278,480 7,278,480 0.0%
COMPARE_OP_INT 6,721,200 6,721,200 0.0%
BINARY_OP_ADD_INT 6,718,380 6,718,380 0.0%
RETURN_GENERATOR 6,158,700 6,158,700 0.0%
BUILD_TUPLE 4,479,540 4,479,540 0.0%
LOAD_ATTR 3,925,580 3,925,580 0.0%
JUMP_FORWARD 3,921,840 3,921,840 0.0%
COPY_FREE_VARS 3,919,680 3,919,680 0.0%
BUILD_MAP 3,919,380 3,919,380 0.0%
STORE_ATTR 3,361,160 3,361,160 0.0%
IS_OP 3,359,520 3,359,520 0.0%
END_SEND 3,359,340 3,359,340 0.0%
GET_AWAITABLE 3,359,340 3,359,340 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%
SEND_GEN 2,799,600 2,799,600 0.0%
MAKE_CELL 2,799,420 2,799,420 0.0%
BUILD_LIST 2,241,900 2,241,900 0.0%
STORE_ATTR_INSTANCE_VALUE 1,122,660 1,122,660 0.0%
SEND 1,120,000 1,120,000 0.0%
SET_FUNCTION_ATTRIBUTE 1,119,960 1,119,960 0.0%
TO_BOOL 561,940 561,940 0.0%
CALL_BUILTIN_CLASS 561,600 561,600 0.0%
LOAD_SUPER_ATTR_METHOD 560,340 560,340 0.0%
MAKE_FUNCTION 560,100 560,100 0.0%
JUMP_BACKWARD_NO_INTERRUPT 559,980 559,980 0.0%
YIELD_VALUE 559,980 559,980 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 3,600 3,600 0.0%
CALL 2,440 2,440 0.0%
TO_BOOL_LIST 2,400 2,400 0.0%
TO_BOOL_INT 1,560 1,560 0.0%
CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 1,380 1,380 0.0%
LOAD_GLOBAL 1,340 1,340 0.0%
CALL_INTRINSIC_1 1,200 1,200 0.0%
LIST_EXTEND 1,200 1,200 0.0%
BINARY_OP_ADD_FLOAT 1,200 1,200 0.0%
COMPARE_OP 440 440 0.0%
CALL_ISINSTANCE 420 420 0.0%
BINARY_OP_EXTEND 360 360 0.0%
BINARY_SUBSCR 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%
BINARY_OP 180 180 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_SUBSCR_DICT 120 120 0.0%
CALL_BUILTIN_O 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_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
hit

Specialized instructions that complete.

10,079,220 100.0% 10,079,220 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 180 100.0% 180 100.0% 0.0%
Failure 0 0.0% 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 30.0% 240 30.0% 0.0%
hit

Specialized instructions that complete.

480 60.0% 480 60.0% 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 3.2% 3,359,520 3.2% 0.0%
hit

Specialized instructions that complete.

101,913,780 96.7% 101,913,780 96.7% 0.0%
miss

Specialized instructions that deopt.

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

360 0.0% 360 0.0% 0.0%
hit

Specialized instructions that complete.

6,721,200 100.0% 6,721,200 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 20 25.0% 20 25.0% 0.0%
Failure 60 75.0% 60 75.0% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
tuple 40 66.7% 40 66.7% 0.0%
bool 20 33.3% 20 33.3% 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,706,960 100.0% 1,683,340 100.0% -37.8%
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.

3,921,480 1.7% 3,921,480 1.7% 0.0%
hit

Specialized instructions that complete.

224,539,020 98.3% 224,539,020 98.3% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 2,740 67.2% 2,740 67.2% 0.0%
Failure 1,340 32.8% 1,340 32.8% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
overriding descriptor 940 70.1% 940 70.1% 0.0%
module attr not found 200 14.9% 200 14.9% 0.0%
method 120 9.0% 120 9.0% 0.0%
metaclass attribute 20 1.5% 20 1.5% 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.

25,603,800 100.0% 24,088,500 100.0% -5.9%
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.

560,340 100.0% 560,340 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,119,720 28.6% 1,119,720 28.6% 0.0%
hit

Specialized instructions that complete.

2,799,600 71.4% 2,799,600 71.4% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 0 0.0% 0 0.0%
Failure 280 100.0% 280 100.0% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
other 280 100.0% 280 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 6.1% 3,359,340 6.1% 0.0%
hit

Specialized instructions that complete.

52,071,720 93.9% 52,071,720 93.9% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 960 52.7% 960 52.7% 0.0%
Failure 860 47.3% 860 47.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,120 0.7% 561,120 0.7% 0.0%
hit

Specialized instructions that complete.

85,107,300 99.3% 85,107,300 99.3% 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.

473,190,600 39.0% 460,331,100 38.8% -2.7%
Basic

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

727,853,520 60.0% 714,544,180 60.2% -1.8%
Specialized misses

Specialized instructions, e.g. LOAD_ATTR_MODULE that deopt.

3,436,580 0.3% 3,436,420 0.3% -0.0%
Not specialized

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

8,973,960 0.7% 8,973,960 0.8% 0.0%

Deferred by instruction

Breakdown of deferred (not specialized) instruction counts by family
Name Base Count Base Ratio Head Count Head Ratio Change
LOAD_ATTR 3,921,480 31.8% 3,921,480 31.8% 0.0%
CALL 3,359,520 27.3% 3,359,520 27.3% 0.0%
STORE_ATTR 3,359,340 27.3% 3,359,340 27.3% 0.0%
SEND 1,119,720 9.1% 1,119,720 9.1% 0.0%
TO_BOOL 561,120 4.6% 561,120 4.6% 0.0%
COMPARE_OP 360 0.0% 360 0.0% 0.0%
BINARY_SUBSCR 240 0.0% 240 0.0% 0.0%
FOR_ITER 180 0.0% 180 0.0% 0.0%
BINARY_SLICE 0 0.0% 0 0.0%
STORE_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
RESUME 12,400 0.4% 12,240 0.4% -1.3%
RESUME_CHECK 12,400 0.4% 12,240 0.4% -1.3%
CALL_METHOD_DESCRIPTOR_NOARGS 3,424,000 99.3% 3,424,000 99.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%
CHECK_EXC_MATCH 0 0.0% 0 0.0%
END_SEND 0 0.0% 0 0.0%
EXIT_INIT_CHECK 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 19,036,080 23.3% 19,036,080 23.3% 0.0%
Calls to Python functions inlined 62,715,780 76.7% 62,715,780 76.7% 0.0%
Calls via PyEval_EvalFrame (total) 19,036,080 23.3% 19,036,080 23.3% 0.0%
Calls via PyEval_EvalFrame (vector) 15,117,000 18.5% 15,117,000 18.5% 0.0%
Calls via PyEval_EvalFrame (generator) 3,919,080 4.8% 3,919,080 4.8% 0.0%
Calls via PyEval_EvalFrame (legacy) 0 0.0% 0 0.0%
Calls via PyEval_EvalFrame (function vectorcall) 15,117,000 18.5% 15,117,000 18.5% 0.0%
Calls via PyEval_EvalFrame (build class) 0 0.0% 0 0.0%
Calls via PyEval_EvalFrame (slot) 0 0.0% 0 0.0%
Calls via PyEval_EvalFrame (function ex) 559,860 0.7% 559,860 0.7% 0.0%
Calls via PyEval_EvalFrame (api) 60 0.0% 60 0.0% 0.0%
Calls via PyEval_EvalFrame (method) 11,197,380 13.7% 11,197,380 13.7% 0.0%
Frame objects created 420 0.0% 420 0.0% 0.0%
Frames pushed 82,311,660 100.7% 82,311,660 100.7% 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% 40 0.0% -33.3%
Method cache dunder misses 129 111 -14.0%
Mortal increfs 400,913,414 32.0% 412,343,991 32.9% 2.9%
Mortal decrefs 427,304,420 29.8% 436,277,016 30.4% 2.1%
Interpreter immortal increfs 94,685,800 7.6% 92,965,660 7.4% -1.8%
Immortal decrefs 160,285,274 11.2% 163,110,648 11.4% 1.8%
Interpreter mortal increfs 630,451,600 50.3% 619,885,840 49.5% -1.7%
Interpreter immortal decrefs 150,347,220 10.5% 147,849,420 10.3% -1.7%
Immortal increfs 126,457,198 10.1% 127,972,082 10.2% 1.2%
Interpreter mortal decrefs 696,310,280 48.5% 688,201,760 47.9% -1.2%
Allocations to 4 kbytes 44,040 0.0% 43,820 0.0% -0.5%
Method cache collisions 559,662 559,595 -0.0%
Method cache dunder hits 560,991 561,009 0.0%
Method cache misses 560,216 560,230 0.0%
Frees 62,711,425 62,710,774 -0.0%
Allocations 61,034,740 57.3% 61,034,380 57.3% -0.0%
Allocations from freelist 45,483,700 42.7% 45,483,460 42.7% -0.0%
Frees to freelist 45,483,740 45,483,500 -0.0%
Allocations to 512 bytes 60,990,640 57.3% 60,990,520 57.3% -0.0%
Method cache hits 34,718,404 34,718,390 -0.0%
Inline values 3,919,440 3,919,440 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 12,720 160 355,814,930 32,698,720 26,247,720 12,720 160 355,821,563 32,698,640 26,246,000
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 created

The number of traces that were successfully created.

420 7.6% 0 0.0% -100.0%
Recursive call

A trace is truncated because it has a recursive call.

60 1.1% 0 0.0% -100.0%
Trace too short

A potential trace is abandoned because it it too short.

5,100 92.4% 5,420 100.0% 6.3%
Uops executed

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

1,209,097,860 4,739.9% 1,273,649,880 4,889.7% 5.3%
Trace stack underflow

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

3,380 61.2% 3,520 64.9% 4.1%
Traces executed

The number of traces that were executed

25,509,120 26,047,380 2.1%
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,520 5,420 -1.8%
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%
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
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.

420 0 -100.0%
Optimizer successes

The number of traces that were successfully optimized.

420 100.0% 0 -100.0%
Optimizer no memory

The number of optimizations that failed due to no memory.

0 0.0% 0
Remove globals builtins changed

The builtins changed during optimization

0 0.0% 0
Remove globals incorrect keys

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

0 0.0% 0

JIT memory stats

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

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

707,820 13.1% 147,500 9.0% -79.2%
Total memory size

The total size of the memory allocated for the JIT traces

5,406,720 1,638,400 -69.7%
Code size

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

4,020,660 74.4% 1,275,060 77.8% -68.3%
Data size

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

678,240 12.5% 215,840 13.2% -68.2%
Freed memory size

The size of the memory freed from the JIT traces

5,406,720 100.0% 1,884,160 115.0% -65.2%
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 28.6%
<= 8,192 120 28.6%
<= 16,384 120 28.6% 20 33.3% -83.3%
<= 32,768 0 0.0% 20 33.3% 20 / 0 !!
<= 65,536 60 14.3% 20 33.3% -66.7%

Trace length histogram

trace length histogram
Range Base Count Base Ratio Head Count Head Ratio Change
<= 8 60 14.3%
<= 16 60 14.3%
<= 32 0 0.0%
<= 64 180 42.9%
<= 128 60 14.3%
<= 256 60 14.3%

Optimized trace length histogram

optimized trace length histogram
Range Base Count Base Ratio Head Count Head Ratio Change
<= 8 60 14.3%
<= 16 60 14.3%
<= 32 180 42.9%
<= 64 60 14.3%
<= 128 0 0.0%
<= 256 60 14.3%

Trace run length histogram

trace run length histogram

Uop execution stats

uop execution stats
Name Base Count Head Count Change
_LOAD_DEREF 847,260 2,239,440 164.3%
_POP_TOP 1,120,500 2,799,300 149.8%
_GET_ITER 273,240 559,860 104.9%
_STORE_DEREF 273,240 559,860 104.9%
_SWAP 273,240 559,860 104.9%
_CALL_KW_NON_PY 273,240 559,860 104.9%
_CHECK_IS_NOT_PY_CALLABLE_KW 273,240 559,860 104.9%
_LOAD_FAST_6 273,240 559,860 104.9%
_DEOPT 160 20 -87.5%
_CALL_NON_PY_GENERAL 2,867,760 3,359,160 17.1%
_CHECK_IS_NOT_PY_CALLABLE 2,867,760 3,359,160 17.1%
_LOAD_FAST_2 2,867,760 3,359,160 17.1%
_GUARD_NOT_EXHAUSTED_LIST 3,386,700 3,919,020 15.7%
_ITER_CHECK_LIST 3,386,700 3,919,020 15.7%
_STORE_FAST_2 5,462,280 6,158,360 12.7%
_LOAD_CONST_INLINE 16,113,600 17,915,520 11.2%
_CHECK_FUNCTION 10,651,320 11,757,060 10.4%
_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT 15,840,360 17,355,560 9.6%
_GUARD_KEYS_VERSION 15,840,360 17,355,560 9.6%
_LOAD_ATTR_METHOD_WITH_VALUES 15,840,360 17,355,560 9.6%
_PUSH_NULL_CONDITIONAL 20,756,160 22,394,400 7.9%
_CHECK_PEP_523 10,378,080 11,197,200 7.9%
_LOAD_CONST_IMMORTAL 7,783,560 8,397,900 7.9%
_GUARD_IS_TRUE_POP 7,783,560 8,397,900 7.9%
_RETURN_VALUE 5,189,040 5,598,600 7.9%
_CHECK_ATTR_MODULE_PUSH_KEYS 5,189,040 5,598,600 7.9%
_LOAD_ATTR_MODULE_FROM_KEYS 5,189,040 5,598,600 7.9%
_LOAD_FAST_4 5,189,040 5,598,600 7.9%
_LOAD_FAST_7 5,189,040 5,598,600 7.9%
_STORE_FAST_4 5,189,040 5,598,600 7.9%
_COPY 2,594,520 2,799,300 7.9%
_CALL_LIST_APPEND 2,594,520 2,799,300 7.9%
_CALL_TYPE_1 2,594,520 2,799,300 7.9%
_CONTAINS_OP_DICT 2,594,520 2,799,300 7.9%
_CONTAINS_OP_SET 2,594,520 2,799,300 7.9%
_CALL_BUILTIN_FAST 2,594,520 2,799,300 7.9%
_CHECK_FUNCTION_VERSION_KW 2,594,520 2,799,300 7.9%
_DYNAMIC_EXIT 2,594,520 2,799,300 7.9%
_GUARD_IS_NONE_POP 2,594,520 2,799,300 7.9%
_GUARD_IS_NOT_NONE_POP 2,594,520 2,799,300 7.9%
_ITER_NEXT_LIST 2,594,520 2,799,300 7.9%
_ITER_NEXT_TUPLE 2,594,520 2,799,300 7.9%
_JUMP_TO_TOP 2,594,520 2,799,300 7.9%
_LOAD_FAST_5 2,594,520 2,799,300 7.9%
_PY_FRAME_GENERAL 2,594,520 2,799,300 7.9%
_PY_FRAME_KW 2,594,520 2,799,300 7.9%
_STORE_FAST_0 2,594,520 2,799,300 7.9%
_STORE_FAST_7 2,594,520 2,799,300 7.9%
_CHECK_STACK_SPACE 10,378,080 11,197,100 7.9%
_GUARD_NOT_EXHAUSTED_TUPLE 3,113,460 3,359,160 7.9%
_ITER_CHECK_TUPLE 3,113,460 3,359,160 7.9%
_INIT_CALL_PY_EXACT_ARGS_1 7,783,560 8,397,800 7.9%
_LOAD_FAST_1 7,783,560 8,397,800 7.9%
_BINARY_OP_SUBTRACT_INT 2,594,520 2,799,200 7.9%
_GUARD_NOS_INT 2,594,520 2,799,200 7.9%
_LOAD_SMALL_INT_1 2,594,520 2,799,200 7.9%
_MAKE_WARM 28,103,640 30,232,840 7.6%
_CHECK_PERIODIC 34,820,340 36,949,720 6.1%
_CHECK_VALIDITY 116,965,880 123,722,880 5.8%
_SET_IP 137,215,580 144,996,380 5.7%
_PUSH_FRAME 22,844,220 24,072,800 5.4%
_SAVE_RETURN_OFFSET 22,844,220 24,072,800 5.4%
_PUSH_NULL 22,884,240 24,071,820 5.2%
_CHECK_FUNCTION_VERSION 20,249,700 21,273,500 5.1%
_CHECK_VALIDITY_AND_SET_IP 20,289,720 21,272,520 4.8%
_RESUME_CHECK 17,655,180 18,474,300 4.6%
_CHECK_FUNCTION_EXACT_ARGS 17,655,180 18,474,200 4.6%
_GUARD_TYPE_VERSION 48,582,440 50,384,420 3.7%
_LOAD_CONST_INLINE_BORROW 13,505,300 13,996,860 3.6%
_CALL_METHOD_DESCRIPTOR_NOARGS 12,466,140 12,875,700 3.3%
_TO_BOOL_BOOL 35,843,060 36,948,960 3.1%
_LOAD_FAST_3 17,421,960 17,913,360 2.8%
_LOAD_FAST_0 72,968,240 75,016,100 2.8%
_GUARD_IS_FALSE_POP 33,248,540 34,149,660 2.7%
_GUARD_NOT_EXHAUSTED_RANGE 10,391,760 10,637,360 2.4%
_ITER_CHECK_RANGE 10,391,760 10,637,360 2.4%
_START_EXECUTOR 25,509,120 26,047,380 2.1%
_INIT_CALL_PY_EXACT_ARGS_0 9,871,620 10,076,400 2.1%
_ITER_NEXT_RANGE 9,871,620 10,076,300 2.1%
_EXIT_TRACE 22,914,440 23,248,060 1.5%
_LOAD_ATTR_METHOD_NO_DICT 17,148,720 17,353,500 1.2%
_CHECK_MANAGED_OBJECT_HAS_VALUES 25,464,980 25,751,760 1.1%
_LOAD_ATTR_INSTANCE_VALUE 25,464,980 25,751,760 1.1%
_LOAD_ATTR_SLOT 31,702,920 31,907,700 0.6%
_TIER2_RESUME_CHECK 10,637,700 10,637,700 0.0%
_BUILD_LIST 7,277,100 7,277,100 0.0%
_CALL_INTRINSIC_1 7,277,100 7,277,100 0.0%
_LIST_EXTEND 7,277,100 7,277,100 0.0%
_CHECK_STACK_SPACE_OPERAND 7,277,100 7,277,100 0.0%
_LOAD_ATTR 7,277,100 7,277,100 0.0%
_STORE_FAST 7,277,100 7,277,100 0.0%
_STORE_FAST_3 7,277,100 7,277,100 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 1,900 1,900 0.0%
CALL 60

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