Project

General

Profile

Bug #20112

Updated by byroot (Jean Boussier) 15 days ago

I recently installed Ruby 3.3.0, and noticed that some of my scripts that use Ractors started to struggle with performance. After doing some benchmarks, I noticed that, while Ractors seem to be working well on Ruby 3.2.2, they're not working properly on 3.3.0. 

 I'm using Ubuntu 22.04.3 LTS 

 Here is the benchmark code: 

 ``` ruby 
 # frozen_string_literal: true 

 require 'benchmark' 

 Ractor.new { :warmup } if defined?(Ractor) 

 Benchmark.bmbm do |x| 
   x.report("Thread: ") do 
     threads = [] 
     8.times do |i| 
       threads << Thread.new do 
         20000000.times do |j| 
           ((i * 20000000) + j)**2 
         end 
       end 
     end 
     threads.each(&:join) 
   end 
   x.report("Ractor: ") do 
     ractors = [] 
     0..8.times do |i| 
       ractors << Ractor.new(i) do |k| 
         20000000.times do |j| 
           ((k * 20000000) + j)**2 
         end 
       end 
     end 
     ractors.map(&:take) 
   end 
 end 
 

 ``` 

 Here is the results for Ruby 3.2.2: 

 ``` 
 Rehearsal -------------------------------------------- 
 Thread:      7.666909     0.001091     7.668000 (    7.675266) 
 Ractor:     19.318528     0.012017    19.330545 (    2.505888) 
 ---------------------------------- total: 26.998545sec 

                user       system        total          real 
 Thread:      7.918141     0.004011     7.922152 (    7.928772) 
 Ractor:     19.366414     0.003954    19.370368 (    2.517993) 
 ``` 

 Here is the results for Ruby 3.3.0: 

 ``` 
 Rehearsal -------------------------------------------- 
 Thread:      8.634152     0.010895     8.645047 (    8.645104) 
 Ractor:    100.172179     0.035985 100.208164 ( 15.213245) 
 --------------------------------- total: 108.853211sec 

                user       system        total          real 
 Thread:      9.451236     0.004002     9.455238 (    9.460132) 
 Ractor:    118.463294     0.119942 118.583236 ( 18.462157) 
 ``` 
 

Back