ネットワークプログラミング相談室 Port26
■ このスレッドは過去ログ倉庫に格納されています
0625609
2010/07/18(日) 22:31:39まず、send-send-ack問題も知らずに定義の説明を要求した(>>609の)失礼をお許しください。
次に、DICOMは初見でしたので、サイトから日本語訳の巻1/7/8をダウンロードして読んでみました。
TCP上にOSI上位層スタックを乗せた、いわゆる「OSI-over-TCP/IP」の典型例に見えます。
で最後に、今回の性能劣化という障害に関する原因調査と対応策について検討します。
まず原因調査については、性能劣化の原因が「本当に」send-send-ack問題なのかを確認する必要があります。
確実な方法としては、以下の2手法によって上位(入力)側と下位(出力)側でトレースを採取し、それら付き合わせます。
・自作プログラム内にあるソケットへのI/Oとイベント待ち(select)の前後にタイムスタンプ付きの
ログ採取コードを追加して実行し、そのイベントトレースを採取する。
さらにTCP_NODELAYオプションが無効/有効という2通りでもイベントトレースを採取し、オプション指定が
有効であることを確認できるようにする。
・(>>624が指摘したように)LANアナライザ(パケットキャプチャ)とTCPの有識者が手配可能で、
なおかつサーバー連動テスト環境への持ち込みが許されるのであれば、それを活用してIPパケットの
出力タイミングに関する(タイムスタンプ付きの)トレースを採取する。
もしsend-send-ack問題が原因であるなら、上位での(ソケットへの)送信要求がTCPスタック内で保留され、
いくらかの遅延時間が経過した後に、下位での(ネットワークへの)IPパケット送信が記録されているはずです。
そして、TCP_NODELAYが指定されている場合には、その遅延時間がほぼ0(数10ms程度)に収まるはずです。
(続く)
■ このスレッドは過去ログ倉庫に格納されています