TCP通信をするプログラムを書く際に「データの送信はまとめて1回で」行うべき、というのは鉄則と言っていい、と思います。その理由としては、パケット数を最小限に抑えることでオーバーヘッドを少なくするためだと一般に説明されますが、自分はもうひとつポイントがあると考えています。次のグラフを見てください。 グラフは、一定量のデータを転送するのにかかる時間と使用するブロックサイズ(1回のwrite(2)で書き込むサイズ)の関係を表したものです注1。 ホスト間のTCP通信を行っている場合は、TCPのバッファが有効に機能... > このページを見る
最終更新時間:
2009年12月01日14時17分
みんなのブックマーク 人気(0) 新着
-
「アプリケーションプログラマの視点から見ると、ホスト間のTCP通信はスループット重視だが、同一ホスト間の通信はレイテンシ重視だ、と理解しておけばいいのかもしれません」
-
"同一ホスト上の通信では、送信プロセスがwrite(2)を呼ぶたびにコンテクストスイッチが発生し、受信プロセスが起き上がってread(2)でデータを受信する"
-
これブックマークしてなかったのか。3年前は理解できなかったけど、理解できるようになっていた。
- 全く理解できない。ちゃんと勉強しる⇒読み直して大分分かった
- Kazuho@Cybozu Labs: TCP通信ではデータの送信をまとめて行うべき、もうひとつの理由(& サーバのベンチマーク手法の話)
- 同一ホスト上の通信ではブロックサイズを小さくするとwrite(2)とread(2)のオーバーヘッドのため速度低下。
- 原因は、同一ホスト上の通信では、送信プロセスがwrite(2)を呼ぶたびにコンテクストスイッチが発生し、受信プロセスが起き上がってread(2)でデータを受信するところにあります
- 「アプリケーションプログラマの視点から見ると、ホスト間のTCP通信はスループット重視だが、同一ホスト間の通信はレイテンシ重視だ」
- 興味深い。リモートのホストへの転送でブロックサイズが小さいときに性能が低下しないのは、システムコール呼び出しはcswに比べると大したオーバーヘッドじゃないからってことなんだろうなあ。
-
それですねー RT @sh2nd: これ?
- ほほー
- 『アプリケーションプログラマの視点から見ると、ホスト間のTCP通信はスループット重視だが、同一ホスト間の通信はレイテンシ重視だ、と理解しておけばいいのかもしれません。』
- 「サーバとベンチマークプログラムの両者を同一ホスト上で動かした場合のみ、コンテクストスイッチが頻発しパフォーマンスが低下するケースがあったと記憶しています。」
- 「アプリケーションプログラマの視点から見ると、ホスト間のTCP通信はスループット重視だが、同一ホスト間の通信はレイテンシ重視」
- データ転送時間とブロックサイズの関係
- ためになる
- C/Sが同一ホストで小さいパケットで通信するとコンテキストスイッチでパフォーマンスが悪くなる。リモートだとそれはないけど、write(2)で512よりもでかいのを渡しても結局NICが512bytesくらいで区切っちゃったりするのかな?
- unix domain socket
- 計測誤差か








