インタラクティブ Q&A · v1.8 · ソースに基づく

エンジン自身に
聞く。

NexusFIX のアーキテクチャ、メッセージ辞書、会場プロファイル、ベンチマークスイートへの会話型インターフェース。 182 個の専門家回答済みの質問 がインデックス化され、ライブコードベースを基にしています。定型回答で足りない時はライブスレッドへ。

182
専門家回答
8
カテゴリ
v1.8
インデックスビルド
< 2
中央応答
NexusFIX エキスパート v1.8
インデックス対象 main@a4f29d1 · 12 分前
NF

こんにちは、NexusFIX エキスパートです。公開ソース、ベンチマーク CSV、本ページにインデックス化された 182 個の厳選回答に基づいています。

右からスレッドを選ぶか、下で何でも質問してください。ソースに答えがなければ、そう言います。

なぜ QuickFIX を使わないか
ゼロ割り当てホットパス
SIMD 解析の解説
どの C++23 機能か
本番準備状況
12:04:18 · インデックス済み
YOU

NexusFIX はどうやってゼロヒープ割り当てを実現していますか?

12:04:31
NF

ホットパス上で 3 つの置き換えを行います:

1. std::span<const char> ビューが元のバッファを直接参照し、std::string コピーを置き換えます。span はスタック上で 16 バイト。ヒープなし、コピーなし、デストラクタなし。

2. 事前インデックス配列が std::map をフィールド検索で置き換えます。フィールドアクセスは FIX タグ番号でインデックスされた単一の mov 命令になります。

3. std::pmr::monotonic_buffer_resource が実際にスロットが必要なものにアリーナ割り当てを提供します。アリーナは事前にサイズ確保され、セッションごとに再利用されます。

結果はホットパス上で 0 回の malloc 呼び出し。すべての alloc/free を計装し、いずれかが発生したらテストを失敗させるカスタムアロケータで検証されています。

計装を見る
アリーナのサイズとオーバーフロー
コールドパス割り当て
12:04:32 · 312 ms · ソース parser/arena.hpp
送信 · ⇧ ↵ 改行ベース main@a4f29d1 · v1.8

よくある質問、 インデックス済み。

ほぼ毎回の会話で出てくる 8 つの質問。展開するにはクリック、または上のライブスレッドへ戻してください。

Q · 001動機なぜ NexusFIX を作ったのですか?なぜ QuickFIX を使わないのですか?+

QuickFIX は 2000 年代初頭、C++98/03 のイディオムを中心に設計されました:仮想ディスパッチ、メッセージごとのヒープ割り当て、文字列ベースのフィールド格納。これらのパターンはサブマイクロ秒のレイテンシと根本的に互換性がありません。

私たちは QuickFIX 設計時に存在しなかった C++23 の機能を使い、第一原理から始めました。std::span、std::expected、std::pmr、コンセプト、consteval。そして問いました:20 年分のアロケータ決定を引きずらずに FIX エンジンを作ったらどうなるか?

ライブスレッドで質問 →
Q · 002対象ユーザーNexusFIX のターゲットは誰ですか?+

決定論的でサブマイクロ秒の FIX メッセージ処理を必要とする量的トレーディング企業とインフラチームです。

具体的には:コロケーション戦略を運用する企業、カスタム取引ゲートウェイを構築するチーム、そして実際の公開コードベースでモダンなパフォーマンス技術を学ぶ C++ エンジニアです。

ライブスレッドで質問 →
Q · 003パフォーマンスNexusFIX はどうやってゼロヒープ割り当てを実現していますか?+

std::span ビューが元のバッファを直接参照し、std::string コピーを置き換えます。事前インデックス配列が std::map を置き換えます。std::pmr::monotonic_buffer_resource がアリーナ割り当てを提供します。

結果:ホットパス上でゼロ malloc 呼び出し。CI ビルドごとに実行されるカスタムアロケータ計装ハーネスで検証されています。

ライブスレッドで質問 →
Q · 004C++23NexusFIX はどの C++23 機能を使っていますか?+

エラー処理用の std::expected(ホットパスに例外なし)、ゼロコピーデータビュー用の std::span、コンパイル時インターフェイス検証用のコンセプト、コンパイル時計算用の consteval、そして [[likely]]/[[unlikely]] 分岐ヒント。

QuickFIX の時代には、これらのそれぞれにカスタム実装が必要でした。

ライブスレッドで質問 →
Q · 005SIMDSIMD 解析はどう動作しますか?+

AVX2 命令が 32 バイトを一度にロードし、ベクトル化比較で SOH (\x01) 区切りを並列に見つけます。これはバイト単位スキャンより約 13 倍高速です。

この技術は simdjson にインスパイアされていますが、FIX プロトコルのセマンティクス用に調整されています。つまり tag=value=SOH 構造により、1 回のベクトル化パスですべてのフィールド境界を特定し、オフセットテーブルを構築できます。

ライブスレッドで質問 →
Q · 006FIXどの FIX バージョンがサポートされていますか?+

FIX 4.4 は完全サポートで、本番環境で最も一般的なバージョンです。FIX 5.0 + FIXT 1.1 も完全サポートで、4.4 に対してオーバーヘッドはわずか 2% です。

構造インデックスはバージョン非依存です。フィールドスキャンはすべての FIX バージョンで同様に動作します。カスタム方言オーバーレイがセッションバインド時に会場固有のタグを処理します。

ライブスレッドで質問 →
Q · 007本番環境NexusFIX は本番環境で使えますか?+

NexusFIX は活発に開発中で、まだ本番取引環境にはデプロイされていません。ベンチマークは CPU ピン留めとキャッシュウォーミングを行った制御された環境からのものです。

本番強化。ソークテスト、障害モードカバレッジ、特定の会場ゲートウェイへの認証。は別のエンジニアリング作業です。本番で検討している場合は、まず私たちと相談してください。

ライブスレッドで質問 →
Q · 008比較NexusFIX は Fix8 と比べてどうですか?+

Fix8(C++11)はオブジェクトプールとゼロコピー技術を使用しており、より成熟したオープン FIX エンジンの 1 つです。

NexusFIX はカスタム実装の代わりに C++23 標準ライブラリ機能(PMR、std::span、std::expected)を活用する点が異なります。監査すべき可動部品が少なくなります。さらに Fix8 にはない SIMD 加速解析を追加しています。

ライブスレッドで質問 →

あなたの質問が インデックスにない?

上のライブスレッドで質問するか、GitHub で issue を開いてください。ソース付きで有用な回答が得られた質問は、次のリリースでインデックスセットに加わります。