タグ GVL
人気順 10 users 50 users 100 users 500 users 1000 usersDatadog Continuous Profiler を用いて、ボトルネックが Ruby の GVL であることを発見した
Datadog Continuous Profiler を用いて、ボトルネックが Ruby の GVL であることを発見した こんにちは、terandard です。 弊社では Datadog を用いてアプリケーションやサーバーの監視を行っています。 以前からリクエストがスパイクした際にアプリケーション全体が遅延する問題があったので、Datadog Continuous Profi... 続きを読む
Rubyの(グローバル)VMロックをトレースする(翻訳)|TechRacho by BPS株式会社
興味が湧いてきましたか?自分でトレースを生成する詳しい方法は以下をお読みください。 GVLとは何か RubyのVM(仮想マシン)は巨大なプログラムで、大半がC言語で書かれています(JRubyやTruffle Rubyについてはまたの機会に😁)。 Rubyアプリケーションでスレッドを作成すると、Ruby VMはそれらのスレッドをOSのスレッ... 続きを読む
Rubyのスレッドはタイムスライスで切り替わる? | Kishima blog
( English Version ) Rubyのスレッド切り替えのトリガーは? 昨日参加したkawasaki.rb で、スレッドの実行の切り替わりのタイミングがよく分からない、という話題が上がりました。 Ruby1.9でネイティブスレッドを用いた方式になったけれど、GVL(Giant VM Lock)の仕組みでIO以外の処理では同時に実行されるスレッドは1一つに制御されている、というような説明を... 続きを読む
Server::Starter を使って複数の Fluentd で1つのポートを待ち受ける - sonots:blog
課題Fluentd は GVL のある CRuby でしか(まだ)動かないので、マルチコアを有効に使うためには1つのホストで複数のプロセスを同時に立ち上げる必要がある。また現在の Fluentd では、それぞれのプロセスで別のポートをそれぞれ listen(2) して待ち受けることしかできない。データ送信側では送信先に複数のポートを指定して、クライアント側でラウンドロビンして負荷分散してもらう形に... 続きを読む
Rei Odaira - RubyのGVLにHTMを用いるパッチ
これは何? オリジナルのRuby VMの実装(CRuby, MRI)は大域VMロック(Giant VM Lock; GVL)を用いています。GVLのおかげでVMと拡張ライブラリの開発者は並列プログラミングについて考える必要が無く実装が容易になります。しかしそのせいで、Rubyでマルチスレッドプログラムを書いても同時に一つのスレッドしか実行されないという性能上の問題がありました。一方、近年のCPUに... 続きを読む