レイテンシの直感的な理解のためのメモ書き

公開日:2019-04-11
最終更新:2019-04-11

0. この記事は

・尺度の異なる世界に生きるコンピュータの"気持ち"を理解しようとするための記事です。
・正しい理解を目指すというよりは、人間が扱うには余りに小さな値の比較に対して物臭にならない習慣づけを目指すものです。
・特別なことが書いてある記事ではないので、本を買って読んだ方が良いです。買って読んでください。

1. 初めに

1.1. 一般的なシステムレイテンシ

以下は『詳解 システム・パフォーマンス』(Brendan Gregg著)で示されている「システムレイテンシのタイムスケールの例」という表で、様々なシステムにおけるレイテンシを、我々人間の直感で理解しやすいタイムスケールに対応させたものです。

※なお、ここでの1CPUサイクルは3.3GHz CPUのものを想定しています。

操作 レイテンシ 対比
1CPUサイクル 0.3n秒 1秒
レベル1キャッシュアクセス 0.9n秒 3秒
レベル2キャッシュアクセス 2.8n秒 9秒
レベル3キャッシュアクセス 12.9n秒 43秒
メインメモリアクセス(DRAM, CPUから) 120n秒 6分
SSD I/O(フラッシュメモリ) 80~150μ秒 2~6日
回転ディスクI/O 1~10m秒 1~12か月
インターネット:サンフランシスコ - ニューヨーク 40m秒 4年
インターネット:サンフランシスコ - イギリス 81m秒 8年
インターネット:サンフランシスコ - オーストラリア 183m秒 19年
TCPパケット再送 1~3秒 105~317年
OS仮想システムリブート 4秒 423年
SCSIコマンドタイムアウト 30秒 3000年
HW仮想化システムリブート 40秒 4000年
物理システムリブート 5分 32000年

引用:『詳解 システム・パフォーマンス』 2.3.2 表 2.2 システムレイテンシのタイムスケールの例

1.2. ネットワークレイテンシ

以下も『詳解 システム・パフォーマンス』からの引用で、ping(1)コマンドで計測したping遅延(つまりICMPエコー要求からエコー応答を受けるまでの時間)を人間の尺度に対比させたものです。(但し、上の表とは基準としている時間が異なることに注意してください。)

※なお、エコー要求を受ける側ではICMPエコー要求は通常割り込みによって処理されてすぐに返されるため、カーネルコードを実行する時間は最小限に抑えられます。一方、送信側ではタイムスタンプがユーザランドから計測されるため、カーネルモードへのコンテキストスイッチなどの時間が含まれる分、少し余分な時間が掛ります。

送信 受信 媒体 レイテンシ 対比
localhost localhost カーネル 0.05m秒 1秒
ホスト ホスト 10GbE 0.2m秒 4秒
ホスト ホスト(同じサブネット) 1GbE 0.6m秒 12秒
ホスト ホスト(同じサブネット) WiFi 3m秒 1分
サンフランシスコ ニューヨーク インターネット 40m秒 13分
サンフランシスコ イギリス インターネット 81m秒 27分
サンフランシスコ オーストラリア インターネット 183m秒 1時間

引用:『詳解 システム・パフォーマンス』 10.3.5 表 10.1 ping遅延の例

※サンフランシスコとニューヨーク間の距離は約4,148kmで、「真空中を」光が進む速さは毎秒299,792,458m(定義値)なので、単純計算ではこの往復にかかる時間は約28ミリ秒です。ところがパケットは銅線や光ファイバを移動するため信号の伝播は真空中よりも遅くなります。現代の光ファイバの場合の屈折率はおよそ1.5とされており、この場合、光ファイバ中を光が伝播する速さは約20万km毎秒ということになります。
悲しいことに相対性理論によれば、光の速さを超えて情報を伝えることは不可能です。パケットをこの速さより早く伝えることはできませんが、例えばCDNを使ってパケットの移動距離を短くすることは可能です。

2. 終わりに(と独り言)

人間の日常生活で目にする時間と比べて、コンピュータの日常における時間というのは多くの場合極々短いです。
それだけに捉えがたく、また、ともすれば「まあいいや」となりがちです。
ところが我々人間も、どこかのwebページを見ようとして(たったの)2~3秒も待たされれば苛々することはよくあります。
エンジニアはコンピュータではありませんが、その"気持ち"を多少は分かりましょう、そしてその理解のためには人間の尺度では測りがたい数字と向き合う必要もある、というお話でした。


どうでもいいのですが、寄稿するにあたってネットサーフィンしていたところ、"Limits of computation"という記事を見つけました。かなり難物ですが一読の価値ありです。エンジニアとしてというよりは寧ろスノッブとして。

記事が少しでもいいなと思ったらクラップを送ってみよう!
0
+1
メモ以上ブログ未満

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする