[ruby-dev:50220] [Ruby trunk Bug#13861][Third Party's Issue] Performance regressoion in Hash literal in Ruby 2.5.0-dev
From:
shyouhei@...
Date:
2017-09-04 06:58:36 UTC
List:
ruby-dev #50220
Issue #13861 has been updated by shyouhei (Shyouhei Urabe).
Status changed from Open to Third Party's Issue
After looking at this more closely, I now suspect it's benchmark/ips who's doing something nasty. Without it, trunk runs order of magnitude faster than 2.4.
```
zsh % time ruby@trunk --disable-gems -ve 'i=0; while i<100_000_000 do { foo: 1, bar: 2, baz: 3 }; i+=1 end'
ruby 2.5.0dev (2017-09-03 trunk 59738) [x86_64-darwin15]
ruby --disable-gems -ve 1.77s user 0.03s system 98% cpu 1.833 total
zsh % time ruby@ruby_2_4 --disable-gems -ve 'i=0; while i<100_000_000 do { foo: 1, bar: 2, baz: 3 }; i+=1 end'
ruby 2.4.2p181 (2017-08-05 revision 59520) [x86_64-darwin15]
ruby --disable-gems -ve 25.55s user 0.08s system 99% cpu 25.708 total
```
----------------------------------------
Bug #13861: Performance regressoion in Hash literal in Ruby 2.5.0-dev
https://bugs.ruby-lang.org/issues/13861#change-66469
* 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/