[#65451] [ruby-trunk - Feature #10333] [PATCH 3/1] optimize: "yoda literal" == string — ko1@...

Issue #10333 has been updated by Koichi Sasada.

9 messages 2014/10/07

[ruby-core:65745] [ruby-trunk - Feature #10341] [Open] Fiber switch performance improvements

From: ko1@...
Date: 2014-10-16 04:29:53 UTC
List: ruby-core #65745
Issue #10341 has been updated by Koichi Sasada.

Status changed from Closed to Open

on mswin32, the following simple script doesn't work.

```ruby
p Fiber.new{
  100
}.resume
```

```
#=3D>
C:/ko1/src/ruby/trunk/test.rb:1:in `p': method `inspect' called on
hidden T_OBJECT object (0x1ea6730 flags=3D0x1) (NotImplementedError)
        from C:/ko1/src/ruby/trunk/test.rb:1:in `<main>'
NMAKE : fatal error U1077: '.\miniruby.exe' : =E3=83=AA=E3=82=BF=E3=83=BC=
=E3=83=B3 =E3=82=B3=E3=83=BC=E3=83=89 '0x1'
Stop.
```


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

* Author: Knut Franke
* Status: Open
* Priority: Normal
* Assignee:=20
* Category:=20
* Target version:=20
----------------------------------------
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 rejec=
ted, I can prepare stand-alone versions of 4/5.

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

~~~
require 'benchmark'

fib =3D 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 =3D 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)


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

In This Thread

Prev Next