タグ

ブックマーク / k0kubun.hatenablog.com (6)

  • YJITの性能を最大限引き出す方法 - k0kubun's blog

    RubyのJITコンパイラYJITを開発している弊社Shopifyでは、社内で最もトラフィックが多いストアフロントのアプリにRuby 3.3 (master) をデプロイして平均レスポンスタイムが16%高速化、社内で最も大きなアプリであるモノリスにRuby 3.2をデプロイして平均レスポンスタイムが9%高速化している。他の会社でも、YJIT番で有効にしたら高速化したという事例をちらほら目にした。 一方で必ずしも良い報告ばかりではなく、YJITを有効化したらメモリを使い切ってしまったりだとか、遅くなったみたいな報告も目に入ることがある。こういった問題は我々も多かれ少なかれ経験しており、それぞれ適切に対処することで解決できたため、その知見を共有する。*1 メモリを使い切ってしまった時 zenn.dev YJITを有効化すると、YJITが生成する機械語に加えて、それに関するメタデータもメモリ

    YJITの性能を最大限引き出す方法 - k0kubun's blog
    nurse
    nurse 2023/08/01
  • RJIT: RubyでRubyのJITコンパイラを書いた - k0kubun's blog

    僕はRustRubyのJITを書く仕事をしているのだが、去年の12月くらいから、趣味ではRubyRubyのJITを書いている。 それまではC言語でコード生成を行なうMJITを5年くらいメンテしていたのだが、先月、Rubyで機械語を直接アセンブルするRJITに差し替えた。 github.com なので、今Rubyのmasterブランチには、会社で業務として開発しているRust製のYJITと、僕が趣味で開発しているRuby製のRJITの2つのJITコンパイラが存在している。余談だが、JITの開発をしすぎてRubyの作者であるまつもとさんのコミット数を最近抜いた。 なぜMJITをやめたのか MJITも結構がんばっていて、去年開発していたRuby 3.2ではMJITのコンパイラの実装をCからRubyにフルスクラッチした上、バックグラウンド処理をpthreadからfork + SIGCHLDで行

    RJIT: RubyでRubyのJITコンパイラを書いた - k0kubun's blog
    nurse
    nurse 2023/04/06
  • セルフホストで学ぶJVM入門 - k0kubun's blog

    RubyのJIT開発でやろうと思ってることが大体 @_ko1 さんの作業待ちでブロックしていて暇なので何かを書こうと思い、JVMを書くことにした。 まだその辺のアプリを気軽に動かせるレベルでは全然ないが、別に秘密裏に開発する必要もないと思ったので公開した。 github.com これの紹介と、現時点で学べたことをこの記事に記録しておく。 何故JVMなのか 仕事でJVM言語を使っている 僕が所属しているTreasure Dataでは、大雑把に言うと番サーバーのサービスは大体Ruby, Java, Scala, Kotlinで書かれている*1ので、既にRubyのVMはある程度わかる*2ことを考えると、JVMさえ理解してしまえば社内の主要な言語評価系を抑えたことになり、運用面で活躍の機会が増える気がしている。 また、自分が最近一番書いているのはKotlinなのだが、JVMで動かしていることに由

    セルフホストで学ぶJVM入門 - k0kubun's blog
    nurse
    nurse 2019/06/27
  • RubyのJITに生成コードのメモリ局所性対策を入れた話 - k0kubun's blog

    昨日、RubyのJITの性能改善のためのパッチを入れた。 github.com JITすればするほどRailsが遅くなる問題 Rubyの次期バージョンである2.6には、バイトコードをCのコードに変換した後、gcc/clangでコンパイルして.soファイルにしdlopenすることで生成コードのロードを行なう、MJITと呼ばれるJITコンパイラが入っているのだが、マージしたころのツイートにも書いていた通り、Railsで使うとより多くのメソッドがJITされるほど遅くなってしまうという問題があった。 結果、"MJIT slows down Rails applications"というチケットが報告されることとなり、昨日までの5か月の間閉じることができなかった。 元の構成 対策を始める前のMJITは大雑把に言うとこういう感じだった。メソッド1つごとに1つの.soファイルが作られ、ロードされる。 無制

    RubyのJITに生成コードのメモリ局所性対策を入れた話 - k0kubun's blog
    nurse
    nurse 2018/07/30
  • Itamaeのmruby実装「mitamae」が大体いい感じになった話 - k0kubun's blog

    Roppongi.rb #2 で「mitamae」について話してきた Roppongi.rb #2が "Infrastructure x Ruby" をテーマに開催され、そこで RubyなしでItamaeレシピを実行できる「itamae-go」を作った - k0kubun's blog 話と pure mrubyで実装されたItamae「itamae-mruby」を作った - k0kubun's blog 話をしてきた。 いいたかったことはスライドの通りだけど、枠が15分でいろいろ漏れた話を書いておく。 mitamaeの現状について なんでitamae-mrubyからMItamaeに変えたの というか一昨日までmitamaeはitamae-mrubyという名前だった。エエー。変えた理由は真面目な奴がいくつかあるんだけど、あえて不真面目な奴だけ書くと、名前が微妙なソフトウェアは流行らない気が

    Itamaeのmruby実装「mitamae」が大体いい感じになった話 - k0kubun's blog
    nurse
    nurse 2016/11/02
  • #CookpadTechConf 2016で「Railsアプリ開発環境の高速化」について話した - k0kubun's blog

    クックパッドの社員が発表するCookpad TechConfというイベントの第一回が今日行われ、「Railsアプリ開発環境の高速化」というテーマで話してきた。 開発環境の改善について 僕が技術部に入る前、サービス開発をやる中で一番不満だったのが開発環境のパフォーマンスだったので、技術部に配属されたころからこの仕事をやりたいと思っていた。 今回は先輩方が既に行っていた開発環境のパフォーマンスチューニング - クックパッド開発者ブログの一部を紹介しつつ、その続きとして自分がやってきたことを発表した。 業務で出した成果のうちいままで外部で発表したのはbyebugの高速化くらいだったので、普段僕がどんな仕事をやっているのか紹介する良い機会になった。 発表内容の補足 思ったより15分の枠で話せたことが少なかったので、発表内で話し足りなかったことについて書く。 libsassおすすめです 急いでて全然

    #CookpadTechConf 2016で「Railsアプリ開発環境の高速化」について話した - k0kubun's blog
    nurse
    nurse 2016/01/25
    クックパッド、GC.disableやめるってよ
  • 1