Issue #10341 has been updated by Koichi Sasada.


Eric Wong wrote:
> Maybe this is a simple fix for win32, but I cannot test:

Thank you. Now, it is working. I'm running test-all now.

----------------------------------------
Feature #10341: Fiber switch performance improvements
https://bugs.ruby-lang.org/issues/10341#change-49487

* Author: Knut Franke
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
----------------------------------------
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--------------------------------
0001-Remove-unused-prev_fiber-next_fiber-fields.patch (2.02 KB)
0002-Code-cleanup-in-fiber_switch-fiber_store.patch (4.79 KB)
0003-Small-code-cleanup.patch (1.16 KB)
0004-cont_save_thread-Sparse-copying-of-thread-data.patch (3.39 KB)
0005-Optimize-fiber_switch-callees.patch (13.9 KB)
0005-Optimize-fiber_switch-callees.patch (13.9 KB)


-- 
https://bugs.ruby-lang.org/