diff --git a/basic_benchmark.rb b/basic_benchmark.rb index 65f5520fb..0d4da3bde 100755 --- a/basic_benchmark.rb +++ b/basic_benchmark.rb @@ -46,6 +46,8 @@ MJIT_PER_OS_OPTS = SETARCH_OPTS TRUFFLE_PER_OS_OPTS = {} +BASELINE_RUBY_BUILD = "ruby-3.3.1" + # These are "config roots" because they define a configuration # in a non-platform-specific way. They're really several *variables* # that partially define a configuration. @@ -96,8 +98,13 @@ opts: MJIT_ENABLED_OPTS + [ "--mjit-verbose=1" ], per_os_prefix: MJIT_PER_OS_OPTS, }, + "prev_ruby_no_jit" => { + build: BASELINE_RUBY_BUILD, + opts: NO_JIT_OPTS, + per_os_prefix: CRUBY_PER_OS_OPTS, + }, "prev_ruby_yjit" => { - build: "ruby-3.3.1", + build: BASELINE_RUBY_BUILD, opts: YJIT_ENABLED_OPTS, per_os_prefix: YJIT_PER_OS_OPTS, }, @@ -143,7 +150,7 @@ min_bench_itrs: DEFAULT_MIN_BENCH_ITRS, min_bench_time: DEFAULT_MIN_BENCH_TIME, } -DEFAULT_CONFIGS = %w(yjit_stats prod_ruby_with_yjit prod_ruby_no_jit prev_ruby_yjit) +DEFAULT_CONFIGS = %w(yjit_stats prod_ruby_with_yjit prod_ruby_no_jit prev_ruby_yjit prev_ruby_no_jit) configs_to_test = DEFAULT_CONFIGS.map { |config| "#{YJITMetrics::PLATFORM}_#{config}"} bench_data = nil when_error = :report diff --git a/lib/yjit-metrics/bench-results.rb b/lib/yjit-metrics/bench-results.rb index 1a3d9ee2f..3c1a2abe5 100644 --- a/lib/yjit-metrics/bench-results.rb +++ b/lib/yjit-metrics/bench-results.rb @@ -194,6 +194,7 @@ def platforms "prod_ruby_with_mjit" => "MJIT", "ruby_30_with_mjit" => "MJIT-3.0", "prod_ruby_no_jit" => "CRuby ", + "prev_ruby_no_jit" => "CRuby ", "truffleruby" => "TruffleRuby", "yjit_stats" => "YJIT Stats", } @@ -662,6 +663,9 @@ module YJITMetrics "x86_64_prod_ruby_with_yjit" => { max_warmup_itrs: 30, }, + "x86_64_prev_ruby_no_jit" => { + max_warmup_itrs: 30, + }, "x86_64_prev_ruby_yjit" => { max_warmup_itrs: 30, }, @@ -678,6 +682,9 @@ module YJITMetrics "aarch64_prod_ruby_with_yjit" => { max_warmup_itrs: 30, }, + "aarch64_prev_ruby_no_jit" => { + max_warmup_itrs: 30, + }, "aarch64_prev_ruby_yjit" => { max_warmup_itrs: 30, }, diff --git a/lib/yjit-metrics/report_templates/blog_speed_details.html.erb b/lib/yjit-metrics/report_templates/blog_speed_details.html.erb index adad11799..49086a146 100644 --- a/lib/yjit-metrics/report_templates/blog_speed_details.html.erb +++ b/lib/yjit-metrics/report_templates/blog_speed_details.html.erb @@ -25,9 +25,9 @@

- Tested Ruby version for YJIT and No-JIT: <%= @ruby_metadata_by_config[@with_yjit_config]["RUBY_DESCRIPTION"] %>
+ Tested Ruby version for development CRuby and YJIT: <%= @ruby_metadata_by_config[@with_yjit_config]["RUBY_DESCRIPTION"] %>
<% if @with_prev_yjit_config %> - Tested Ruby version for Ruby 3.3 YJIT: <%= @ruby_metadata_by_config[@with_prev_yjit_config]["RUBY_DESCRIPTION"] %>
+ Tested Ruby version for stable CRuby and YJIT: <%= @ruby_metadata_by_config[@with_prev_yjit_config]["RUBY_DESCRIPTION"] %>
<% end %> <% if @with_mjit_latest_config %> Tested Ruby version for Ruby latest MJIT: <%= @ruby_metadata_by_config[@with_mjit_latest_config]["RUBY_DESCRIPTION"] %>
diff --git a/lib/yjit-metrics/report_types/bloggable_speed_report.rb b/lib/yjit-metrics/report_types/bloggable_speed_report.rb index 18ca8a32b..9bceaa2a1 100644 --- a/lib/yjit-metrics/report_types/bloggable_speed_report.rb +++ b/lib/yjit-metrics/report_types/bloggable_speed_report.rb @@ -44,6 +44,7 @@ def look_up_data_by_ruby(only_platforms: YJITMetrics::PLATFORMS, in_runs: false) raise "No data files for platform(s) #{only_platforms.inspect} in #{@config_names}!" if config_names.empty? @with_yjit_config = exactly_one_config_with_name(config_names, "prod_ruby_with_yjit", "with-YJIT") + @prev_no_jit_config = exactly_one_config_with_name(config_names, "prev_ruby_no_jit", "prev-CRuby", none_okay: true) @with_prev_yjit_config = exactly_one_config_with_name(config_names, "prev_ruby_yjit", "prev-YJIT", none_okay: true) @with_mjit30_config = exactly_one_config_with_name(config_names, "ruby_30_with_mjit", "with-MJIT3.0", none_okay: true) @with_mjit_latest_config = exactly_one_config_with_name(config_names, "prod_ruby_with_mjit", "with-MJIT", none_okay: true) @@ -52,6 +53,7 @@ def look_up_data_by_ruby(only_platforms: YJITMetrics::PLATFORMS, in_runs: false) # Order matters here - we push No-JIT, then MJIT(s), then YJIT and finally TruffleRuby when present @configs_with_human_names = [ + ["CRuby ", @prev_no_jit_config], ["CRuby ", @no_jit_config], ["MJIT3.0", @with_mjit30_config], ["MJIT", @with_mjit_latest_config], @@ -431,7 +433,7 @@ def svg_object(benchmarks: @benchmark_names) # Set up the top legend with coloured boxes and Ruby config names top_legend_box_height = 0.03 - top_legend_box_width = 0.1 + top_legend_box_width = 0.12 top_legend_text_height = 0.025 # Turns out we can't directly specify this... legend_box_stroke_colour = "#888" top_legend_item_width = plot_effective_width / n_configs diff --git a/lib/yjit-metrics/report_types/variable_warmup_report.rb b/lib/yjit-metrics/report_types/variable_warmup_report.rb index 92f0faf6f..59eb2730d 100644 --- a/lib/yjit-metrics/report_types/variable_warmup_report.rb +++ b/lib/yjit-metrics/report_types/variable_warmup_report.rb @@ -30,7 +30,9 @@ def look_up_data_by_ruby # It matters because we want the output reports to be stable with no churn in Git. bench_configs = YJITMetrics::DEFAULT_YJIT_BENCH_CI_SETTINGS["configs"] configs = @result_set.config_names - config_order = configs.select { |c| c["prod_ruby_no_jit"] }.sort + config_order = [] + config_order += configs.select { |c| c["prev_ruby_no_jit"] }.sort # optional + config_order += configs.select { |c| c["prod_ruby_no_jit"] }.sort config_order += configs.select { |c| c["prod_ruby_with_mjit"] }.sort # MJIT is optional, may be empty config_order += configs.select { |c| c["prev_ruby_yjit"] }.sort # optional config_order += configs.select { |c| c["prod_ruby_with_yjit"] }.sort