Skip to content

Commit e1d3dc4

Browse files
committed
Print ZJIT time stats at the end
1 parent de8d4c7 commit e1d3dc4

File tree

1 file changed

+26
-9
lines changed

1 file changed

+26
-9
lines changed

harness/harness-common.rb

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,9 @@ def return_results(warmup_iterations, bench_iterations)
127127
"bench" => bench_iterations,
128128
}
129129

130-
# Collect yjit stats before loading any additional code.
130+
# Collect JIT stats before loading any additional code.
131131
yjit_stats = RubyVM::YJIT.runtime_stats if defined?(RubyVM::YJIT) && RubyVM::YJIT.enabled?
132+
zjit_stats = RubyVM::ZJIT.stats if defined?(RubyVM::ZJIT) && RubyVM::ZJIT.enabled?
132133

133134
# Collect our own peak mem usage as soon as reasonable after finishing the last iteration.
134135
rss = get_rss
@@ -137,24 +138,40 @@ def return_results(warmup_iterations, bench_iterations)
137138
yjit_bench_results["maxrss"] = maxrss
138139
end
139140

141+
# If YJIT or ZJIT is enabled, show some of their stats at the end.
140142
if yjit_stats
141143
yjit_bench_results["yjit_stats"] = yjit_stats
142-
143-
formatted_stats = proc { |key| "%10s" % format_number(yjit_stats[key]) }
144-
yjit_stats_keys = [
144+
stats_keys = [
145145
*ENV.fetch("YJIT_BENCH_STATS", "").split(",").map(&:to_sym),
146146
:inline_code_size,
147147
:outlined_code_size,
148148
:code_region_size,
149149
:yjit_alloc_size,
150150
:compile_time_ns,
151151
].uniq
152-
yjit_stats_pads = yjit_stats_keys.map(&:size).max + 1
153-
yjit_stats_keys.each do |key|
154-
if key == :compile_time_ns
155-
puts "#{"yjit_compile_time:".ljust(yjit_stats_pads)} %8.2fms" % (yjit_stats[:compile_time_ns] / 1_000_000.0).round(2)
152+
puts "YJIT stats:"
153+
elsif zjit_stats
154+
yjit_bench_results["zjit_stats"] = zjit_stats
155+
stats_keys = [
156+
:compile_time_ns,
157+
:profile_time_ns,
158+
:gc_time_ns,
159+
:invalidation_time_ns,
160+
].uniq
161+
puts "ZJIT stats:"
162+
end
163+
if stats_keys
164+
jit_stats = yjit_stats || zjit_stats
165+
formatted_stats = proc { |key| "%11s" % format_number(jit_stats[key]) }
166+
167+
stats_pads = stats_keys.map(&:size).max + 1
168+
stats_keys.each do |key|
169+
case key
170+
when /_time_ns\z/
171+
key_name = key.to_s.sub(/_time_ns\z/, '_time')
172+
puts "#{key_name.ljust(stats_pads)} %9.2fms" % (jit_stats[key] / 1_000_000.0).round(2)
156173
else
157-
puts "#{"#{key}:".ljust(yjit_stats_pads)} #{formatted_stats[key]}"
174+
puts "#{"#{key}:".ljust(stats_pads)} #{formatted_stats[key]}"
158175
end
159176
end
160177
end

0 commit comments

Comments
 (0)