Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

bootsnapはどれくらい早くなるのか

158 views

Published on

Shinjuku.rb #60 の発表資料

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

bootsnapはどれくらい早くなるのか

  1. 1. ota42y 2018/04/25 Shinjuku.rb #60 bootsnapは どれくらい早くなるのか
  2. 2. • ota42y • サーバサイドエンジニア • rubyとかrustとかgoとかC++とか • Twitter、github → ota42y • 技術書典4でマイクロサービス本を出した – https://ota42y.com/blog/2018/04/10/mi croservices_yorozu_book/ 自己紹介
  3. 3. bootsnap
  4. 4. • Shopify/bootsnap – https://github.com/Shopify/bootsnap • Railsアプリの高速化をしてくれるgem – 入れるだけで早くなる – 起動が50%早くなるとの話 – Rails 5.2から標準で入る – Rails 4.2でも動く bootsnap
  5. 5. • Gemfileに以下を記述 – gem 'bootsnap', require: false • config/boot.rbを変更 – bundlerのrequire後にbootsnapを読む – require 'bootsnap/setup' インストール
  6. 6. • Path Pre-Scanning – ファイルを読み込む際の検索をキャッシュ – ActiveSupportのautoloadも対象 • Compilation caching – YAMLのロード結果をキャッシュする • MessagePackか、ダメならMarshal stream Bootsnapの機能
  7. 7. Path Pre-Scanning
  8. 8. Path Pre-Scanning • $LOAD_PATHの中身をキャッシュする – requireのたびに全部調べるの遅い – bootsnapで中身をキャッシュする – Kernel#requireとか#loadとかをフックする • よくわかる解説(図がわかりやすい) – https://github.com/Shopify/bootsnap#pa th-pre-scanning
  9. 9. Compilation caching
  10. 10. Compilation caching • YAMLの評価結果をキャッシュする – 結果のbytecodeを保存する • RubyVM::InstructionSequenceを使ってる – 保存形式はMessagePack • 表現できない構造の場合はMarshal stream • よくわかる解説(図は無い) – https://github.com/Shopify/bootsnap/tre e/86b8b285520299fec913c5f1d63dda4f1 3dbfa25#compilation-caching
  11. 11. どれくらい早いのか
  12. 12. 起動時間計測 • Rails runnerで起動して即終了を10回 – Bundle exec rails runner “puts Rails.env” • スクリプトは以下 ruby -rbenchmark -e "ret = Benchmark.measure{ 10.times{ system('DISAB LE_SPRING=1 bundle exec rails runner "puts Rails.env"') } }; puts Benchmark::CAPTION; puts ret" (Springは止めてます)
  13. 13. 計測結果 app Gem数 normal (秒) bootsnap (秒) 速度向上率 (秒) Rails 4.2 242 21.17 9.6 45.35 Rails 5.0 その1 220 19.61 9.2 46.99 Rails 5.0 その2 369 68.90 44.1 64.13 Rails 5.1 184 16.95 8.4 49.62 Rails 5.2 147 14.74 6.7 45.45
  14. 14. 計測結果 app Gem数 normal (秒) bootsnap (秒) 速度向上率 (秒) Rails 4.2 242 21.17 9.6 45.35 Rails 5.0 その1 220 19.61 9.2 46.99 Rails 5.0 その2 369 68.90 44.1 64.13 Rails 5.1 184 16.95 8.4 49.62 Rails 5.2 147 14.74 6.7 45.45 • だいたい50%早くなってる • 元が遅いと向上率が高い? • Gemが多いと早くなるわけではない – 4.2と5.2で向上率は同じ gemは100個違う – YAMLのせい?
  15. 15. • Bootsnapは色々キャッシュして早くする – LOAD_PATHやYAMLのパース結果 • だいたい50%早くなる – 便利( ゚∀゚)o彡゚ • インストールは簡単 – どれもハマらずに入れられた • キャッシュによる不具合は未知数 – まだ使い込んでないので… まとめ

×