Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ちょっといい感じの Ruby プロファイラがほしい (RubyKaigi 2023 follo...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
osyoyu
August 19, 2023
Technology
1
520
ちょっといい感じの Ruby プロファイラがほしい (RubyKaigi 2023 follow up)
osyoyu
August 19, 2023
Tweet
Share
More Decks by osyoyu
See All by osyoyu
もうちょっといいRubyプロファイラを作りたい (2025)
osyoyu
1
740
Profile and benchmark every change - RubyKaigi 2025
osyoyu
0
110
Regional.rb and the Tokyo Metropolis
osyoyu
0
260
都市伝説バスターズ「WebアプリのボトルネックはDBだから言語の性能は関係ない」 - Kaigi on Rails 2024
osyoyu
29
19k
プロファイラ開発者と見る「推測するな、計測せよ」 - YAPC::Hakodate 2024
osyoyu
7
950
ZigでC拡張を作る 2024 Edition
osyoyu
1
130
Rubyのパフォーマンスプロファイリングの改善 / Enhancing performance profiling for Ruby
osyoyu
2
1.1k
RubyKaigi Decks
osyoyu
0
210
The depths of profiling Ruby - RubyKaigi 2024
osyoyu
3
7.7k
Other Decks in Technology
See All in Technology
Keycloak を使った SSO で CockroachDB にログインする / CockroachDB SSO with Keycloak
kota2and3kan
0
120
内製AIチャットボットで学んだDatadog LLM Observability活用術
mkdev10
0
110
CyberAgentの生成AI戦略 〜変わるものと変わらないもの〜
katayan
0
220
プラットフォームエンジニアリングはAI時代の開発者をどう救うのか
jacopen
5
3k
オレ達はAWS管理をやりたいんじゃない!開発の生産性を爆アゲしたいんだ!!
wkm2
4
530
VPCエンドポイント意外とお金かかるなぁ。せや、共有したろ!
tommy0124
1
610
猫でもわかるKiro CLI(AI 駆動開発への道編)
kentapapa
0
210
JAWS DAYS 2026 ExaWizards_20260307
exawizards
0
430
フロントエンド刷新 4年間の軌跡
yotahada3
0
410
Postman v12 で変わる API開発ワークフロー (Postman v12 アップデート) / New API development workflow with Postman v12
yokawasa
0
130
マルチアカウント環境でSecurity Hubの運用!導入の苦労とポイント / JAWS DAYS 2026
genda
0
700
クラウド × シリコンの Mashup - AWS チップ開発で広がる AI 基盤の選択肢
htokoyo
2
250
Featured
See All Featured
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
250
Are puppies a ranking factor?
jonoalderson
1
3.1k
Leo the Paperboy
mayatellez
4
1.5k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
140
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
180
Prompt Engineering for Job Search
mfonobong
0
190
Google's AI Overviews - The New Search
badams
0
930
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Transcript
Daisuke Aritomo (@osyoyu) / RubyKaigi 2023 follow-up ͪΐͬͱ͍͍ײ͡ͷ Ruby ϓϩϑΝΠϥ͕΄͍͠
pp @osyoyu • /^͓͠ΐ[͏ʔ]Ώ/ • ࠷ۙͷඪ: ւۭͷ੍ • ۙگ: ٿͷ70%ΛΞϯϩοΫ͠·ͨ͠
• ۭΛͲ͏߈ུ͢Δ͔ߟ͍͑ͯ·͢ • ඈߦػ͔ɺϋϯάάϥΠμʔతͳͷ͔
Daisuke Aritomo (@osyoyu) / RubyKaigi 2023 follow-up ͪΐͬͱ͍͍ײ͡ͷ Ruby ϓϩϑΝΠϥ͕΄͍͠
l؍͕ͦ͜ɺͯ͢ͷൃݟͷ伴Ͱ͋Δɻz
$IBU(15͕Τδιϯͷͷͱͯ͠հͨ͠ɺ͓ͦΒ࣮͘ࡏ͠ͳ͍֨ݴ l؍͕ͦ͜ɺͯ͢ͷൃݟͷ伴Ͱ͋Δɻz
͓͞Β͍: Ϟνϕʔγϣϯ • ISUCON Ͱ༏উ͢ΔͨΊʹɺRuby ϓϩάϥϜͷϘτϧωοΫΛ ޮతʹ୳͔ͨͬͨ͠ • ॳݟͷʢͱ͍ͯʣWeb ΞϓϦέʔγϣϯΛ͞Εͯ
• ੍ݶ࣌ؒ8࣌ؒͰύϑΥʔϚϯενϡʔχϯά͍ͯͩ͘͠͞ • ͱ͍͏ڝٕ͕͋ͬͯɺRuby Ͱউ͍ͪͨ • ͦͷͨΊʹ Ruby ͷྑ͍ϓϩϑΝΠϥ͕΄͍͠
ͳΜ͔͔ͬͨؾʹͳΔ • Stackprof Ͱ࡞ͬͨ Flamegraph ΛݟΔ • ԣ͕͍ϝιουͷ࣮ΛݟͯΈΔ • ผʹͦΜͳʹͦ͏͡Όͳ͍……
• ͳΔ΄Ͳɺ1ճ͍͚Ͳɺͨ͘͞ΜݺΕͯΔ͚ͩͳͷ͔ʁ • Ͳ͏͢Ε͍͍Μͩʁʁ
ͳΜ͔͔ͬͨؾʹͳΔ • Flamegraph ΛݟΔ • ԣ͕͍ϝιουͷ࣮ΛݟͯΈΔ • ผʹͦΜͳʹͦ͏͡Όͳ͍…… • ͳΔ΄Ͳɺ1ճ͍͚Ͳɺͨ͘͞ΜݺΕͯΔ͚ͩͳͷ͔ʁ
• Ͳ͏͢Ε͍͍Μͩʁʁ ԿΘ͔ͬͯͳ͍ʂʂʂʂʂ
Ͳ͏͢Εྑ͘ͳΔ͔ • ϓϩϑΝΠϧࣗମ • Process/Thread ୯ҐͰऩूͯ͠ɺͦΕͧΕͷࣄͿΓΛݟ͍ͨ • CPU ΛͬͯΔ࣌ؒɺI/O ʹͬͯΔ࣌ؒΛਖ਼֬ʹѲ͍ͨ͠
• ϏδϡΞϥΠβ • ↑ ʹରԠ͍ͨ͠ • ελοΫʹݶΒͣɺҙͷΠϕϯτΛه͍ͨ͠ • HTTP ϦΫΤετͳͲ
ϓϩϑΝΠϧࣗମ • Process/Thread ୯ҐͰऩूͯ͠ɺͦΕͧΕͷࣄͿΓΛݟ͍ͨ • طଘͷ API (rb_pro fi le_frames())
GVL Λ͍࣋ͬͯΔ Thread ͷ ͜ͱ͚ͩڭ͑ͯ͘ΕΔ • ҙͷ Thread ͷใΛऔΕΔ৽ API ΛೖΕ͍ͨ (ruby/ruby#7784) • CPU ΛͬͯΔ࣌ؒɺI/O ʹͬͯΔ࣌ؒΛਖ਼֬ʹѲ͍ͨ͠ • Ruby 3.2 Ͱೖͬͨ hook (RUBY_INTERNAL_THREAD_EVENT_*) ͰͱΕΔ Ruby ʹඞཁͳػೳΛ͍ͯ͘͠
ϏδϡΞϥΠβ ڊਓͷݞʹ૬Γ͠Α͏ • ύϑΥʔϚϯεΛؤுͬͯΔਓ͕ͨͪྑ͍ͷΛ࡞͍ͬͯΔͣ • ؤுͬͯΔਓͨͪ = Firefox, Chrome ͷਓͨͪ
• ͜ΕΛ͍͍ײ͡ʹ׆༻Ͱ͖ͳ͍͔
Chrome ui.prefetto.dev
Firefox profiler.firefox.com
͍͢͝ • ϒϥβͰى͖͍ͯΔ͜ͱΛͯ͢ՄࢹԽͰ͖ΔҙࢥΛײ͡Δ • ͔͍͍ͬ͜ʂ • ศརͦ͏ʂ • ͷͰɺޓͳܗࣜͷϓϩϑΝΠϧΛ Ruby
Ͱग़ྗͰ͖ΔΑ͏ʹͨ͠
ϓϩϑΝΠϥΛࢼ࡞ͯ͠Έ͍ͯ·͢ https://github.com/osyoyu/pf2 • ඪʮใΛͰ͖Δ͚ͩूͰ͖ΔϓϩϑΝΠϥʯ • ϓϩϑΝΠϦϯά෦ rb_pro fi le_frames() API
Λͪΐͬͱ֦ு • (rb_thread_pro fi le_frames() (ruby/ruby#7784) ͕ͳ͍طଘͷ Ruby Ͱಈ͖·ͤΜ…… ͳͷͰϦϦʔεͯ͠·ͤΜ……) • ϏδϡΞϥΠβʹ Firefox Pro fi ler Λ࠾༻
ϓϩϑΝΠϥΛࢼ࡞ͯ͠Έ͍ͯ·͢ https://github.com/osyoyu/pf2 • ϓϩϑΝΠϦϯά෦ͷΞΠσΞ͕৽ͳΘ͚Ͱͳ͍ • rb_pro fi le_frames() API Λ֦ு͍ͯ͠Δ
• ϏδϡΞϥΠβʹ Firefox Pro fi ler Λ࠾༻
ྫ: Ϛϯσϧϒϩू߹Λฒྻܭࢉ • ڻҟతฒྻԽՄೳ (embarrassingly parallell) Β͍͠ • σʔλͷड͚͠ͱ͔͠ͳ͍͍ͯ͘ •
ΞϜμʔϧઌੜت • ͔͠͠ݱ࣮ • 1 thread 148.04 seconds 16 threads 147.94 seconds
ྫ: Ϛϯσϧϒϩू߹Λฒྻܭࢉ • ͦ͝·Έ͍ͨͳόʔ͕͍ͭͯΔ෦͕ Thread ͕ GVL Λ͍࣋ͬͯͯ ࣮ࡍʹܭࢉΛͰ͖͍ͯΔ෦
ྫ: Ϛϯσϧϒϩू߹Λฒྻܭࢉ ֓؍ɻࡶͳฒྻ࣮ͰɺͲͷΈͪҰ෦ͷεϨουʹܭࢉ͕ภΔ͜ͱ͕Θ͔Δ
Future work • ϦϦʔε • GitHub ʹҰԠஔ͍ͯΔ͚Ͳɺruby master ͰϏϧυͰ͖·ͤΜ •
rb_thread_pro fi le_frames() (ruby/ruby#7784) Λ Ϛʔδ·Ͱ͍͔ͬͯͳ͍ͱ͍͚ͳ͍ • ศརͳػೳͷՃ • ҙͷλΠϛϯάͰϚʔΧʔΛଧͯΔػೳ • ϒϥβͷ User Timings API (performance.mark) తͳΠϝʔδ • ͍͍ػೳืूத • Stackprof Ҏ֎ʹ༗ྗͳϓϩϑΝΠϥطʹ͍͔ͭ͋͘ΔͷͰɺ ৽͍͠ͷͱͯ͠ग़͖͔͢ߟ͍͑ͯΔ……