メインコンテンツへスキップ
検索

アプリケーションのパフォーマンス問題を解決しようとするとき、通信レイヤのレイテンシの影響は一般的に過小評価されていますが、実用的な解決策に向けて努力するためには、正しい理解が不可欠です。

まず、通信層の遅延とは、パケットがローカルシステムからリモートシステムに到達し、再び戻ってくるまでにかかる時間のことです。通信層の遅延の最大の要因は距離です。もう一つの主要な要素は、パケットを処理するローカルホストとリモートホストの間にあるデバイスの数です。リンクの帯域幅は役割を果たしますが、ほとんどの人が考えるほど大きくはありません。帯域幅は挿入遅延に影響を与えます - パケットをワイヤ上に置くのにかかる時間ですが、ワイヤ上の信号は帯域幅ではなく、媒体に基づいた速度で移動します。この議論の残りの部分では、通信層のレイテンシを意味するときはレイテンシを使用します。

待ち時間がアプリケーションにどのように影響するかを説明するために、クライアントアプリケーションにデータを入力してリターンボタンを押したとします。クライアントアプリケーションはサーバアプリケーションにメッセージを送信し、応答を待ってから別のメッセージを送信し、応答を待つなど、いくつかの数N回の「ターン」の間、メッセージを送信します。Nターンの終わりに、クライアントアプリケーションは結果をあなたに返します。

10ターンが必要で、クライアントメッセージを処理してアンサーを送り返すのにサーバアプリケーションが1msかかるとします。待ち時間が1msの場合、応答時間は10 * (1ms + 1ms)または20msとなります。今すぐ飛行機に乗ってシカゴに旅行し、サーバーはボストンに滞在するので、あなたは今、50msと10 * (50ms + 1ms)または550msの応答時間のレイテンシを持っています。これは目立ちますが、苦痛ではありません。ターン数を100に増やすと、5.5秒の応答時間が発生します。100ターンは過剰だと思うかもしれませんが、複雑なデータベースクエリや複雑なフォームを入力するアプリケーションの中には、まさにそのような処理を行うものがあります。アプリケーションに必要なターン数を知っていますか?
OSL経由でファイルをコピーすると、このような挙動を示します。OSL は 4K トランザクションでファイルを送信します。各トランザクションはレスポンスを必要とするので、1,000,000 バイトのファイルは 1,000,000 / 4,096 = 245 トランザクション、または前の段落で述べた命名法を使用するためのターンが必要になります。ここでも、トランザクションを処理するのに1ms、待ち時間が1msと仮定すると、copy_fileは490msかかります。レイテンシを50msに増やすと、12.495秒かかります。ファイルを1,000,000,000,000バイトに増やすと、244,141トランザクションが必要になります。これに対応する時間は、1msの待ち時間が488.282秒、50msの待ち時間が12,451.191秒、約3.5時間です。

遅延を測定する最も簡単な方法はpingです。

ping 192.168.200.197
Pinging host 192.168.200.197 : 192.168.200.197
ICMP Echo Reply:TTL 53 time = 84 ms
ICMP Echo Reply:TTL 53 time = 80 ms
ICMP Echo Reply:TTL 53 time = 81 ms
ICMP Echo Reply:TTL 53 time = 96 ms
Host 192.168.200.197 replied to all 4 of the 4 pings

 

残念ながら、ネットワークが ping パケットをブロックしたり、ホストが ping パケットを無視したりするのが一般的になってきています。ping を使用できない場合は packet_monitor を使用して、接続要求に対する応答を得るまでの時間を計測することができます。例えば、packet_monitorを"start_process 'packet_monitor -numeric -time_stamp -filter -host A.B.C.D -port NNN' -privileged”.と入力してください。telnet A.B.C.D NNN”.いくつかの接続を行って平均値を取得する必要があります。リモートホストの未使用ポートに接続していることに注意してください。これはトレースのパケット数を減らしますが、ファイアウォールがポートをブロックしている場合は、アクティブなポートを使用する必要があるかもしれません。

 

start_process 'packet_monitor -numeric -time_stamp -filter -host 192.168.200.197
+ -port 6666' -privileged
ready 09:12:42
telnet 192.168.200.197 6666
Trying...
telnet: Unable to connect to remote host: The connection was refused.
ready 09:12:53
telnet 192.168.200.197 6666
Trying...
telnet: Unable to connect to remote host: The connection was refused.
ready 09:12:56
telnet 192.168.200.197 6666
Trying...
telnet: Unable to connect to remote host: The connection was refused.
ready 09:12:58
telnet 192.168.200.197 6666
Trying...
telnet: Unable to connect to remote host: The connection was refused.
ready 09:12:58
stop_process packet_monitor -no_ask
Stopping Noah_Davids.CAC (packet_monitor).
ready 09:13:07
d packet_monitor.out
%phx_vos#m16_mas>SysAdmin>Noah_Davids>packet_monitor.out 09-11-13 09:13:17 mst
Noah_Davids.CAC logged in on %phx_vos#m16 at 09-11-13 09:12:42 mst.
packet_monitor -numeric -time_stamp -filter -host 192.168.200.197 -port 6666
***********************************************************
WARNING: failure to specify a specific interface will cause
packet_monitor to bind to ALL interfaces on the module,
greatly increasing the amount of Streams memory used!!!
***********************************************************
dir                                                 icmp type
+     tcp
hh:mm:ss.ttt    len proto source             destination         src port dst p
+ort type
9:12:52.984 T 0004 TCP 172.16.77.128       192.168.200.197           62515
+ 6666 S
9:12:53.067 R 0000 TCP 192.168.200.197     172.16.77.128              6666
+ 62515 RA
9:12:56.643 T 0004 TCP 172.16.77.128       192.168.200.197           62516
+ 6666 S
9:12:56.724 R 0000 TCP 192.168.200.197     172.16.77.128              6666
+ 62516 RA
9:12:58.003 T 0004 TCP 172.16.77.128       192.168.200.197           62517
+ 6666 S
9:12:58.086 R 0000 TCP 192.168.200.197     172.16.77.128              6666
+ 62517 RA
9:12:58.805 T 0004 TCP 172.16.77.128       192.168.200.197           62518
+ 6666 S
9:12:58.887 R 0000 TCP 192.168.200.197     172.16.77.128              6666
+ 62518 RA
ready 09:13:07
Process finished.
Terminating Noah_Davids.CAC (packet_monitor). Process stopped by Noah_Davids.CA
+C.

 

Latency times:   58.887 - 58.805 = 0.082 == 82ms
58.086 - 58.003 = 0.083 == 83ms
56.724 - 56.643 = 0.081 == 81ms
53.067 - 52.984 = 0.083 == 83ms

packet_monitor を使わなくても、私が書いたプログラムを使って接続の時間を計測することもできます。http://members.cox.net/ndav1/self_published/stcp_tping.doc を参照してください。stcp_tping コマンドは、リモートホストのアクティブなポートに接続する必要があります。この場合、私はポート 23 (telnet) を使用していますが、どのアクティブなポートでも動作します。コマンドの最後にある1という数字は、リクエストが1秒に1回送信されることを示しています。

stcp_tping 192.168.200.197 23 1
tping 192.168.200.197 23 1
Success/Tries=Percent    min/average/max success times
1/1=100.000%             83.284/83.284/83.284     Connection in 83.284 ms
2/2=100.000%             81.697/82.490/83.284     Connection in 81.697 ms
3/3=100.000%             80.858/81.946/83.284     Connection in 80.858 ms
4/4=100.000%             80.858/81.895/83.284     Connection in 81.743 ms
^C

 

測定するシステムがない場合、どのようにしてレイテンシを見積もることができるのでしょうか?最も簡単な方法は、同じ地理的エリアにあるシステムを見つけて、そのシステムのレイテンシを測定することです。これにより、非常に大まかな推定値が得られます。私は大学がどこにあるかを知っているので、大学を利用するのが好きです。ウェブサイト http://www.utexas.edu/world/univ/state/には、多くの大学のホームページが州別に掲載されています。ウェブサイト http://www.bulter.nl/universities/は、世界中の大学のウェブサイトを国別に一覧表示しています。企業のVPNを利用して通信する場合と、インターネットを利用して通信する場合では大きな違いがあることを覚えておいてください。

 

どうやって問題を解決するの?おそらくできないでしょう。いくつかのリンクの帯域幅やネットワークデバイスの帯域幅をコントロールできるかもしれませんが、距離をコントロールすることはできません。あなたにできることは、必要なターン数を減らすことで、遅延の影響を受けにくくなるようにアプリケーションを変更することです。

 

OSLを使って大容量のファイルを長距離移動させる場合、私が言えることは、そうしないことです。ファイルの種類によっては、FTP、SFTP、SCP を使うことができるかもしれない。そうでない場合は、Stratus の FTP サイトに tcp_save (ftp://ftp.stratus.com/vos/network/tcp_save.save.evf.gz) というアプリケーションがあり、OSL を使用せずに TCP 経由でファイルを効果的にコピーすることができます。これには多少の設定が必要であるが、大容量ファイルのコピー時間を大幅に短縮することができる。

 

メニューを閉じる

© 2024 Stratus Technologies.