From: watson1978@... Date: 2017-09-04T12:46:42+00:00 Subject: [ruby-dev:50223] [Ruby trunk Bug#13861] Performance regressoion in Hash literal in Ruby 2.5.0-dev Issue #13861 has been updated by watson1978 (Shizuo Fujita). I think this is not 3rd party issue. Because this regression appears since 2017-04-28 ``` $ ./miniruby -v -Ilib -I../benchmark-ips/lib ~/tmp/bench.rb ruby 2.5.0dev (2017-04-27 trunk 58469) [x86_64-linux] /home/watson/tmp/bench.rb:7: warning: assigned but unused variable - hash /home/watson/tmp/bench.rb:15: warning: assigned but unused variable - string Warming up -------------------------------------- Hash 119.163k i/100ms String 194.413k i/100ms Calculating ------------------------------------- Hash 2.587M (± 0.5%) i/s - 12.989M in 5.021489s String 13.874M (±20.8%) i/s - 66.489M in 5.005903s ``` ``` $ ./miniruby -v -Ilib -I../benchmark-ips/lib ~/tmp/bench.rb ruby 2.5.0dev (2017-04-28 trunk 58489) [x86_64-linux] /home/watson/tmp/bench.rb:7: warning: assigned but unused variable - hash /home/watson/tmp/bench.rb:15: warning: assigned but unused variable - string Warming up -------------------------------------- Hash 102.010k i/100ms String 227.168k i/100ms Calculating ------------------------------------- Hash 1.674M (± 2.4%) i/s - 8.365M in 5.000468s String 12.829M (± 0.6%) i/s - 64.289M in 5.011156s ``` ---------------------------------------- Bug #13861: Performance regressoion in Hash literal in Ruby 2.5.0-dev https://bugs.ruby-lang.org/issues/13861#change-66472 * Author: watson1978 (Shizuo Fujita) * Status: Third Party's Issue * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.5.0dev (2017-09-02 trunk 59626) [x86_64-linux] * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- Seems Ruby 2.5.0-dev has performance regressoion in Hash literal. I've confirmed it with below benchmark script Hash literal performance -> 35.7 % slow down since Ruby 2.4.1 ### Environment * Ubuntu 17.04 * gcc version 7.0.1 ### Ruby 2.5.0-dev ``` $ ./miniruby -v -Ilib -I../benchmark-ips/lib ~/tmp/bench.rb ruby 2.5.0dev (2017-09-02 trunk 59626) [x86_64-linux] /home/watson/tmp/bench.rb:7: warning: assigned but unused variable - hash /home/watson/tmp/bench.rb:15: warning: assigned but unused variable - string Warming up -------------------------------------- Hash 93.650k i/100ms String 226.366k i/100ms Calculating ------------------------------------- Hash 1.713M (± 0.2%) i/s - 8.616M in 5.030997s String 16.477M (± 0.1%) i/s - 82.397M in 5.000892s ``` ### Ruby 2.4.1 ``` $ ruby -v -Ilib -I../benchmark-ips/lib ~/tmp/bench.rb ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux] /home/watson/tmp/bench.rb:7: warning: assigned but unused variable - hash /home/watson/tmp/bench.rb:15: warning: assigned but unused variable - string Warming up -------------------------------------- Hash 117.135k i/100ms String 259.608k i/100ms Calculating ------------------------------------- Hash 2.663M (± 0.3%) i/s - 13.353M in 5.014087s String 17.259M (± 0.2%) i/s - 86.449M in 5.009036s ``` ### Benchmark code ```ruby require 'benchmark/ips' Benchmark.ips do |x| x.report "Hash" do |loop| count = 0 while count < loop hash = {foo: 12, bar: 34, baz: 56} count += 1 end end x.report "String" do |loop| count = 0 while count < loop string = "hello world" count += 1 end end end ``` ---Files-------------------------------- tmp2.png (70.4 KB) -- https://bugs.ruby-lang.org/