From: "jakit (Jakit Liang)" Date: 2022-04-15T06:22:15+00:00 Subject: [ruby-core:108249] [Ruby master Bug#18733] Ruby GC problems cause performance issue with Ractor Issue #18733 has been updated by jakit (Jakit Liang). Thanks much! :) And I change the topic to GC problem instead problem of m1. Hope the memory management will get improvement. ;) ko1 (Koichi Sasada) wrote in #note-1: > Thank you for your report. > > On my WSL2 environment with 12 cores, `ruby 3.2.0dev (2022-04-15T04:24:48Z master 92614111c0) [x86_64-linux]` shows worse results. > > ``` > 0.003304 0.000000 102.404055 ( 13.083221) > 296.139861 262.090810 558.230671 (278.664518) > ``` > > However, I modified it with > > ```ruby > def fib(n) > return n if n < 2 # `[0,1].include?(n)` generates an Array object > fib(n-1) + fib(n-2) > end > ``` > > it shows > > ``` > 0.000000 0.003886 31.579734 ( 4.092415) > 31.779964 0.003833 31.783797 ( 4.114323) > ``` > > maybe because of object allocation (GC) causes contention and the system determines it should not use performance cores. > (BTW I can't see figure "ruby_bug_with_m1") > > The conclusion is, the reason of this issue is the implementation of object allocation (GC). ---------------------------------------- Bug #18733: Ruby GC problems cause performance issue with Ractor https://bugs.ruby-lang.org/issues/18733#change-97267 * Author: jakit (Jakit Liang) * Status: Open * Priority: Normal * ruby -v: ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236) [arm64-darwin21] * Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN ---------------------------------------- Code: ``` require 'benchmark' def fib(n) return n if [0,1].include?(n) fib(n-1) + fib(n-2) end tp = [] puts Benchmark.measure { 8.times do tp << fork { fib(37) } end tp.each { |t| Process.wait(t) } } puts Benchmark.measure { 8.times.map { Ractor.new { fib(37) } }.each{ |r| r.take } } ``` Result: |A |B | |--|--| | fork | 0.000264 0.003439 87.181198 ( 11.211349) | | Ractor | 80.292916 15.062559 95.355475 ( 39.569527) | And I found that here's the problem showing on the ActiveMonitor.app: ![ruby_bug_with_m1](http://jakit.cn/screen_shot_ruby_bug.jpg) As you can see, the process of ruby is always using all Performance Cores on my Apple M1 Mac. But there's no one of the Efficiency Cores was in used by ruby Ractor. -- https://bugs.ruby-lang.org/ Unsubscribe: