VMのコードを読むことになったわけです。いくつか気になる点があったので手をつけてしまいました。オブジェクト生成のホットパスの最適化ホットスポットだとされていたところのコードを読んでると、オブジェクト生成の際に走る関数が割と深いのが問題っぽかった。通常実行されるパスは短いから、それにあわせて最適なコードがはかれるようにコードを調整すれば速くなるはず!!!とコンセプトコードを書いて投げたら取り込まれた。pathと思ったら、ほとんど速くなってないっぽい。これは悲しい...ということで、細かな修正を依頼。ruby/rubyこのPR適用すると、問題のマイクロベンチマークが3%〜5%くらい速くなるっぽい。ヒープページのソートをやめる通常実行される側をいじっても期待ほど速度が上がらなかったので、これは遅い側に原因があるかも...って見ていて気になったのが、ヒープページをソートする処理。現状のRubyは、オブジェクトを格納する「ヒープページ」を16KB単位で確保するんだけど、これを逆参照できるように、アドレスでソートした一覧を持ってる。この構築コストがでかい。これをヒープに書き直してみたところ、rdocを使ったベンチマークで2〜3%の高速化が確認できたので報告。2015ただ、今日のRubyは、(昔読んだ記事とは異なり)ヒープページが16KB単位でアラインされているということなので、ヒープを使うよりもビットマップを使うべき案件。スイープの最適化ヒープページのソートを書き直したあとでプロファイラの出力を眺めていたら、GCのスイープ処理が重たいことに気づいた。コードを読んだところ、分岐回数と呼出深度の両面で改善が望めそうだったので、ざっくりやったところ、やはり2〜5%程度実行時間の短縮ができた。これはPRとして報告。なんかいろいろ滞っているような気がしますがすみああおえtぬさおえうhこれからは雑なツイートを慎みたいと思います。X上のVMで動いているLinuxやFreeBSDからもアクセスできるようにしてあると、互換性検証がはかどる。設定するか、備忘録をかねてメモ。0これで、ホストでも、どのVMでも、/shared-dirの中身が同じになる。10の場合は、環境設定から、新しいネットワークを作成し、「NATを使用する」を外し、そのネットワークを使う必要がある。しない限り、ホストに見えるTCPのソースアドレスがローカルネットワークのものにならない。できるだけ単純に構成しようとすると、こんな感じになるかな、と。設定に問題があるようだったら教えてください。時間を測定するツールを作った件、もしくはHTTP2時代のパフォーマンスチューニングの話ウェブページの表示までにかかる時間をいかに短くするかってのは、儲かるウェブサイトを構築する上で避けて通れない、とても重要な要素です。古いデータとしては、たとえば、ウェブページの表示が500ミリ秒遅くなると広告売上が1.2%低下するというBingの例なんかも知られているわけです。「ウェブページの表示までにかかる時間」と言った場合、実際には以下のようないくつかのメトリックがあります。現在のページからの離脱。画像等を含む全データの表示完了ウェブサイトチューニングにおいては、ユーザができるだけ早くウェブページを閲覧し始めることができるよう、first-paintの値を小さくすることを第一の目標注1全データができるだけ早く揃うよう、loadの値を小さくすることを第二の目標とすることが一般的かと思います。Paint」を計測する方法」)。測定にあたって、運用中のウェブページに変更を加えたくない、ということもあったりします。wpbenchは、これら2点の問題を解消するベンチマークツールです。github.com/kazuho/wpbenchwpbenchは、たった1枚のHTMLファイルです。このHTMLファイルを自分のウェブサイトに追加するだけで、そのサイト上の任意のページの表示までにかかる時間が測定可能になります。body.clientHeightをポリングするという力技により、FirefoxやChromeのようなfirst-paint取得のためのAPIを提供しないウェブブラウザにおいても、その値を取得、表示することができます。HTTP/1.1を使っている場合、これらパフォーマンスメトリックは、専らネットワーク状況とウェブブラウザのみに依存して決まる値でした。HTTP/2では、ウェブブラウザとウェブサーバが恊働して、アセットの転送順序を制御することができるようになった結果、使用するウェブサーバによってパフォーマンスが大幅に変わる、という状況が産まれはじめています。HTTP2サーバ「H2O」のベンチマークページを見ていただくと、ウェブサーバによってfirst-paintまでの時間が倍近く異なるケースがあることがお分かりいただけるかと思います。パフォーマンスチューニング済のウェブサイトを管理している方々も、HTTPS、あるいはHTTP/2への対応にあたり、いま一度、ウェブサイトの表示速度を確認されることをおすすめいたします。ブラウザによってはfirst-paintのタイミングを取得できないため、DOMContentLoadedを使うこともありますが、DOMContentLoadedには<body>末尾に配置する統計系のスクリプトの読み込みにかかる時間等が加算される点等、注意が必要になります。