2012-03-30 14 views
21

Javaで仮想的なHFTシステムを想像してみましょう。短いレイテンシを必要とし、不変性(Scala?)、数千の接続イベントドリブンアーキテクチャー(akkaとamqp?)で回遊している奇妙な数のメッセージが含まれています。Scala/Akkaを使用したJVMでの高頻度取引

JVM 7のチューニングには、(仮想的に)最適なものは何でしょうか?どのようなコードで幸せになれますか? ScalaとAkkaはこの種のシステムに対応できるでしょうか?

注:このoneのように、いくつかの同様の質問がありましたが、私は(JVMに独自の特異なフットプリントを持っている)1カバースカラ座を見つけるしたことはありません。

+3

また、JVMが適切な選択肢である場合は疑問が生じますか?たぶんC++は予測可能なレイテンシを提供するでしょう。 – usr

+0

実際のHFTを行っているCコードを生成するために使用されたScalaについて聞いたことがありますが、詳細は思い出せません。リンクされた質問に記載された1〜3秒がHFTには多すぎるので、JFTにHFTソフトウェアを書くのは良い考えではないと思います。 –

+1

質問は一般的な方法です。 – moodywoody

答えて

26

私のラップトップでは、Akka 2.3.7アクター間のpingメッセージの平均待ち時間は~300nsであり、JVMのGC休止のために予想される待ち時間よりもはるかに短いです。

コード(JVMオプションを含む)& Intel Core i7-2640M here上のAkkaおよび他の俳優のテスト結果。

P.S. Dmitry VyukovのsiteとMartin Thompsonのblogでは、低遅延コンピューティングのための多くの原則とヒントを見つけることができます。

+2

FYIでは、この改善は現在解決されており、JDK 7の新しいリリースの一部です。 –

+0

注:平均遅延は実際にはスループットの逆数に過ぎません。メッセージが送信されたときに送信されるべきときに基づいて、待ち時間の分布を知りたいとします。つまり、座標の省略を避けたいとします。 http://www.azulsystems.com/sites/default/files/images/HowNotToMeasureLatency_LLSummit_NYC_12Nov2013.pdf –

+0

1 /レイテンシ=スループットという誤解を避けるため、タイプセーフなブログのスループットテストへの参照を削除しました。 –

34

Javaで非常に優れたパフォーマンスを達成することは可能です。しかし、信頼できる答えを提供するためには、より具体的な質問が必要です。潜伏のあなたの主な発生源は、非網羅的リストをたどるから来る:

  1. どのくらいのゴミを作成、収集し それを促進するためにGCの仕事。私の経験では不変のデザインは、遅い待ち時間の にはうまく適合しません。 GCチューニングは大きな焦点になる必要があります。

  2. クラスがロードされるようにJVMをウォームアップし、JITには作業を行うには の時間が必要です。

  3. アルゴリズムをO(1)または少なくともO(log2 n)に設計し、 パフォーマンステストを実施するように設計します。

  4. あなたのデザインはロックフリーで、 "Single Writer Principle"に従う必要があります。

  5. スタック全体を理解し、その使用に機械的な同情を示すためにはかなりの努力が必要です。

  6. キャッシュに適したアルゴリズムとデータ構造を設計します。 最近のキャッシュミスが最大のコストです。これは正確に に関連しており、正しく設定されていないと となり、キャッシュの汚染が深刻になります。これには、OSといくつかのJNIコードへの同情が伴う場合もあります。

  7. が必要なスレッドが待機することなくコアを使用できるように、十分なコアがあることを確認してください。

私は最近、そのような練習のcase studyについてブログに書きました。

11

メッセージの受け渡しにリングバッファを使用すると、Akkaの処理が上回ることがあります。人々が金融アプリケーション用にJVM上で使用するメインリングバッファの実装は、JVM(GCなし、ロックなし)と最新のCPU(効率的に2倍のサイズ)のために慎重にチューニングされたDisruptorと呼ばれます。キャッシュライン)。

ここにはScalaの視点http://scala-phase.org/talks/jamie-allen-sdisruptor/index.html#1からのイントロのプレゼンテーションがあり、最後のスライドには元のLMAXのものとのリンクがあります。

+0

非常に興味深い!共有していただきありがとうございます。 –

関連する問題