2009-08-05 19 views
18

セットアップは次のとおりです。システムは個別のメッセージ(通常、メッセージあたり32-128バイトの間)を含む一連のデータを受信して​​います。処理パイプラインの一環として、各メッセージは物理的に別々の2つのアプリケーションを通過し、低レイテンシーのアプローチ(UDPによるメッセージングなど)またはRDMAを使用してデータを交換し、最後に同じメカニズムを介してクライアントに送信します。低レイテンシ環境でのレイテンシの測定方法を教えてください。

ワイヤプロトコル解析などの任意のレベルで自分自身を注入できると仮定すると、システムの待ち時間を測定するために使用するツールやテクニックは何でしょうか。その一環として、システムに配信されるすべてのメッセージが対応する(ただし同等ではありませんが)メッセージがシステムを介してプッシュされ、クライアントに配信されると仮定しています。

このような市場で私が見た唯一のツールはTS-Associates TipOffです。適切なアクセスをすれば、ワイヤ解析ツール(ala wireshark)と右の解剖学的ツールを使用して同じ情報を測定することができますが、これは正しいアプローチですか、それとも私が使用できる商品ソリューションですか?

+0

プログラミングに関連したものではなく、おそらくserverfaultの方が良いかもしれませんが、それでも非常に興味深いものです。 – Cheeso

答えて

9

最後の段落は、実行する必要がある典型的な方法です。 (市場データのための、少なくとも私の知る限り(ウォールストリート)レイテンシー)は、この分野における通常の容疑者です:

  • TSA(TSアソシエイツ)
  • Correlix
  • Corvil
  • Napatech(ハードウェアキャプチャデバイス)
  • Endace(ハードウェアキャプチャデバイス)

最近、VCの資金によって焼か別ひどく実行して会社を4百万円(でした?)。

直接交換フィードまたはRMDSやプロトコルを変更する他のサーバーで処理されるデータの場合、メッセージを相関させるためにペイロードを解析できる必要があります。時にはデータベンダーがメッセージ定義を公開しないことがあるので、難しいことがあります。

タイムスタンプ付きのペイロード情報を挿入するハードウェアデバイスがあり、クライアントがこれらを見ることができると思います。もちろん、別のポスターが指摘するように、時間の問題は非常に重要です。すべてのデバイスとクライアントは、同じ基準点を持つ必要があります。それは正確でなければなりません...

最後に私がTSAと話したとき、4つの観測点を使ったインストールは$ 150kのオーダーでした。私は上記の他のものは価格が似ていると思う。

上記のハードウェアカードは、(裸のボーンカードの場合)約$ 2kから始まり、そこから(かなり)上に上がります。

ソフトウェアで実行するには、pcap(または同様のもの)を使用しているクライアントを用意し、ペイロードを見て一致させる必要があります。場合によっては、これを確定的にすることは困難です。特に、「セッション」の開始時や、メッセージが1つのパイプから欠落している場合は特にそうです。通常、何らかのしきい値と一致しない場合は、それをドロップします。

編集: 免責事項: 私はこのベンチャーにも参加しており、これを開示する必要があります。

+0

++ TipOffは一度細かく調整されています。未処理のキャプチャを使用して自分で処理することはできますが、ハードウェアによってデータを取得してタイムスタンプを付けるのがはるかに簡単になります。初期段階を経ると自動的に何かをしていることが素晴らしいです。 – ShuggyCoUk

0

これを行う際の問題は、空間の「スピード」を測定することとまったく同じです。何に対して相対的な待ち時間を尋ねる必要がありますか?ワイヤで測定しようとすると、スイッチングまたは受信側のプロトコルスタックで余分なレイテンシが失われます。コンピュータは2つの異なるクロックを持っているので、実際にはそれを測定することはできません。小さなエラーを導入しなくても和解することはほとんど不可能です(お互いに漂っています)。

唯一のアプローチあなたが受け取ったことを認めているメッセージがあると仮定して、往復の待ち時間を測定することは本当に希望があります。 UDPはスタックにACKを持っていないので、アプリケーションのどこかにコード化する必要があります。あなたがしているのは、送信されるメッセージと応答が現れるまでの時間を測定するために、x86のhigh-resolution timerのようなものを使用することです。

+0

私は彼が2つのポイント間で待ち時間を望んでいると思う。この値が変わると、光の速度に関係しないものになります。これは、トランスポートのボトルネックに関連しています。 – Tim

+0

私はあなたが往復の待ち時間であることを望む唯一のアプローチを言っているときに何を意味するのか理解していません。あなたは精緻化できますか? – Tim

+0

申し訳ありません。時々、私は私と同じことをしている私の同僚に話しているように話し、私が何を言及しているのか知っています。私はちょっとそれをクリアするかもしれない最後にsenteceを追加しました。 –

4

A recent paper(ハードウェアベースのソリューションよりもずっと安いでしょう)。クロックスキューをかなり正確に考慮する方法もあります。私が真剣に一方向のレイテンシ測定研究(数年前)を真剣に検討したとき、最も正確なテクニックは、Sue Moon(参考文献コードを便利に利用できるhere)のlinear programming algorithmでしたが、かなり近代的な線形プログラミング技術オンラインアルゴリズムとして行うことはかなり実用的ではありません。 1日を通して定期的に計算をせずにタイムスタンプを記録し、その後、蓄積されたデータに対してLPアルゴリズムを実行するだけです。 (Vern Paxsonによるseminal paperを含む)オンラインでやるのに十分速い他のいくつかのテクニックがありましたが、それはずっと正確ではありませんでした。

1

メッセージごとにさらに多くのバイトがあなたのために過剰なものにならない場合は、完全なタイムスタンプ(64ビット)とすべてのホップにエントリ/タイムスタンプデルタを残すメッセージをスタンプすることをお勧めします)。双方向フローを分析することで、ボックス間のクロックスキューを把握し、検討やモニタリングツールへの公開のための完全なリアルタイムのレイテンシ情報を得ることができます。

+1

このタイプの環境では、何度もメッセージの内容を制御することができません。つまり、情報を挿入するだけでは意味がありません。一部のエクスチェンジはタイムスタンプをメッセージに入れていますが、私はあなたがそれを信じることはできないと確信しています。また、正確なクロック同期に依存することにも注意してください。また - "...双方向フローを分析する..."と思うのは簡単ではありません。 – Tim

+0

「双方向フローを分析する」は、ビルトインハートビートの一部とすることができます。メッセージを変更することはできませんが、ストリーム内でメッセージを確実に識別できる場合は、ダンプ生成のために各ホップでsnoop/tcpdumpを使用してから、一致するメッセージを特定してタイミングデルタを計算するために – bobah

関連する問題