[#43467] [Q] thread->interrupt_flag が適切に排他制御されていないように見える — KOSAKI Motohiro <kosaki.motohiro@...>

kosakiです

15 messages 2011/05/08
[#43482] Re: [Q] thread->interrupt_flag が適切に排他制御されていないように見える — SASADA Koichi <ko1@...> 2011/05/08

 ささだです.

[#43486] Re: [Q] thread->interrupt_flag が適切に排他制御されていないように見える — KOSAKI Motohiro <kosaki.motohiro@...> 2011/05/09

>  ささだです.

[#43487] Re: [Q] thread->interrupt_flag が適切に排他制御されていないように見える — SASADA Koichi <ko1@...> 2011/05/09

 ささだです.

[#43488] Re: [Q] thread->interrupt_flag が適切に排他制御されていないように見える — KOSAKI Motohiro <kosaki.motohiro@...> 2011/05/09

>  ささだです.

[#43489] Re: [Q] thread->interrupt_flag が適切に排他制御されていないように見える — KOSAKI Motohiro <kosaki.motohiro@...> 2011/05/09

自己解決しました

[#43500] Re: [Q] thread->interrupt_flag が適切に排他制御されていないように見える — SASADA Koichi <ko1@...> 2011/05/09

 ささだです.

[#43501] Re: [Q] thread->interrupt_flag が適切に排他制御されていないように見える — KOSAKI Motohiro <kosaki.motohiro@...> 2011/05/09

>> ということは危ないのは RUBY_VM_SET_INTERRUPT() がロストしたときに、タイムアウトなしの

[#43468] Re: [ruby-changes:19438] Ruby:r31478 (trunk): * test/date/*.rb: use skip /w messages. — KOSAKI Motohiro <kosaki.motohiro@...>

2011/5/8 tadf <ko1@atdot.net>:

8 messages 2011/05/08

[#43476] [Ruby 1.9 - Feature #4653][Open] [PATCH 1/1] new method Enumerable#rude_map — Shyouhei Urabe <shyouhei@...>

16 messages 2011/05/08

[#43493] [Ruby 1.9 - Feature #4657][Open] add option to hide skip messages on unit/test — Shota Fukumori <sorah@...>

11 messages 2011/05/09

[#43502] draft schedule of Ruby 1.9.3 — "Yuki Sonoda (Yugui)" <yugui@...>

-----BEGIN PGP SIGNED MESSAGE-----

23 messages 2011/05/09
[#43505] Re: draft schedule of Ruby 1.9.3 — "U.Nakamura" <usa@...> 2011/05/10

Hello,

[#43513] Re: draft schedule of Ruby 1.9.3 — KOSAKI Motohiro <kosaki.motohiro@...> 2011/05/10

(ruby-coreはずしました)

[#43587] [Ruby 1.9 - Feature #4788][Open] resolv.rb refactoring — Makoto Kishimoto <redmine@...>

15 messages 2011/05/27

[ruby-dev:43465] GVL改善案

From: KOSAKI Motohiro <kosaki.motohiro@...>
Date: 2011-05-05 11:14:42 UTC
List: ruby-dev #43465
小崎です

大型連休のさなか、みなさん如何お過ごしでしょうか。わたしは元気です。ごふっ

えっと、以前から指摘されていた事ですが、現在のtrunkのGVL実装だと1.9.2よりも
ある種のベンチが遅くなってます。ぐたいてきには、pipeやThread.passで2つのスレッドが
ギッコンバッタンするケースですね。

				simple-mutex	r31433
vm4_pipe			1.262		2.495
vm4_thread_pass	0.183		2.034


なので、別実装をつくってみました。以下のようになります。

				simple-mutex	r31433	newgvl
vm4_pipe			1.262		2.495	1.493
vm4_thread_pass	0.183		2.034	0.089

パッチは以下です
https://gist.github.com/000b3b46004dd6f1156f

添付したファイルのうち、bm.txtが元データ(CSV)で、性能グラフ.pngがエクセルさんが
作ってくれたグラフです。
一割以上性能がかわったベンチをピックアップすると以下

                                r31433     newgvl        ratio (1以下なら高速)
so_sieve	                1.642	1.43	        0.87088916
vm1_ivar_set*	        1.401	1.647	1.175588865
vm3_thread_mutex	17.083	1.168	0.068372066
vm4_pipe	                2.495	1.493	0.598396794
vm4_thread_pass	2.034	0.089	0.043756146

全体のアベレージでは、1.3% 程度の改善といったところです。コメント待ってます
※ 正直言うと vm1_ivar_set が直せなくて困っているので誰か助けてくださいませ

個人的には、vm3_thread_mutexがやっと1.8なみに戻ってくれたので達成感が
あったりなかったり。

                                1.8.7      r31433      newgvl
vm3_thread_mutex	1.106     17.083	     1.168


あと、感想としては benchmarkディレクトリの大半のベンチマークはthreadつくらないんですが、
競合がないと仮定すると1.9.2のsimple mutex最強ですね。何もしないのが速いにきまっとる。
今の方針で、これ以上やるなら、アセンブラ書いてfutexを直接叩くとかそういったやな世界がまってるので、
次の一手をどうしようかなぁ。とかとか

Attachments (2)

bm.txt (2.14 KB, text/plain)
app_answer,2.022,2.016
app_erb,0.957,0.970
app_factorial,1.108,1.165
app_fib,1.719,1.800
app_mandelbrot,0.937,0.957
app_pentomino,32.693,33.986
app_raise,1.135,1.170
app_strconcat,0.793,0.804
app_tak,2.638,2.726
app_tarai,2.093,2.093
app_uri,1.719,1.750
io_file_create,3.283,3.335
io_file_read,2.597,2.660
io_file_write,4.942,5.093
io_select,2.954,2.878
io_select2,8.587,8.868
io_select3,0.923,0.945
loop_for,2.873,2.901
loop_generator,0.933,0.945
loop_times,2.557,2.630
loop_whileloop,1.161,1.174
loop_whileloop2,2.296,2.304
so_ackermann,2.025,2.009
so_array,2.636,2.489
so_binary_trees,0.940,0.935
so_concatenate,0.831,0.833
so_count_words,0.615,0.618
so_exception,2.382,2.333
so_fannkuch,3.225,3.198
so_fasta,4.680,4.778
so_k_nucleotide,3.344,3.545
so_lists,1.291,1.236
so_mandelbrot,4.113,4.233
so_matrix,0.875,0.948
so_meteor_contest,9.772,9.825
so_nbody,1.674,1.630
so_nested_loop,2.359,2.421
so_nsieve,8.084,8.021
so_nsieve_bits,5.415,5.297
so_object,1.697,1.771
so_partial_sums,2.046,2.049
so_pidigits,1.897,1.847
so_random,3.014,2.963
so_reverse_complement,3.585,3.578
so_sieve,1.642,1.430
so_spectralnorm,7.512,7.569
vm1_block*,3.593,3.550
vm1_const*,0.696,0.753
vm1_ensure*,0.938,1.021
vm1_ivar*,1.259,1.326
vm1_ivar_set*,1.382,1.682
vm1_length*,1.399,1.456
vm1_neq*,1.076,1.124
vm1_not*,0.638,0.624
vm1_rescue*,11.348,11.754
vm1_simplereturn*,2.809,2.775
vm1_swap*,1.026,1.032
vm2_array*,2.31840109825134,2.30743288993835
vm2_case*,1.93026208877563,2.10426092147827
vm2_eval*,1.98840093612671,2.02307105064392
vm2_method*,4.12153005599976,4.05255699157715
vm2_mutex*,2.11638998985291,2.15670800209045
vm2_poly_method*,5.45742392539978,5.44394898414612
vm2_poly_method_ov*,2.37126493453979,2.3899290561676
vm2_proc*,1.29540395736694,1.28760695457458
vm2_regexp*,2.58529186248779,2.82527804374695
vm2_send*,1.62940311431885,1.789705991745
vm2_super*,1.38157606124878,1.41898798942566
vm2_unif1*,1.63438701629639,1.82808303833008
vm2_zsuper*,1.52519106864929,1.53979992866516
vm3_gc,3.372,3.429
vm3_thread_create_join,5.310,5.432
vm3_thread_mutex,17.083,1.168
vm4_pipe,2.495,1.553
vm4_thread_pass,2.034,0.122

In This Thread

Prev Next