From: samuel@... Date: 2018-05-06T11:07:00+00:00 Subject: [ruby-core:86919] [Ruby trunk Feature#14739] Improve fiber yield/resume performance Issue #14739 has been updated by ioquatix (Samuel Williams). I test in some real world applications today. The first is async, which has a performance test for read context switch overhead: https://github.com/socketry/async/blob/master/spec/async/performance_spec.rb This isn't direct comparison since I'm using rvm with ruby head and my branch, but it's pretty close. ``` # Without libcoro fibers Async::Wrapper Warming up -------------------------------------- Wrapper#wait_readable 1.801k i/100ms Reactor#register 2.087k i/100ms Calculating ------------------------------------- Wrapper#wait_readable 176.789k (�� 5.7%) i/s - 880.689k in 5.004582s Reactor#register 227.882k (�� 2.9%) i/s - 1.140M in 5.004740s Comparison: Reactor#register: 227882.2 i/s Wrapper#wait_readable: 176789.3 i/s - 1.29x slower # With libcoro fibers (12% more context switch for read operations) Async::Wrapper Warming up -------------------------------------- Wrapper#wait_readable 2.217k i/100ms Reactor#register 2.380k i/100ms Calculating ------------------------------------- Wrapper#wait_readable 197.116k (�� 2.7%) i/s - 986.565k in 5.008582s Reactor#register 256.078k (�� 4.4%) i/s - 1.278M in 5.003710s Comparison: Reactor#register: 256077.8 i/s Wrapper#wait_readable: 197115.9 i/s - 1.30x slower ``` ---------------------------------------- Feature #14739: Improve fiber yield/resume performance https://bugs.ruby-lang.org/issues/14739#change-71881 * Author: ioquatix (Samuel Williams) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- I am interested to improve Fiber yield/resume performance. I've used this library before: http://software.schmorp.de/pkg/libcoro.html and handled millions of HTTP requests using it. I'd suggest to use that library. As this is used in many places in Ruby (e.g. enumerable) it could be a big performance win across the board. Here is a nice summary of what was done for RethinkDB: https://rethinkdb.com/blog/making-coroutines-fast/ Does Ruby currently reuse stacks? This is also a big performance win if it's not being done already. -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>