Thursday, October 8, 2015

雑なツイートをしてしまったばかりにrubyを高速化するはめになった俺たちは!

とツイートしたところ、処理系の中の人から
みたいなツッコミをもらって、うっすみません…ってなってRuby VMのコードを読むことになったわけです。

で、まあ、いくつか気になる点があったので手をつけてしまいました。

1. オブジェクト生成のホットパスの最適化

ホットスポットだとされていたところのコードを読んでると、オブジェクト生成の際に走る関数が割と深いのが問題っぽかった。通常実行されるパスは短いから、それにあわせて最適なコードがはかれるようにコードを調整すれば速くなるはず!!!

とコンセプトコードを書いて投げたら取り込まれた。やったね!!!

* gc.c (newobj_of): divide fast path and slow path

と思ったら、ほとんど速くなってないっぽい。これは悲しい…ということで、細かな修正を依頼。

optimize performance of `rb_str_resurrect` by kazuho · Pull Request #1050 · ruby/ruby

このPR適用すると、問題のマイクロベンチマークが3%〜5%くらい速くなるっぽい。

2. ヒープページのソートをやめる

通常実行される側をいじっても期待ほど速度が上がらなかったので、これは遅い側に原因があるかも…って見ていて気になったのが、ヒープページをソートする処理。現状のRubyは、オブジェクトを格納する「ヒープページ」を16KB単位で確保するんだけど、これを逆参照できるように、アドレスでソートした一覧を持ってる。この構築コストがでかい。

で、これをヒープに書き直してみたところ、rdocを使ったベンチマークで2〜3%の高速化が確認できたので報告。

ただ、今日のRubyは、(昔読んだ記事とは異なり)ヒープページが16KB単位でアラインされているということなので、ヒープを使うよりもビットマップを使うべき案件。

3. スイープの最適化

ヒープページのソートを書き直したあとでプロファイラの出力を眺めていたら、GCのスイープ処理が重たいことに気づいた。コードを読んだところ、分岐回数と呼出深度の両面で改善が望めそうだったので、ざっくりやったところ、やはり2〜5%程度実行時間の短縮ができた。ので、これはPRとして報告。

optimize gc sweep by kazuho · Pull Request #1049 · ruby/ruby



この3つを組み合わせると、rdocみたいな実アプリケーションの実行時間が、手元で5%以上縮みそう!注1 ってことで満足したのがここ二日間の進捗です!!!!!!! なんかいろいろ滞っているような気がしますがすみああおえtぬさおえうh

これからは雑なツイートを慎みたいと思います。


注1: バグがなければ!!

15 comments:

  1. Champions Trophy 2017 Teams Schedule. Get Australia, England, Pakistan, UAE, Afghanistan,
    India Champions Trophy Team Squadl, South Africa, Bangladesh and Afghanistan

    ReplyDelete
  2. Champions Trophy 2017 Live Streaming in India. Star Sports official TV Channel Rights for the India vs England. Watch live Streaming,

    ReplyDelete
  3. Atul gupta
    Atul Gupta is the chief co- founder and CEO of Tools Energy, a Finance Investment. The organization that finances and develops an adaptable power device system that delivers reliable, clean and competitive energy from an extensive range of fuels....

    ReplyDelete
  4. I like the helpful information you provide in your articles. I will bookmark your weblog and check again here frequently. I am quite certain I'll learn many new stuff right here! Best of luck for the next!
    ducklife 4

    ReplyDelete
  5. Your article completely convinced me. Thank you for sharing. microsoft office 2017 product key; [url=http://productkeyfrees.com/product-keys/windows-7-product-key/]WINDOWS 7 PRODUCT KEY[/url]


    ReplyDelete
  6. Thanks for you for putting them all in a single place! it is difficult to get the cast right with therefore several people! and with the shows being only once a week, by enough time you get them down in your face, you never see them again! Great job, and thank you for staying true to the collection and not providing spoilers! I'm incredibly content with teh way the collection sticks to the specific discussion of the books! And I believe the castings have been fabulous! I especially like Tyreon...his character has more type than all the others of his family!
    New Celebrity Net Worth Gucci Mane
    New Celebrity Net Worth Eminem
    New Celebrity Net Beyonce
    New Celebrity Net Adam Sandler
    New Celebrity Net Jerry Seinfeld
    New Celebrity Net Kevin Hart
    New Celebrity Net Triple H
    New Celebrity Net John Cena
    New Celebrity Net Julia Louis Dreyfus
    New Celebrity Net David Bowie

    ReplyDelete
  7. Our Pay for nursing papers made easy services and research writing services makes your college life bearable and fulfilling by enabling you to pass your exams and also in other research and essay writing tasks.

    ReplyDelete
  8. A temporary software malfunction will be cleared after following the process and will allow you to operate your printer again. for more help & support, you must contact HP printer support Number for expert’s advice.

    Hp printer toll free number | Hp printer support number

    ReplyDelete

Note: Only a member of this blog may post a comment.