ハートで感じる最適化

/.J の『HTTPの同時接続数はどうあるべきか?』にて,サーバ負荷ではなくレイテンシの視点から複数コネクションについて話題になっているツリー.といっても,ツリーの発端となった shinji.ueno さんご自身は,今ひとつピンと来てないようにも見えますが.



@ITDirectX 記事でもこの点は最初に強調しましたが,やっぱりレイテンシ重要ですねと.

ゲームやベンチマークではFPS(Frame Par Second:1秒当たりの画面更新回数)を描画性能の指標に用いることが多いが、これはどちらかというとスループット的な視点である。そのため、大量のオブジェクトを滑らかにアニメーションさせることができる高スループットなハードウェアが高速と評価される傾向があることに注意する必要がある。

パイプライン構成では、同種のパイプラインを並列させることで単純に処理能力を倍加させることができ、パイプラインの太さに見合った回路を1段追加することで新機能の追加を行うことができるため、ハードウェア技術の進化の範囲内で一定の成長率を維持できることが多い。

注意深く見てみれば、CPUのクロック競争や、ブロードバンド通信の帯域競争で強調されていたのが実質的にはスループットの向上であったことが分かる。毎年一定の成長が見込めるスループットという指標は、広告面でも扱いやすい数字だったわけだ。

しかし、高スループットは必ずしも低レイテンシとは限らない。例えば、高DPIでちらつきがなく滑らかにアニメーションするGUI環境が、マウス操作に対しては秒単位の応答時間がかかってしまうということも原理的には起こり得る。ベンチマーク・スコアが3倍のビデオ・カードによって応答時間が3分の1になることを期待してしまうのはありがちな錯覚だが、すべてのWindows Vistaの紹介記事がこういった危うい推論を排除しているかというと残念ながらそうでもない。

まあ皆さん何となく経験則で理解していると思うんですけどね.例えばこんな問題はどうでしょうか?

HDD が 2 台あって,片方からもう片方に複数のファイルを転送したいと思います.ファイルを1つ1つ順番にコピーしていくのと,同時に複数のコピーコマンドを実行させるのは,どちらが早く転送が終わるでしょうか?

これ,もちろんパラメータ依存の問題です.ただ,ローカルで接続されている HDD 2 台で,かつファイルサイズがどれもそこそこ大きければ,何となく順番にコピーした方が早いかなという経験則は皆さんお持ちなんじゃないでしょうか.
一方で,「インターネットからのダウンロードでは,複数セッションを利用した方が早かった」という経験をお持ちの方もいらっしゃるかと思います.
でも,構図自体は同じなんですよね.サーバにある HDD から,クライアントにある HDD に複数のファイルを転送しているだけです.この違いをきちんと説明できることは,結構重要な情報リテラシだと思うのですが,高校卒業段階ぐらいでみんなが知っていれば,色々混乱は減るのになぁと思うところはあります.
あと,次元と桁に注目して以下のような関係を考えるとか.
「レイテンシ (時間)」×「スループット (情報量/時間)」=「バッファ (情報量)」
最近,「こんなに沢山のメモリを使って……」というぼやきはあちこちで聞かれますが,バッファに関しては上の関係が桁で合っているうちは概ね正常の範囲内でしょう.