Coherenceにはデータグラム・テスト・ユーティリティが付属しており、2台以上のマシン間のネットワーク・パフォーマンスのテストおよびチューニングに利用できます。データグラム・テストは、パケット・パブリッシャ、パケット・リスナーおよびその両方の、3種類のモードのいずれかで動作します。パブリッシャを実行すると、UDPパケットがリスナーに送信され、スループットや成功率などの統計が測定されます。
最大のパフォーマンスを実現するため、これらのテストの結果に基づいて環境をチューニングすることをお薦めします。詳細は、第45章「パフォーマンス・チューニング」を参照してください。
データグラム・テストでは数多くの構成オプションがサポートされていますが、基本的な操作に必要なものはごくわずかです。データグラム・テスト・ユーティリティを実行するには、コマンドラインから次の構文を使用します。
java com.tangosol.net.DatagramTest <command value ...> <addr:port ...>
表44-1は、データグラム・テスト・ユーティリティで利用できるコマンドライン・オプションについて説明しています。
表44-1 データグラム・テスト・ユーティリティのコマンドライン・オプション
| コマンド | 必須/オプション | 適用範囲 | 説明 | デフォルト | 
|---|---|---|---|---|
| -local | オプション | 両方 | バインド先のローカル・アドレス、 | localhost:9999 | 
| -packetSize | オプション | 両方 | 作業対象パケットのサイズ、バイト単位で指定 | 1468 | 
| -processBytes | オプション | 両方 | 処理対象の各パケットのバイト数(4の倍数) | 4 | 
| -rxBufferSize | オプション | リスナー | 受信バッファのサイズ、パケット単位で指定 | 1428 | 
| -txBufferSize | オプション | パブリッシャ | 送信バッファのサイズ、パケット単位で指定 | 16 | 
| -txRate | オプション | パブリッシャ | データ送信の速度、メガバイト単位で指定 | 無制限 | 
| -txIterations | オプション | パブリッシャ | 終了前に公開するパケット数を指定 | 無制限 | 
| -txDurationMs | オプション | パブリッシャ | 終了前に公開する期間を指定 | 無制限 | 
| -reportInterval | オプション | 両方 | レポートを出力する間隔、パケット単位で指定 | 100000 | 
| -tickInterval | オプション | 両方 | ティック・マークを出力する間隔 | 1000 | 
| -log | オプション | リスナー | 測定したパフォーマンスの表形式レポートを保存するファイルの名前 | なし | 
| -logInterval | オプション | リスナー | ログに測定結果を出力する間隔 | 100000 | 
| -polite | オプション | パブリッシャ | パブリッシャが公開を実行する前に、リスナーの接続を待つかどうかを示すスイッチ | オフ | 
| arguments | オプション | パブリッシャ | 空白で区切られた公開先アドレスのリスト、 | なし | 
リスナーのコマンドラインは次のとおりです。
java -server com.tangosol.net.DatagramTest -local box1:9999 -packetSize 1468
パブリッシャのコマンドラインは次のとおりです。
java -server com.tangosol.net.DatagramTest -local box2:9999 -packetSize 1468 box1:9999
使いやすくするため、Coherenceのbinディレクトリにdatagram-test.shおよびdatagram-test.cmdのスクリプトが用意されており、このテストの実行に使用できます。
IPアドレス195.0.0.1のServer AとIPアドレス195.0.0.2のServer Bの2台のサーバー間のネットワーク・パフォーマンスをテストするとします。一方のサーバーがパケット・パブリッシャとして、もう一方がパケット・リスナーとして動作し、パブリッシャは可能なかぎり高速でパケットを送信し、リスナーはパフォーマンス統計を測定してレポートします。まず、Server A上のリスナーを起動します。
[Enter]を押すと、データグラム・テスト・ユーティリティによってパケットの受信準備が完了したと表示されることがわかります。
例44-2 リスナーの起動からの出力
starting listener: at /195.0.0.1:9999
packet size: 1468 bytes
buffer size: 1428 packets
  report on: 100000 packets, 139 MBs
    process: 4 bytes/packet
        log: null
     log on: 139 MBs
前述の部分からわかるように、デフォルトのテストでは1428パケット、つまり約2MBを保持できるだけの大きなネットワーク受信バッファの割当てが試行されます。このバッファを割り当てることができない場合は、エラーがレポートされて終了します。-rxBufferSizeパラメータを使用してリクエストするバッファのサイズを小さくするか、またはオペレーティング・システムのネットワーク・バッファの設定を大きくできます。最高のパフォーマンスを実現するには、オペレーティング・システムのバッファを大きくすることをお薦めします。Coherence向けのオペレーティング・システムのチューニングの詳細は、第33章「本番チェックリスト」を参照してください。
リスナー・プロセスの実行中に、Server Bのパブリッシャを起動して、Server Aに公開するように指示できます。
[Enter]を押すと、Server B上の新しいデータグラム・テスト・インスタンスでリスナーとパブリッシャの両方が起動されることを確認できます。この構成では、Server Bのリスナーが使用されないことに注意してください。例44-4に示す出力が、Server Bのコマンド・ウィンドウに表示されます。
例44-4 データグラム・テスト: サーバーでのリスナーとパブリッシャの起動
starting listener: at /195.0.0.2:9999
packet size: 1468 bytes
buffer size: 1428 packets
  report on: 100000 packets, 139 MBs
    process: 4 bytes/packet
        log: null
     log on: 139 MBs
starting publisher: at /195.0.0.2:9999 sending to servera/195.0.0.1:9999
packet size: 1468 bytes
buffer size: 16 packets
  report on: 100000 packets, 139 MBs
    process: 4 bytes/packet
      peers: 1
       rate: no limit
no packet burst limit
oooooooooOoooooooooOoooooooooOoooooooooOoooooooooOoooooooooOoooooooooOoooooooooO
データがネットワーク上に出力(Output)されると、一連のoとOのティック・マークが表示されます。oはそれぞれ1000パケットを表し、10,000パケットごとにOのインジケータが表示されます。
Server Aでは、これに対応してネットワーク入力(Input)を表すiとIのティック・マークのセットが表示されます。これは、2つのテスト・インスタンスが通信していることを示します。
テストのそれぞれの側(パブリッシャとリスナー)から定期的にパフォーマンス統計がレポートされます。
パブリッシャでは、ネットワーク上にデータを公開する速度のみがレポートされます。通常のレポートは次のようになります。
例44-5 パブリッシャ・レポートのサンプル
Tx summary 1 peers:
   life: 97 MB/sec, 69642 packets/sec
    now: 98 MB/sec, 69735 packets/sec
このレポートには、現在の送信速度(前回のレポート以降)と存続期間の送信速度の両方が記載されます。
表44-2は、リスナーでレポートできる統計について説明しています。
表44-2 リスナーの統計
| 要素 | 説明 | 
|---|---|
| Elapsed | レポート対象の時間間隔 | 
| Packet size | 受信したパケットのサイズ | 
| Throughput | パケットの受信速度 | 
| Received | 受信したパケット数 | 
| Missing | 失われていることが検出されたパケットの数 | 
| Success rate | 合計送信パケット数に対する受信パケット数の割合 | 
| Out of order | 着信順序が乱れているパケットの数 | 
| Average offset | パケットの着信順序の乱れの程度を示すインジケータ | 
パブリッシャの場合と同様、現在と存続期間の両方の統計がレポートされます。例44-6に一般的なレポートを示します。
例44-6 存続期間の統計のサンプル
Lifetime:
Rx from publisher: /195.0.0.2:9999
             elapsed: 8770ms
         packet size: 1468
          throughput: 96 MB/sec
                      68415 packets/sec
            received: 600000 of 611400
             missing: 11400
        success rate: 0.9813543
        out of order: 2
          avg offset: 1
Now:
Rx from publisher: /195.0.0.2:9999
             elapsed: 1431ms
         packet size: 1468
          throughput: 98 MB/sec
                      69881 packets/sec
            received: 100000 of 100000
             missing: 0
        success rate: 1.0
        out of order: 0
          avg offset: 0
特に重要な項目は、スループットと成功率です。目標は、成功率を可能なかぎり1.0近くに維持しながら、最高のスループットを見つけることです。100MBのネットワーク設定では、約10MB/秒の速度を達成する必要があります。1GBのネットワークでは、約100MB/秒の速度を達成する必要があります。これらの速度を達成するには、多くの場合チューニング(後述)が必要になります。
-txRate Mパラメータを組み込むことによって、テストのパブリッシャ側で、メガバイト/秒(MB/秒)単位のデータ速度を指定して速度を調整できます。Mは、テストでネットワークに設定される最大MB/秒を表します。
このテストは、両方のサーバーがパブリッシャとリスナーの機能を果たす双方向モードでも実行できます。これは、テスト・インスタンスを再起動して、Server AのインスタンスにServer Bのアドレスを指定し、Server A上で例44-7のコマンドを実行するのみで実行できます。
次に、Server B上で前述のコマンドを実行します。-politeパラメータを使用すると、このテスト・インスタンスに対し、データの受信を開始するまで公開を開始しないように指示されます。
3台以上のマシンをテストに使用することもできます。たとえば、1つのリスナーをターゲットとするパブリッシャを2つ設定できます。この形式のテストは単純な1対1のテストと比較してはるかに現実的で、他の方法では確認できないネットワークのボトルネックを特定できる場合があります。
4台のマシンによるクラスタを構成すると想定した場合、次のように、これらのマシンすべてでデータグラム・テストを実行できます。
Server A上:
datagramtest.sh -txRate 100 -polite serverb serverc serverd
Server B上:
datagramtest.sh -txRate 100 -polite servera serverc serverd
Server C上:
datagramtest.sh -txRate 100 -polite servera serverb serverd
Server D上:
datagramtest.sh -txRate 100 servera serverb serverc
このテスト・シーケンスでは、すべてのノードは他のすべてのノードに、1秒当たりで合計100MBを送信します(1ノード当たり33MB/秒に相当)。完全にスイッチが設定された1GbEネットワークでは、パケットを失うことなくこれを達成できる必要があります。
テストの実行を簡略化するために、すべてのノードは同一のターゲット・リストを使用して起動できます。自己への送信も行われることになりますが、このループバック・データは容易に除外できます。最後のノードが起動されるまで他のすべてのノードが遅延するため、最後のノードを除くすべてのノードは、-politeスイッチを使用して起動することが重要です。