More Related Content
Similar to 樽家昌也 (日本Rubyの会)
Similar to 樽家昌也 (日本Rubyの会) (20)
樽家昌也 (日本Rubyの会)
- 3. あるテストの例 (13 tests)
>rake test
Finished in 227.140242 seconds.
ちょっと時間掛かりすぎじゃないか?今後が心配。
top - 17:18:13 up 7:23, 3 users, load average: 0.08, 0.86, 0.58
Tasks: 173 total, 1 running, 171 sleeping, 0 stopped, 1 zombie
Cpu0 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 1 0%
C 1 : 1.0%us, 0.3%sy, 0 0% i 98 7%id 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
0 3% 0.0%ni, 98.7%id, 0 0% 0 0%hi 0 0% i 0 0%
Cpu2 : 0.3%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Cpu3 : 0.3%us, 0.3%sy, 0.0%ni, 99.0%id, 0.3%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2580612k total, 1030520k used, 1550092k free, 224804k buffers
Swap: 2031608k total, 120k used, 2031488k free, 376652k cached
・・・・ !! CPUが4つもあるのに1つしか使ってないよ
・・・・!! CPUが (略
top - 17:18:20 up 46 days, 9:00, 13 users, load average: 0.18, 0.45, 0.51
Tasks: 353 total, 1 running, 348 sleeping, 4 stopped, 0 zombie
Cpu0 : 1.0%us, 0.0%sy, 0.0%ni, 98.3%id, 0.0%wa, 0.0%hi, 0.3%si, 0.3%st
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu3 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu5 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 12.0%us, 7.3%sy, 0.0%ni, 80.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
なんとかせんといかん
Cpu8 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu9 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu10 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu11 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu12 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu13 : 0.0%us, 0.7%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu14 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu15 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16400384k total, 7751860k used, 8648524k free, 257472k buffers
Swap: 8191992k total, 220k used, 8191772k free, 4637040k cached
- 4. 並列実行test環境ってないの?
Java界にはTestNGってのがあるらしい
!
そういえばMakeには-jオプションあるけれど
!
Rakeにはないなぁ
そもそも並列といっても色々単位が。どれがいいの?
!
複数スレッドで
!
複数プロセスで
!
複数計算機で
!
でもすくなくともどれか一つは欲しい
!
今は複数計算機使わなくてもいいや(個人的理由)
!
- 5. 使ってるtest/unitを見てみた
実行開始している所から並列化させればいいんじゃないだろう
!
か?
どこで開始してるの?
そんな時のcaller関数 test本体に入れてみよう
module Test
どうやらここらしい。 module Unit
早速手を入れる class TestSuite
def run(result, &progress_block)
run(result &progress block)
yield(STARTED, name)
単純にThread使ってみる @tests.each do |test|
test.run(result, &progress_block)
カレントディレクトリが end
yield(FINISHED, name)
グローバルスコープだった! end
そもそもThreadは時分割で
複数CPU使わないよと突っ込みが入る。
- 6. じゃあマルチプロセスで
プロセス別れるとプロセス間通信が必要
特に他所のプロセスの変数いじるんだからdRubyがよそう
なんとなく完成 def run(result, &progress_block)
drbserv = DRb.start_service(nil,result)
d_result = DRbObject.new_with_uri(drbserv.uri)
>rake test
yield(STARTED, name)
Finished in 227.140242 seconds.
pids = @tests.map do |test|
>rake test P=
fork {
Finished in 80.753652 seconds.
test.run(d_result, &progress_block)
exit
}
え? end
resultがthread safeじゃない? pids.each {|i| Process.waitpid(i) }
並列化数が制御できてない? drbserv.stop_service()
yield(FINISHED, name)
end
そういうこともあります。
- 7. 分散testに向けて
真剣に考えると色々解決しないといけない課題は多い
!
ターゲットの選定
!
分散のモデル化
!
並列実行されるThreadの導入推進?
!
グリッド?
!
分散test/unit っていっても
本質的な全然解決できてない
- 9. 添付ライブラリ弄りは楽しい
広く使われるものなので固い。たまにもうちょっと融通を
!
利かせてほしくなったりする。
Code Reading が自然と出来るし、
!
弄ってこそ見えてくる事がある。深く読み込める?
コードの必然性とか、工夫とか
!
Rubyは非常にいじりやすい。 C実装部分以外オープン
!
後付けで変更する部分を定義しなおすだけ。
Binary2.0的な事もできたり。(idからポインタを計算)
まだの方は是非一度弄ってみてください
- 10. 分散
これからの時代はメニーコアだ 分散だ
!
Rubyをメニーコア時代のデファクトスクリプト言語に
!
Regional RubyKaigi
!
栃木は分散の聖地?
!
都心からの適度な距離、dRubyな土地だし
!
分散の聖地?
!
分散の聖地はやっぱり分散して存在しないと。
! もっと分散しましょう