@takehik0 輻輳制御は信頼性とレイテンシのトレードオフになるんじゃないかと思うので、異常系と呼ぶよりは見積もりを誤っただけのような感じですね。
2011-06-15 13:56:15@kumagi 実装じゃなくて設計とか仕様とか回線容量とかハードウェアとかいったレベルのこともあります。容量溢れが起きるケースで流量制御の仕組みがないとか追いつかないとか破綻するとか。過負荷時に性能が飽和するのならOKなんですが、飽和じゃなくてガタ落ちしちゃうんですね。
2011-06-15 14:21:22@kumagi ハードウェアに限らず、なんらかのバッファが溢れるケースで、適切に負荷を制御する仕組みがないと起きますね。よくある簡単な例だと、サーバで、使用メモリ量とかプロセス数の制限が甘くてメモリから溢れて、スラッシング状態になって性能大幅低下とか。
2011-06-15 14:29:17過負荷っていうとログ書こうとしたらENOSPCとか代替サーバに通知しようとしたらENOBUFSとか例外を送出しようとしたらENOMEMとかsleep(1)が戻ってくるのに30秒かかるとかそういうことかな。
2011-06-15 14:35:16@kumagi これ、メモリ→スワップの話だけだと設定甘いんだよみたいに思うかもしれませんが、扱うデータ量が増えてCPUのデータキャッシュから溢れてメインメモリにアクセスするようになって性能低下ってのも(性能低下の度合いが少ないとは言え)本質的には同じ話ですからなかなか難しいです
2011-06-15 14:41:44@koie @kumagi TCPは普通はwindow sizeが自動縮小してなんとかなる筈なんですが、昔のD-Link製のプリンタポートにささるNICは、2パケット分のバッファもなくてwindow自動縮小では救済できず、OSレベルで受信ウィンドウサイズを縮小して対処したりとか。
2011-06-15 14:45:08@n_soda 本来ならばプログラムがどういう挙動を示すべきだったか、というのが定義されうるのであれば、究極的にはソフトウェアの設計ミスという言葉に集約されかねませんが、無限大のデータを処理対象とするようなプログラムは途方もなく効率が悪くなるでしょうし議論しにくいですね。
2011-06-15 14:50:27@kumagi @takehik0 そもそも見積もりができなかったりするんですよ。広域でのTCPの輻輳制御が、経由する(自分の制御できる範囲外の)ルータのバッファサイズが足りないせいで破綻したりとか。世界中のルータのバッファサイズを直して回るなんてムリですし。
2011-06-15 14:51:36@kumagi 単機能のプログラムなら厳密に性能仕様を定義することも可能ですが、大規模なシステムだと、システムを構成するありとあらゆる場所でこの種の定義をする必要があるわけで、仕様定義段階で完璧を期すのは無理でしょうね。
2011-06-15 14:54:00@n_soda @kumagi インターネット系のシステムだと上限ないですからね。その中でどう戦っていくかはテクノロジー+ビジネス、最後は運。
2011-06-15 20:00:36