2012-05-31

全プログラマーが知るべきレイテンシー数

Latency numbers every programmer should know — Gist

L1キャッシュ参照 0.5ナノ秒
分岐予測失敗 5ナノ秒
L2キャッシュ参照 7ナノ秒
Mutexのロックとアンロック 25ナノ秒
メインメモリー参照 100ナノ秒
Zippy[Snappy]による1KBの圧縮 3,000ナノ秒
1Gbpsネットワーク越しに2KBを送信 20,000ナノ秒
メモリーから連続した1MBの領域の読み出し 250,000ナノ秒
同一データセンター内におけるラウンドトリップ 500,000ナノ秒
ディスクシーク 10,000,000ナノ秒
ディスクから連続した1MBの領域の読み出し 20,000,000ナノ秒
パケットを、カリフォルニア→オランダ→カリフォルニアと送る 150,000,000ナノ秒

Jeff Dean著(http://research.google.com/people/jeff/)
元ネタはPeter Norvig (http://norvig.com/21-days.html#answers)
素晴らしく実感できる比較版: https://gist.github.com/2843375

いくつかのレイテンシーは、時間ではなくサイクル数で数えるべきなのだろうが、まあ、簡単な比較のためには、時間でもいいのだろう。

ディスクシークが今も昔も10ミリ秒かかるのは何ともならん。SSDなどのフラッシュメモリベースの記憶装置の大容量化が待たれる。

追記:すこし参考文献が追加されていたので追記。

だいぶ反響があるようだが、メインメモリーへの読み書きは今も昔も遅い。だからこそレジスターがあり、キャッシュがありと、メモリーの遅さを何とか隠そうとする方法が発達した。

2 comments:

tyru said...

「素晴らしく実感できる比較版」のリンクがおかしいです。
http://cpplover.blogspot.jp/2012/05/:%22https://gist.github.com/2843375%22
に飛ばされます。

江添亮 said...

href=:"..."となっていました。
興味深い挙動だ。