programming

プログラマが知っておくべき、メモリ/ディスク/ネットワークの速度まとめ

More than 1 year has passed since last update.

2016年で日本で流通しているものを基準とした、大体の速度です。

桁が大事なので上の桁は1に揃えました。単位はビットではなくバイトです。

(SSDのシーケンシャルだけ400MB/sぐらいだったのでちょっと心苦しかったですが、速度を切り上げるとその速度を前提とした設計をされると問題が起こるので低い側に倒しています。)

名前
読込速度
読込速度(MB/s)

メモリ
10GB/s
10000MB/s

有線ネットワーク
1GB/s
1000MB/s

SSD(シーケンシャルアクセス)
100MB/s
100MB/s

HDD(シーケンシャルアクセス)
100MB/s
100MB/s

SSD(ランダムアクセス)
10MB/s
10MB/s

HDD(ランダムアクセス)
1MB/s
1MB/s

4Gネットワーク
1MB-10MB/s
1MB-10MB/s

3Gネットワーク
100kB-1MB/s
0.1MB-1MB/s

注: 無線ネットワークは干渉などによりこの数値より遅くなる状況も十分ありえます。


ポイント


  • メモリからの読み込みとディスクからの読み込みはランダムアクセスで1000倍程度違う


    • とは言え、最近はディスクも結構速い



  • きちんと繋がれた有線ネットワークからの読み込みは、ディスクより速い


    • つまり、ディスクから読むより、同じデータセンターのマシンのメモリから読んだほうが速い



  • モバイルネットワークだと100キロバイトのデータでも1秒以上かかることがある

  • メモリからの読込速度の遅さは、CPUのクロック数も10G/s程度なのと、本来はL1/L2キャッシュなどがあることを考えると通常意識しなくて良い


何故この参考値をまとめたか

プログラミングをする際、どのくらいの時間でどのくらいのサイズ感の処理が出来るのかを考えられることが、ある一定規模以上のサービスを開発するときは必須条件になってくると思います。

なにより、知ってるだけで1つ上のレベルの議論ができるので超お得だと思います。

具体的には、


  • そのプログラムは秒間何人のユーザーをさばけるのか

  • 何台のサーバーを用意したら良いのか

  • 画像のサイズはどのくらいまでが適切か

などを見積もるときに、必要になってくると思います。

最終的には計測したり、他社と比較したりして決定するにしても、作る時の概算で大きくはずさないことも大事なので。


速度の参考値の出典


注意

ネットワーク周りはbyteではなくbitの単位系になっており、8倍の差があります。ここの表では、桁の概算を表しているので、例えば10Gbitイーサネットの速度は1GB/sと表しています。


お願い

こういう値も載せたら?この値おかしくない?というものがありましたら、是非コメントか編集リクエストで教えて下さい。


ちなみに

こういうサイトもあります。よく出来ているけど意外とわかりにくい気もw