Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

State file use in UUID gem causes severe performance degradation #2355

Closed
headius opened this issue Dec 29, 2014 · 3 comments
Closed

State file use in UUID gem causes severe performance degradation #2355

headius opened this issue Dec 29, 2014 · 3 comments

Comments

@headius
Copy link
Member

headius commented Dec 29, 2014

From http://jira.codehaus.org/browse/JRUBY-6841

The 'uuid' gem uses a state file to maintain some global sequencing. However when using this file under JRuby, performance is severely impacted. It seems like the problem is its repeated reopening of the file for every UUID generated.

Benchmark:

require 'uuid'

(ARGV[0] || 5).to_i.times do
  Benchmark.bm(20) do |bm|
    bm.report("default") do
      uuid = UUID.new
      100_000.times { uuid.generate }
    end
    bm.report("default, no state file") do
      old_state_file = UUID.state_file
      UUID.state_file = false
      uuid = UUID.new
      100_000.times { uuid.generate }
      UUID.state_file = old_state_file
    end
  end
end

Numbers:


system ~/projects/jruby/tmp/uuid $ jruby -Ilib bench_uuid.rb 
                           user     system      total        real
default               10.610000   3.870000  14.480000 (  9.157000)
default, no state file  1.390000   0.370000   1.760000 (  0.767000)
                           user     system      total        real
default                4.420000   3.660000   8.080000 (  6.886000)
default, no state file  0.370000   0.000000   0.370000 (  0.352000)
                           user     system      total        real
default                3.990000   3.610000   7.600000 (  6.723000)
default, no state file  0.400000   0.000000   0.400000 (  0.349000)
                           user     system      total        real
default                3.540000   3.550000   7.090000 (  6.580000)
default, no state file  0.380000   0.000000   0.380000 (  0.339000)
                           user     system      total        real
default                3.520000   3.510000   7.030000 (  6.551000)
default, no state file  0.350000   0.000000   0.350000 (  0.328000)

system ~/projects/jruby/tmp/uuid $ rvm 1.9.3 do ruby -Ilib bench_uuid.rb 
                           user     system      total        real
default                0.740000   0.010000   0.750000 (  0.736922)
default, no state file  0.730000   0.000000   0.740000 (  0.759890)
                           user     system      total        real
default                0.730000   0.000000   0.730000 (  0.734763)
default, no state file  0.730000   0.010000   0.740000 (  0.727520)
                           user     system      total        real
default                0.730000   0.000000   0.730000 (  0.734713)
default, no state file  0.760000   0.000000   0.760000 (  0.755858)
                           user     system      total        real
default                0.750000   0.000000   0.750000 (  0.759376)
default, no state file  0.730000   0.000000   0.730000 (  0.730918)
                           user     system      total        real
default                0.730000   0.010000   0.740000 (  0.730651)
default, no state file  0.730000   0.000000   0.730000 (  0.726645)

@k77ch7
Copy link
Contributor

k77ch7 commented Jan 15, 2017

Works for me on MacOS.
I guess that was fixed from #4393.

My env:

$ jruby -v
jruby 9.1.8.0-SNAPSHOT (2.3.1) 2017-01-15 3e4fd9e Java HotSpot(TM) 64-Bit Server VM 25.101-b13 on 1.8.0_101-b13 +jit [darwin-x86_64]

Numbers:

$ jruby -Ilib bench_uuid.rb
                           user     system      total        real
default                5.050000   0.100000   5.150000 (  1.885882)
default, no state file  2.060000   0.040000   9.060000 (  3.626896)
                           user     system      total        real
default                0.290000   0.010000   0.300000 (  0.301836)
default, no state file  0.410000   0.020000   0.430000 (  0.335635)
                           user     system      total        real
default                0.300000   0.000000   0.300000 (  0.282258)
default, no state file  1.370000   0.040000   1.410000 (  0.697191)
                           user     system      total        real
default                0.290000   0.010000   0.300000 (  0.286831)
default, no state file  0.380000   0.010000   0.390000 (  0.308904)
                           user     system      total        real
default                0.280000   0.000000   0.280000 (  0.281324)
default, no state file  0.390000   0.010000   0.400000 (  0.329983)

$ rvm jruby-9.1.7.0 do ruby -Ilib bench_uuid.rb
                           user     system      total        real
default               12.480000  13.160000  25.640000 ( 21.828986)
default, no state file  2.190000   0.030000   9.920000 (  3.741480)
                           user     system      total        real
default                4.600000   5.280000   9.880000 ( 12.094271)
default, no state file  0.420000   0.000000   0.420000 (  0.326450)
                           user     system      total        real
default                3.810000   5.210000   9.020000 ( 11.751834)
default, no state file  0.370000   0.000000   0.370000 (  0.321610)
                           user     system      total        real
default                3.240000   5.260000   8.500000 ( 12.087594)
default, no state file  0.690000   0.010000   0.700000 (  0.366765)
                           user     system      total        real
default                3.130000   5.190000   8.320000 ( 11.753569)
default, no state file  0.360000   0.010000   0.370000 (  0.324683)

@k77ch7
Copy link
Contributor

k77ch7 commented Feb 9, 2017

ping @headius

@headius
Copy link
Member Author

headius commented Feb 9, 2017

@k77ch7 I have no idea how #4393 would fix this, but if it's fixed it's fixed! Thanks for the ping :-)

@headius headius closed this as completed Feb 9, 2017
@headius headius added this to the JRuby 9.1.8.0 milestone Feb 9, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants