From ea5aae06fd44d4ac93b9af1ca4b8d7aaf96d9247 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Wed, 18 Mar 2026 17:23:36 -0700 Subject: [PATCH 1/2] yjit_perf.py: Fix the script for the latest perf format --- misc/yjit_perf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/yjit_perf.py b/misc/yjit_perf.py index 61434e5eb4d3e3..117e1da4f62d6b 100755 --- a/misc/yjit_perf.py +++ b/misc/yjit_perf.py @@ -108,7 +108,7 @@ def trace_end(): row = line.split(maxsplit=6) period = row[3] # "1212775" - symbol, dso = row[6].split(" (") # "[JIT] getlocal_WC_0+0x0", "/tmp/perf-78207.map)\n" + symbol, dso = row[6].rsplit(" (", 1) # "[JIT] getlocal_WC_0+0x0", "/tmp/perf-78207.map)\n" symbol = symbol.split("+")[0] # "[JIT] getlocal_WC_0" dso = dso.split(")")[0] # "/tmp/perf-78207.map" From 8003f48be7477c3482d0a007009c2af5aa388c0e Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Wed, 18 Mar 2026 11:49:23 -0700 Subject: [PATCH 2/2] yjit_perf.py: Generalize the script for ZJIT --- doc/jit/yjit.md | 4 ++-- misc/{yjit_perf.py => jit_perf.py} | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) rename misc/{yjit_perf.py => jit_perf.py} (93%) diff --git a/doc/jit/yjit.md b/doc/jit/yjit.md index c55b42cbdadc2a..d91877c30e8222 100644 --- a/doc/jit/yjit.md +++ b/doc/jit/yjit.md @@ -525,7 +525,7 @@ PERF=record ruby --yjit-perf=codegen -Iharness-perf benchmarks/lobsters/benchmar # Aggregate results perf script > /tmp/perf.txt -../ruby/misc/yjit_perf.py /tmp/perf.txt +../ruby/misc/jit_perf.py /tmp/perf.txt ``` #### Building perf with Python support @@ -543,5 +543,5 @@ make make install # Aggregate results -perf script -s ../ruby/misc/yjit_perf.py +perf script -s ../ruby/misc/jit_perf.py ``` diff --git a/misc/yjit_perf.py b/misc/jit_perf.py similarity index 93% rename from misc/yjit_perf.py rename to misc/jit_perf.py index 117e1da4f62d6b..37a63f5329e17f 100755 --- a/misc/yjit_perf.py +++ b/misc/jit_perf.py @@ -22,10 +22,11 @@ def categorize_symbol(dso, symbol): return '[sha256]' elif symbol.startswith('[JIT] gen_send'): return '[JIT send]' - elif symbol.startswith('[JIT]'): + # TODO: Stop using zjit:: as the prefix for JIT code. Rust modules and JIT code should use different namespaces. + elif symbol.startswith('[JIT]') or (symbol.startswith('zjit::') and '@') or symbol == 'zjit::ZJIT entry trampoline': return '[JIT code]' - elif '::' in symbol or symbol.startswith('yjit::') or symbol.startswith('_ZN4yjit'): - return '[YJIT compile]' + elif '::' in symbol or symbol.startswith('_ZN4yjit') or symbol.startswith('_ZN4zjit'): + return '[JIT compile]' elif symbol.startswith('rb_vm_') or symbol.startswith('vm_') or symbol in { "rb_call0", "callable_method_entry_or_negative", "invoke_block_from_c_bh", "rb_funcallv_scope", "setup_parameters_complex", "rb_yield"}: