Issue #10009 has been updated by Eric Wong.

File test_thread_sched_pipe.rb added
Description updated

eventfd doesn't help performance (but still reduces FD count),
I never expected eventfd to improve speed, though.

Lowering TIME_QUANTUM_USEC (in thread_pthread.c) helps with the I/O case
(try it yourself if you have a 1000HZ kernel); but hurts overall
throughput.

Attached is a I/O bench using pipes without Postgres requirement.
Increasing GVL (or any lock) performance is tricky because we need to
balance fairness and avoid starvation cases.  The GVL was rewritten to
avoid starvation in 1.9.3, so that's likely the cause of the major
difference starting with 1.9.3.

I doubt I can noticeably improve performance with futexes vs mutex/condvar.

How much does GVL performance between 1.9.2 and 2.1 affect real-world
performance on Rainbows!/yahns apps for you?  (not "hello world"-type
apps).

I hope to make GVL optional in a few years, but that is tricky.
Ironically, part of the reason I don't like GVL is I don't want to pay
any threading/locking costs for tiny single-threaded apps, either :)


----------------------------------------
Bug #10009: IO operation is 10x slower in multi-thread environment
https://bugs.ruby-lang.org/issues/10009#change-47647

* Author: Alexandre Riveira
* Status: Open
* Priority: Urgent
* Assignee: 
* Category: 
* Target version: 
* ruby -v: ruby 2.1 x ruby 1.9.2 with taskset
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
I created this issue #9832 but not have io operation.
In the script attached I simulate IO operation in multi-thread environment.
For ruby 1.9.2 apply `taskset -c -p 2 #{Process.pid}` for regulates threads behavior.
The second Thread is a io operation

My results:

1) ruby 2.1.2
first 43500194
second 95
third 42184385

2) ruby-2.0.0-p451
first 38418401
second 95
third 37444470

3) 1.9.3-p545
first 121260313
second 50
third 44275164

4) 1.9.2-p320
first 31189901
second 897 <============
third 31190598

Regards


Alexandre Riveira


---Files--------------------------------
teste_thread_schedule_2.rb (1.05 KB)
teste_thread_schedule.py (953 Bytes)
teste_thread_schedule.rb (955 Bytes)
test_thread_sched_pipe.rb (1.01 KB)


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