Project

General

Profile

Feature #10341

Fiber switch performance improvements

Added by nome (Knut Franke) almost 6 years ago. Updated over 3 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:65518]

Description

The attached patches increase performance of switches between Fibers by ~17% on my test system (Linux, gcc 4.8.2).

Patches 1-3 are purely cosmetic, but included here because submitting them separately would cause conflicts between the patch sets. If these are rejected, I can prepare stand-alone versions of 4/5.

Patch 4 yields the most significant performance increase (~12%). The benefit of patch 5 is lower, and it's a larger change; so this one could optionally be omitted.

require 'benchmark'

fib = Fiber.new do
    loop { Fiber.yield }
end

Benchmark.bm do |bm|
    3.times do
        results << bm.report { 10_000_000.times { fib.resume } }
    end
    avg = results.inject(:+) / results.size
        [avg]
end

Raw benchmarking results:

trunk@47827 - 7.59s
patch 4           - 6.59s (87% of trunk)
patch 4+5      - 6.33s (83% of trunk)

Files

Also available in: Atom PDF