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
osyoyu
August 19, 2023
Technology
1
510
ちょっといい感じの Ruby プロファイラがほしい (RubyKaigi 2023 follow up)
osyoyu
August 19, 2023
Tweet
Share
More Decks by osyoyu
See All by osyoyu
もうちょっといいRubyプロファイラを作りたい (2025)
osyoyu
1
680
Profile and benchmark every change - RubyKaigi 2025
osyoyu
0
91
Regional.rb and the Tokyo Metropolis
osyoyu
0
240
都市伝説バスターズ「WebアプリのボトルネックはDBだから言語の性能は関係ない」 - Kaigi on Rails 2024
osyoyu
29
18k
プロファイラ開発者と見る「推測するな、計測せよ」 - YAPC::Hakodate 2024
osyoyu
7
920
ZigでC拡張を作る 2024 Edition
osyoyu
1
120
Rubyのパフォーマンスプロファイリングの改善 / Enhancing performance profiling for Ruby
osyoyu
2
1.1k
RubyKaigi Decks
osyoyu
0
200
The depths of profiling Ruby - RubyKaigi 2024
osyoyu
3
7.4k
Other Decks in Technology
See All in Technology
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.9k
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
12k
新米スクラムマスターの4ヶ月 -「スクラムイベントを回しているのに手応えがない」からの脱出 / Four Months as a New Scrum Master — When Scrum Events Were Running, but Nothing Felt Right
owata
0
180
習慣とAIと環境 — 技術探求を続ける3つの鍵
azukiazusa1
2
600
Kaggleコンペティション「MABe Challenge - Social Action Recognition in Mice」振り返り
yu4u
1
560
Models vs Bounded Contexts for Domain Modularizati...
ewolff
0
200
Kiro Power - Amazon Bedrock AgentCore を学ぶ、もう一つの方法
r3_yamauchi
PRO
0
100
手軽に作れる電卓を作って イベントソーシングに親しもう CQRS+ESカンファレンス2026
akinoriakatsuka
0
450
みんなでAI上手ピーポーになろう! / Let’s All Get AI-Savvy!
kaminashi
0
150
「リリースファースト」の実感を届けるには 〜停滞するチームに変化を起こすアプローチ〜 #RSGT2026
kintotechdev
0
1.1k
20260120 Amazon VPC のパブリックサブネットを無くしたい!
masaruogura
1
110
Databricks Free Edition講座 データエンジニアリング編
taka_aki
0
2.7k
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
So, you think you're a good person
axbom
PRO
2
1.9k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
0
250
Large-scale JavaScript Application Architecture
addyosmani
515
110k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
115
100k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
120
We Have a Design System, Now What?
morganepeng
54
8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
Facilitating Awesome Meetings
lara
57
6.7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
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 Ҏ֎ʹ༗ྗͳϓϩϑΝΠϥطʹ͍͔ͭ͋͘ΔͷͰɺ ৽͍͠ͷͱͯ͠ग़͖͔͢ߟ͍͑ͯΔ……