2011-11-15 9 views
3

QuickfixJで処理速度に問題があります。私はthis questionで、300メガバイト/秒を処​​理することが可能であると読んでいます。私はまた、何千もの数字が他の場所で報告されているのを見た。私のQuickfixのセッションコードは、メッセージのリストを受け取り、Sesssion.SendToTarget()によって1つずつ送信します。quickfixj経由で送信するときに修正メッセージを速く処理する方法

私はメッセージを送信するループが遅くなっている可能性がありますが、メッセージのリストを送信したり、これらのメッセージを送信する処理を高速化する方法があるのだろうかと思いました。私が画面にロギングしているため、これが私を遅くしている可能性もあります。私はヘッドレスを実行し、ファイルログだけにログを記録することで利益を得ることができますか?

+0

toApp()メソッドの各ログ行の間に20〜50msの間がかかるように見えるはずです。すべてのtoApp()は、送信メッセージをログに書き込みます。 – robthewolf

+0

300messages/sec - ベンチマークとしてこの数値を使用しないでください。スループットを確認した条件は、あなたとは多分異なる場合があります。 – DumbCoder

+0

これはベンチマークではなく、毎秒2500メガバイト以上の人が他の場所に報告していることがわかりましたので、合理的だと思います。正直言って、私は750と1000の間を望んでいました。私はあなたに答えてくれてうれしく思っています。あなたが300msgs/secを処理したと言うとき、あなたはそれらを送ったか、 – robthewolf

答えて

3

私は、QuickFIX/J処理メッセージが1秒に数千回表示されています。ただし、単一のFIXセッションでその問題を解決するのは難しいでしょう。私が説明しているシナリオには複数のセッションが含まれています。これが重要である理由は、FIXプロトコルがFIXシーケンス番号のためセッションごとに本質的に連続的であるためです。これは事実上、1つのセッションがあれば、1つのスレッドがメッセージを処理することを意味します。複数セッションの場合、エンジンは複数のスレッドとプロセッサを利用できます。

一般に、ファイルI/Oが主要なオーバーヘッドです。ファイルシステムへのアクセスを最適化する方法を探します。ロギングとメモリストアを使用せずにエンジンを実行すると、かなり速いことがわかります。極端な低レイテンシのアプリケーションには使用しませんが、悪くはありません。

0

オーバーヘッドの可能性があるので、ループ内に各メッセージを作成していますか?これは非同期的に行うことができ、メッセージは完了時に送信されます。送信時間が最小限に抑えられるようにするには、ログを書き込むときに正確な時刻データをログスレッドに送信するようにしてください。

1

画面にログインすると、非常に遅くなります。画面にログオンすると、毎秒30〜40件のメッセージが作成され、400以上のログを記録しているので、画面には何も表示されません。 また、プロセスの遅い部分はアクセプタからの回答です。イニシエータは1秒間に2000を超えるメッセージを送信しますが、アクセプタの応答によってプロセス全体が遅くなります。

+0

このヒントをお寄せいただきありがとうございます。しかし、私はどこかにログを記録しなければなりません、確かにファイルにロギングするのはちょっと遅いのですか? – robthewolf

+0

QuickFixはそれ自身でログオンします。独自のログを追加したい場合は、メッセージの時間を計算する他の方法を考えて、ログが有効にならないようにすることができます。たとえば、1000個のメッセージを注文すると、計算してログにすべてを書き込んだり(一時停止したタイマーで)、タイマーを再開してさらに1000個のメッセージを送信することができます。私はあなたが私が意味することを理解することを願っています: – Jordan

+0

一般的なログインのために、私はファイルと今すぐ画面にログインすることを考慮してください。私がまだファイルにロギングしている場合、画面へのロギングを削除するとスピードに影響はありますか? – robthewolf

関連する問題