2016-04-15 14 views
1

シングルノードで動作するcassandra(v2.1.8)の単純な列ファミリのCAS(比較および設定)更新のサブミリ秒レイテンシを達成しようとしています。我々は、同じマシン上の1つのスレッドから1つの読み取りと1つの書き込みCAS操作(RW)を含む一連のテストを実行し、それらのために最高で約4ミリ秒を見ます。CAS更新のCassandraサブミリ秒レイテンシ

カサンドラプロセスのプロファイルを作成すると、SEPWorkerクラスがスピンウェイトで大部分を費やしていることがわかります。実際のRW操作には時間がかかります。 SEPWorker.doWaitSpinメソッドで使用されているLockSupport.parkNanosメソッドのコードを分析し、いくつかのトレースステートメントを追加しました。平均で約12μsのスリープが予定されていても、呼び出しごとに800μs 。したがって、これは単一のSEPWorkerのタスクのスピン・ウェイトのために待ち時間に平均400μsを追加します。 CAS操作の場合、paxosはこのオーバーヘッドを複数回追加する複数のタスクを実行する必要があることに注意してください。

誰もこのオーバーヘッドを避ける方法を提案できますか?

答えて

0

にパッチを提案する必要があります。残念ながら、任意の正確な時間間隔でスレッドを待機状態にパークすることはできません。あなたができることは、Linuxの割り込みタイマー周波数を最適化しようとすることです。しかし、800μsはすでにかなり応答しているので、私はあなたのユースケースに対して多くのパフォーマンス改善が見られるとは思っていません。また、Paxosはコンセンサスプロトコルとして最小限の往復回数で設計されているわけではなく、このようなマイクロ最適化はこの事実を回避するのに役立つものではありません。

+0

ありがとう@Stefan計算が正しければ、待機中のオーバーヘッドは実際の作業と比較してかなり高いようです。読取りまたは書込みには約50μsかかります。したがって、非パクソス操作の場合でも、レイテンシに約10倍のオーバーヘッドが加わります。
sub-msのレイテンシは、キャッサンドラでは聞こえませんか?私は人々がそれを達成した結果を見つけることができませんでした。 –

+0

少なくともCL ONEの場合は、サブミリ秒レイテンシを確認できるはずです。並行処理の提案された変更については、次のチケットも参照してください。https://issues.apache.org/jira/browse/CASSANDRA-10989 –

+0

Stefanに感謝します。 CassandraがSEDAアーキテクチャから抜け出すと、スケジューリングのオーバーヘッドが減少するはずだと思う。私は純粋なnettyスレッドで作業を行うためにコードを修正することを素直に試みましたが、大きな改善が見られました。とにかく、カサンドラがこれを解決するまで、私たちはカサンドラへの呼び出しを最小限に抑えるためにデザインを変更してレイテンシを緩和しようとします。 –

0

はおそらく、それがスケジューリングスレッドの実行に来るときあなたが記述していることは一般的な問題であるJIRAを作成し、コアカサンドラチーム

+0

ありがとう@doanduyhaiこれは設計上のもので、スケーラビリティのためにトレードオフされているのだろうかと思っていました。例を非同期化する計画があることがわかります。それで、私は彼らがタスクを同期して処理させるのではないかと疑っています。私は事を少し改善することができますcassandra \ jdk \ osのレベルの設定のための任意の推奨事項がある場合でも、私は思っています。 –

関連する問題