谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

Twitterの人が語るパフォチューとは

Everything I Ever Learned About JVM Performance Tuning at Twitter
https://oracleus.wingateweb.com/published/oracleus2011/sessions/37941/S37941_2408980.pdf
Twitterの中の人がパフォーマンスチューニングについて語るセッション。

スケーリング? いや、エクストリームです。

きっと凄いスケーリングの話をするのかと思ったら、
全くの真逆で超細かい、エクストリームな話でした。


たとえば「メモリを使いすぎない」ようにするための説明では、
Objectをnewするだけで64bitマシンなら128bit (16byte) 消費する、という話に始まり
ポインタ、オブジェクトヘッダ、配列ヘッダ、継承クラスで消費するメモリ(4byteとか24byte)の
説明が続きます。

intとIntegerのメモリ使用量ってそんなに考えてます?

極めつけは、Scala 2.7.7を例にして
Seq[Int]はIntegerで値を保持するから、24 + (32 * 要素数) というバイト数になるけど
Array[Int]はintで値を保持するから、24 + (4 * 要素数) というバイト数で済むんだ、
そしてScala 2.8ではこれが治ったんだ、という話。


正直、私はこのレベルでメモリ使用量を意識したことはなく、
どちらかと言えば、可読性やnull許容等を考えて、intかIntegerを使い分けていました。


世の中、パフォーマンスを上げるためには、あまりきちんとチューニングせずに
ハードウェアのスケールアップ、スケールアウトで片付けてしまう事が多いと思います。


一方でTwitter社のエンジニアが、ここまでエクストリームなチューニングを行い、
少しでもハードウェアのコストを下げるよう(1%下げれば数千台、数万台のハードウェアを減らせる?)
努めている、それができている、という所に、Twitter社の技術力の高さを垣間見た気がします。

Compactness * Throunghput * Responsiveness = a

また、このセッションの後半にあった
「パフォーマンスのトライアングル」という説明もなかなか興味深かったですね。


この論理では、
「メモリ消費量の削減」と「スループット」と「応答速度」を掛け算した値は一定であり、
どこに重きを置くかを調整するのが「チューニング」で、
掛け算した値自体を大きくするのが「最適化」だと説明されていました。

この資料は読んどけ!

ちなみにこの後も、
GCチューニングについて、いくつかの状況ごとの、取るべき対策などを具体的に説明したり
同期処理の最適化について説明したりと、
かなり「具体的」な説明の多いセッションでした。


なんかこの資料を読むだけでも、一回、勉強会を開けそうな感じですね?
パフォーマンスに興味のある方は、ぜひ資料をダウンロードしてみてください。


有用っぽいので、もう一度URLを貼っておきますね。
https://oracleus.wingateweb.com/published/oracleus2011/sessions/37941/S37941_2408980.pdf

@yusukey ありがとう!

ちなみに、このセッションが終わった後、Twitter本社に行ってランチを頂きました。
@yusukey ありがとう!!