タグ

Performanceに関するYassLabのブックマーク (23)

  • YJIT・pitchforkのreforkingを導入し、パフォーマンスが3割向上しました - Akatsuki Hackers Lab | 株式会社アカツキ(Akatsuki Inc.)

    はじめに こんにちは。アカツキゲームスの松下です。 弊社ではRailsを用いた大規模なゲームサーバを運用しており、お客様に良い体験を届けるべく、パフォーマンス改善が常に重要事項であり続けています。そのため、RubyにおけるJITコンパイラ・高速化技術であるYJITについても、登場時から注目していました。弊社でもこれまでに何度か導入を試みてきたものの、YJITを有効化すると負荷試験中に segmentation fault(SEGV)がごく稀かつランダムな箇所で発生するという現象に悩まされており、原因の特定すら難航する、歯痒い状態が続いている状況でした。 そのため、長らく番導入を見送らざるを得ない状況が続いていましたが、一念発起し試行錯誤を重ねた結果、YJITとpitchforkのreforkingを番環境に導入することに成功し、大きなパフォーマンス改善を得ることができました。 記事で

    YJIT・pitchforkのreforkingを導入し、パフォーマンスが3割向上しました - Akatsuki Hackers Lab | 株式会社アカツキ(Akatsuki Inc.)
    YassLab
    YassLab 2026/04/14
    “そこで、SimpleJsonに変更を加えることにしました。PRはこちらです Replace lambda with method to avoid YJIT crash by AZQ1994” https://github.com/aktsk/simple_json/pull/12
  • Split the download and install process of a gem by Edouard-chin · Pull Request #9381 · ruby/rubygems

    What was the end-user or developer problem that led to this PR? Bundler awaits for the dependencies of a gem to be download and installed before it proceeds to downloading and installing the dependency itself. This creates a bottleneck at the end of the installation process and block a thread unnecessarily. Before After What is your fix for the problem, implemented in this PR? Details The installa

    Split the download and install process of a gem by Edouard-chin · Pull Request #9381 · ruby/rubygems
    YassLab
    YassLab 2026/03/25
    "What was the end-user or dev problem led to this PR? Bundler awaits for the dependencies of a gem to be download and installed before it proceeds to downloading and installing the dependency itself. This creates a bottleneck at the end of the installation process and block a thread unnecessarily."
  • Rubyのbundlerを劇的に高速化するShopifyの取り組み(翻訳)|TechRacho by BPS株式会社

    概要 CC BY-NC-SA 4.0 International Deedに基づいて翻訳・公開いたします。 英語記事: Faster bundler | Rails at Scale 原文公開日: 2026年03月09日 原著者: Edouard Chin、Eileen Uchitelle CC BY-NC-SA 4.0 Deed | 表示 - 非営利 - 継承 4.0 国際 | Creative Commons 日語タイトルは内容に即したものにしました。 Shopifyでは開発環境の高速化が求められています。特にShopifyほど大規模なアプリケーションになると、依存関係のインストールにも時間がかかるものです。TypeScriptbunPythonのuvは、依存関係のインストール時間を劇的に改善しましたが、同じことがBundlerとRubyコミュニティでも実現可能だとしたら嬉しいで

    Rubyのbundlerを劇的に高速化するShopifyの取り組み(翻訳)|TechRacho by BPS株式会社
    YassLab
    YassLab 2026/03/17
    "Bundlerのgemダウンロード速度は200%高速化し、モノリス内でgemをgit cloneするときの速度も3倍高速化 / cibuildgemでプリコンパイルする方式に変えたことで、Shopifyのアプリケーション内でbundle installの実行時間全体を3.5倍も短縮"
  • 効果絶大!YJITがRailsアプリにもたらす変化 #パフォーマンス #Ruby #Rails #YJIT - クラウドワークス エンジニアブログ

    はじめに crowdworks.jp のジャンヌチームで主にバックエンドの技術的負債の解消に取り組んでいる @kotarou1192 です。 crowdworks.jp を支える Rails アプリケーションで YJIT を有効化しました。 記事では、有効化の背景と、1週間の観察で得られたパフォーマンスの変化を報告します。 YJIT とは YJITRuby 3.1 で実験的に導入された JIT コンパイラです。 Ruby 3.2 で番利用可能な品質となり、Ruby 3.3 ではさらなるパフォーマンス改善が加えられています。 Lazy Basic Block Versioning (LBBV) という手法により、実行時にコードを Basic Block 単位で遅延的にネイティブコードへコンパイルすることで、インタプリタ実行と比較して高速化を実現します。 Ruby 3.3 における

    効果絶大!YJITがRailsアプリにもたらす変化 #パフォーマンス #Ruby #Rails #YJIT - クラウドワークス エンジニアブログ
    YassLab
    YassLab 2026/02/20
    "Shopify は Ruby 3.3 の YJIT により本番コードが15%高速化 / 今回の Puma における約12〜13%の改善はこれと概ね同程度であり、大規模 Rails アプリケーションにおける YJIT の効果として妥当 / 最大のボトルネックはやはり RDBMS の操作"
  • SmartHR最大のRailsアプリケーションにおけるPumaスレッド数を見直しました - SmartHR Tech Blog

    こんにちは、SmartHR プロダクトエンジニアのB6です。 「基機能」と呼ばれるSmartHR最大のRailsアプリケーションでは、アプリケーションサーバにPumaを使用しています。 RailsPumaデフォルトスレッド数が変更されたのをきっかけに、私たちもスレッド数の設定を見直してみたいと思うようになりました。 記事では、調整の際に行ったこととその結果について共有いたします。 背景 2024年、RailsPumaのデフォルトスレッド数を減らすための議論が展開されました(Issue #50450)。議論の結果、I/O比率を25~50%とする一般的なRailsアプリケーションでは、スレッド数3が適切ではないかという結論に至りました。 要点をざっくりまとめると以下のようになります。 CRubyでは、GVLが存在するため、同時に1つのスレッドしかRubyコードを実行できない Puma

    SmartHR最大のRailsアプリケーションにおけるPumaスレッド数を見直しました - SmartHR Tech Blog
    YassLab
    YassLab 2026/02/04
    “I/O比率を計測し、その結果に基づいてPumaのスレッド数を6から4に変更しました。結果として、メモリ使用量の減少とGVL競合の緩和を確認 / 異なる事象を結びつけながら仮説を立て、実測とデータに基づいて判断していく”
  • 5年振りのメジャーバージョンアップとなるRuby 4.0正式リリース、クラスの定義などを隔離するRuby Box、新JITコンパイラ「ZJIT」搭載など

    5年振りのメジャーバージョンアップとなるRuby 4.0正式リリース、クラスの定義などを隔離するRuby Box、新JITコンパイラ「ZJIT」搭載など Ruby開発チームは2025年12月25日、Ruby 4.0の正式リリースを発表しました。 Rubyは毎年12月25日に新バージョンをリリースすることが恒例となっており、2024年も予定通りに新バージョンが登場しました。しかも今回は2020年にRuby 3.0が登場して以来5年振りのメジャーバージョンアップとなりました。 Rubyはまつもとゆきひろ氏により1993年に開発が始められたプログラミング言語です。シンプルで生産性の高いプログラムを書くことができることなどを特長とし、Ruby on RailsRails)と呼ばれるWebアプリケーションを容易に構築できるフレームワークを備えていることで人気のプログラミング言語です。 Ruby 4

    5年振りのメジャーバージョンアップとなるRuby 4.0正式リリース、クラスの定義などを隔離するRuby Box、新JITコンパイラ「ZJIT」搭載など
    YassLab
    YassLab 2026/01/05
    “新JITコンパイラ「ZJIT」搭載 - YJITの開発チームが開発した、実験的なメソッドベースの新しいJITコンパイラ「ZJIT」が搭載されました。... ZJITはそのYJITコンパイラの後継として、さらなる性能向上を目指しています。”
  • Railsが遅いと言われたときにやること完全ガイド

    はじめに 「Railsって遅いよね」——この言葉を聞いたことがあるでしょうか。確かにRailsは機能が豊富な分、雑に作ると簡単に遅くなります。しかし、その遅さの原因はフレームワークそのものよりも、アプリサーバ設定、DBクエリ、キャッシュ設計、運用スタックの複雑さに起因することが多いのです。 この記事では、「何から手を付ければ速くなるのか」が見えにくい状況を解消するために、実践的な手順とテンプレートをまとめます。 改善の進め方 パフォーマンス改善は以下の順番で進めると迷いにくくなります。 なぜこの順番か? 計測: ボトルネックを特定しないまま最適化しても効果が薄い Puma: アプリサーバの設定ミスは全リクエストに影響する N+1: 最も一般的かつ効果の出やすい改善ポイント DB: インデックス追加は低リスクで効果大 キャッシュ: 計算結果の再利用で負荷を大幅削減 非同期処理: ユーザー体感

    Railsが遅いと言われたときにやること完全ガイド
    YassLab
    YassLab 2025/12/30
    "参考リンク:デプロイ用パフォーマンスチューニング, Active Recordクエリインターフェイス, Railsのキャッシュ機構 - Railsガイド / パフォーマンス改善は、計測→Puma→N+1→DB→キャッシュ→非同期処理→デプロイの順番で進める"
  • システムコンポーネント(CPU、メモリ、ディスク、ネットワーク等)のレイテンシとタイムスケールなどなど - CLOVER🍀

    これは、なにをしたくて書いたもの? CPUサイクルに対してメモリアクセスのレイテンシ比とか、メモリアクセスとディスクアクセスのレイテンシ比がどこかに まとまっていたな、と時々思いながら、どこにあるか忘れて探すことになるので。 各リソースアクセスへのスケール感を把握するのに役に立つと思うので、メモしておくことにしました。 出典は、「詳解 システム・パフォーマンス」です。 O'Reilly Japan - 詳解 システム・パフォーマンス ディスクやネットワークに関しても、まとまっていました。 あと、JCacheでもメモリ、ネットワークに関しては参考になりそうな図があったので、こちらもメモとして。 システムコンポーネント(CPU、メモリ、ディスク、ネットワーク等)のレイテンシとタイムスケール 3.3GHzのCPUのレジスタアクセスから、メモリ、ディスク等のおよそのレイテンシと、CPUのレジスタア

    システムコンポーネント(CPU、メモリ、ディスク、ネットワーク等)のレイテンシとタイムスケールなどなど - CLOVER🍀
    YassLab
    YassLab 2025/08/25
    “各リソースアクセスへのスケール感を把握するのに役に立つと思うので、メモしておくことにしました。出典は、「詳解 システム・パフォーマンス」です。”
  • Ruby: Shopifyによる新しい高速な静的型分析の実験(翻訳)|TechRacho by BPS株式会社

    概要 CC BY-NC-SA 4.0 Deedに基づいて翻訳・公開いたします。 英語記事: Interprocedural Sparse Conditional Type Propagation | Rails at Scale 原文公開日: 2025/02/24 原著者: Max Bernstein、Maxime Chevalier-Boisvert CC BY-NC-SA 4.0 Deed | 表示 - 非営利 - 継承 4.0 国際 | Creative Commons 日語タイトルは内容に即したものにしました。 参考: 疎な条件分岐を考慮した定数伝播(Sparse conditional constant propagation) - Wikipedia 11時をお知らせします。皆さんの大事な変数がどこを指しているかちゃんと把握していますか?1 def shout(obj) ob

    Ruby: Shopifyによる新しい高速な静的型分析の実験(翻訳)|TechRacho by BPS株式会社
    YassLab
    YassLab 2025/05/21
    “20,000個のメソッドを60秒以下で分析できるだろうと予想していましたが、その10倍のサイズのプログラムを、私たちの予想をはるかに超える速度で分析できた / 人間が書いた大規模プログラムにもこの分析が通用しそう”
  • ZJIT has been merged into Ruby

    Following Maxime’s presentation at RubyKaigi 2025, the Ruby developers meeting, and Matz-san’s approval, ZJIT has been merged into Ruby. Hurray! In this post, we will give a high-level overview of the project, which is very early in development. ZJIT is a new just-in-time (JIT) Ruby compiler built into the reference Ruby implementation, YARV, by the same compiler group that brought you YJIT. We (M

    ZJIT has been merged into Ruby
    YassLab
    YassLab 2025/05/16
    "ZJIT is a new just-in-time (JIT) Ruby compiler built into the reference Ruby implementation, YARV, by the same compiler group that brought you YJIT. We (Maxime Chevalier-Boisvert, Takashi Kokubun, Alan Wu, Max Bernstein, and Aiden Fox Ivey) have been working on ZJIT since the beginning of this yr"
  • RubyのGVLを消し去りたいあなたへ(翻訳)|TechRacho by BPS株式会社

    概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: So You Want To Remove The GVL? | byroot’s blog 原文公開日: 2025/01/29 原著者: byroot -- Railsコアコミッター、Rubyコミッターであり、ShopifyのRuby/Railsインフラチームのシニアスタッフエンジニアです 日語タイトルは内容に即したものにしました。 GVLは「グローバルVMロック」の略ですが、「ジャイアントVMロック」とされることもあります。 参考: Rubyの(グローバル)VMロックをトレースする(翻訳) 参考: スレッド (Ruby 3.4 リファレンスマニュアル) 私がやりたいのは、Pitchforkに関する記事を書いて、これがどんな理由でできたのか、なぜ現在のような形になったのか、そして今後どうなるのかについて説明することです。しかし

    RubyのGVLを消し去りたいあなたへ(翻訳)|TechRacho by BPS株式会社
    YassLab
    YassLab 2025/03/04
    "mark-and-sweep方式のGCではほぼ全てのGCトラッキングデータがオブジェクト自身ではなく外部ビットマップに保存 / CoWとの相性が非常によい / 論点の1つである「メモリ使用量の削減」はRubyの場合はさほど重要ではありません"
  • Optimizing Ruby’s JSON, Part 4

    In the previous post, we established that as long as ruby/json wasn’t competitive on micro-benchmarks, public perception wouldn’t change. Since what made ruby/json appear so bad on micro-benchmarks was its setup cost, we had to find ways to reduce it further. Spot the Seven Differences So I decided to file this performance discrepancy as a bug, and investigate it as such and started profiling Step

    YassLab
    YassLab 2025/01/01
    "with all the above optimizations, we were now faster than Oj when reusing the JSON::State object, but still quite a bit slower when allocating it on every call ... So there was no way around it, I had to find how to automatically re-use that JSON::State object. Or how to not allocate it at all?"
  • Optimizing Ruby’s JSON, Part 3

    In the previous post, I covered how I reimplemented JSON::Generator::State#configure in Ruby and some other changes. Unfortunately, it didn’t go as well as I initially thought. Mistakes Were Made The default gems that ship with Ruby are automatically copied inside ruby/ruby’s repo. In short, there’s a bot aptly named matzbot, that replicates all the commits from the various ruby/* gems, inside rub

    YassLab
    YassLab 2025/01/01
    “In the next post, we’ll dive into how the setup cost was optimized further, and then at some point, we’ll have to start talking about optimizing the parser.”
  • Optimizing Ruby’s JSON, Part 2

    In the previous post, I covered my motivations for improving ruby/json’s performance, and detailed the first 4 notable optimizations applied to speed up JSON generation. If I was to cover every single optimization applied, at this rate I’d end up with a dozen parts, so I’ll try to only focus on the one that made a significant difference or used an interesting pattern. Reducing Setup Cost - Argumen

    YassLab
    YassLab 2025/01/01
    “At this rate, and based only on the number of commits I haven’t yet covered, I may need 5 or 6 more parts, but I hope I won’t have to disgress as much as the series progress, and not all commits may be worth talking about. Edit: Part three is here.”
  • Optimizing Ruby’s JSON, Part 1

    I was recently made maintainer of the json gem, and aside from fixing some old bugs, I focused quite a bit on its performance, so that it is now the fastest JSON parser and generator for Ruby on most benchmarks. Contrary to what one might think, there wasn’t any black magic or deep knowledge involved. Most of the performance patches I applied were fairly simple optimizations driven by profiling. A

    YassLab
    YassLab 2025/01/01
    “I have way more optimizations than these ones to talk about, but I feel like it’s already a pretty packed blog post. So I’ll stop here and work on some followup soon, hopefully I won’t lose my motivation to write :). / Edit: Looks like I didn’t, part two is here.”
  • RubyKaigi2024に参加してきました⛱️

    2024年5月15〜17の3日間、沖縄県那覇市で開催されたRubyKaigi2024に参加してきました! 今年も楽しかったですね・・・! だいぶ間が空いてしまいましたが、聴講したトークや思ったことなど書いてみました。 トーク感想 Day1 The grand strategy of Ruby Parser by Yuichiro Kaneko 発表資料 Ruby3.3で導入されたパーサージェネレータであるLramaについて、どんなものなのか、それがなぜ選ばれたのか、そして現在のRubyのパーサ周りの開発がどのような状況かといった内容でした。 まずここでいうパーサとは、Rubyのコードを解釈してASTとして出力するためのものです。 出力されたASTは、主にLSPのような開発支援の外部ツール等で使われます。 Ruby3.3では、それまでのBisonに代わってLramaというRubyで書かれた新

    RubyKaigi2024に参加してきました⛱️
    YassLab
    YassLab 2024/06/04
    "2024年5月15〜17の3日間、沖縄県那覇市で開催されたRubyKaigi2024に参加してきました!今年も楽しかったですね・・・!だいぶ間が空いてしまいましたが、聴講したトークや思ったことなど書いてみました。"
  • ruby/doc/yjit/yjit.md at master · ruby/ruby

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    ruby/doc/yjit/yjit.md at master · ruby/ruby
    YassLab
    YassLab 2024/05/29
    "YJIT is a lightweight, minimalistic Ruby JIT built inside CRuby. It lazily compiles code using a Basic Block Versioning (BBV) architecture. YJIT is currently supported for macOS, Linux and BSD on x86-64 and arm64/aarch64 CPUs. This project is open source and falls under the same license as CRuby."
  • Rubyは思ったより速いかもしれないとの指摘 | ソフトアンテナ

    国産プログラミング言語「Ruby」は、インタプリタ型のプログラミング言語であるため、「処理速度が遅そう」というイメージを持つ開発者の方もいるかもしれません。 しかし今回、Rubyで書かれたプログラムも工夫次第で十分高速に操作することを、John Hawthorn氏はブログ記事「Ruby might be faster than you think」で指摘し、Hacker NewsやRedditで注目を集めています。 同氏が例として掲載しているのは、crystalrubyと呼ばれる、Rubyの中からCrystalを呼び出すためのgemのサンプルプログラムです。 CrystalはRubyに似た構文を採用した静的型付けプログラミング言語です。 フィボナッチ数を計算するプログラムで、Pure Ruby版のfib_rbとCrystalのコードを呼び出すfib_crの実行速度を比較しています。 req

    Rubyは思ったより速いかもしれないとの指摘 | ソフトアンテナ
    YassLab
    YassLab 2024/05/22
    “Rubyで書かれたプログラムも工夫次第で十分高速に / John Hawthorn氏はブログ記事「Ruby might be faster than you think」で指摘し、Hacker NewsやRedditで注目 / ブロックが配列を生成することに着目し、これを抑制することで速度を改善”
  • スタディサプリ最大のRailsアプリケーションにYJIT+pitchforkを導入してメモリ使用量を劇的に削減するまで - スタディサプリ Product Team Blog

    こんにちは。SREのkyontanです。Rubyが大好きなのでRubyの話をします。ちなみにリクルートはRubyKaigi 2024へGold Sponsorとして協賛しています! *1。ぜひ沖縄でお会いしましょう。 これはあるアプリケーションのメモリ消費量を示すグラフなのですが、まさかgemを入れ替えるだけでこんなに嬉しい変化が見られるとは思っていませんでした。今日はそんなgemの話をします。 話は遡って2023年4月のある日、インターネットを眺めていたところ、ShopifyがpitchforkというOSSを公開したという情報が目に留まりました。 調べてみると、どうやら著名なRackサーバー実装の1つであるunicornの派生版であり、メモリ使用量の削減に特化しているらしいのです。 github.com これはスタディサプリ小中高のあのリソースドカいマイクロサービス第一位である api

    スタディサプリ最大のRailsアプリケーションにYJIT+pitchforkを導入してメモリ使用量を劇的に削減するまで - スタディサプリ Product Team Blog
    YassLab
    YassLab 2024/04/02
    "松本で行われたRubyKaigi 2023に参加した際にはAfter Partyでbyroot氏とも対面で会話し、多分そのワークロードだとうまく動くと思う、みたいな会話 / 先は長そうだ……と思いつつpitchforkにissueを立ててみると、なんと40分で解決"
  • Ruby のメモリ使用量問題を調査し upstream で解決していただいた話 - ANDPAD Tech Blog

    はじめに こんにちは。リアーキテクティングチームの髙橋と申します。 この記事では、アンドパッドの施工管理サービスで利用している Ruby をバージョンアップしたときに発生したメモリ使用量の問題の発生から解決までをお話しします。 Ruby のバージョンアップ(3.0 -> 3.2) アンドパッドでは昨年 2023 に、施工管理サービスで利用している Ruby を 3.0 から 3.2 にバージョンアップしました。 バージョンアップ自体は過去に確立済みの手法(詳しくは過去記事をご参照ください)により、粛々と進められリリースされました。 ところがこのリリースから数日後、とある問題が発覚しました。 メモリ増大問題 アプリケーションのリソース使用状況を監視している SRE チームのメンバーから、以下のような連絡がありました。 Ruby バージョンアップのリリース以降、アプリケーションの利用するメモリ

    Ruby のメモリ使用量問題を調査し upstream で解決していただいた話 - ANDPAD Tech Blog
    YassLab
    YassLab 2024/02/16
    "社内で事象を共有したところこの問題はRuby本体に報告するべきという話に / コミッタの柴田さんから代わりにBug #19969として報告 / 修正コミットがRubyのmasterブランチに入り、バックポートもRuby 3.1, 3.2それぞれに入りました"