From: normalperson@... Date: 2014-07-08T20:37:26+00:00 Subject: [ruby-core:63592] [ruby-trunk - Bug #10009] IO operation is 10x slower in multi-thread environment 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/