Каковы минимальные возможные задержки для механизма FIX для отправки сообщения FIX от клиента к серверу?

Я создаю движок FIX на C ++, но у меня нет ссылки, чтобы узнать, что можно считать хорошим показателем производительности. Принимая во внимание время сети и время разбора FIX, каково было бы хорошее время в микросекундах для отправки клиентом сообщения FIX на сервер? Также кто-нибудь знает текущие минимально возможные задержки, ожидаемые для этого простого FIX-сообщение-из-клиент-сервер операция?

6

Решение

Это будет зависеть от того, насколько быстро ваш движок FIX может анализировать байты в FixMessage объект и, что более важно, о том, как быстро ваш сетевой код. Вы тоже пишете сетевой стек? Написание движка FIX выглядит просто снаружи, но на самом деле это сложная задача со слишком большим количеством угловых случаев и функций, которые вы должны охватить. Вы собираетесь поддержать ретрансляцию? Асинхронный аудит-логирование? FIX таймеры сессии? Повторяющиеся группы внутри повторяющихся групп? Вам следует рассмотреть возможность использования открытого или коммерческого движка FIX.

Что касается задержек, которые вы должны ожидать, я не знаю ни о каком механизме FIX, который может опускаться ниже 4,5 микросекунд. Это одностороннее общее время, чтобы написать FixMessage возражать против ByteBufferПередача ByteBuffer по сети на сервер, затем сервер читает ByteBuffer из сети и анализирует его обратно FixMessage объект. Если вы используете механизм снижения FIX, узким местом будет сетевой ввод-вывод, а не разбор FIX.

Чтобы дать вам некоторые цифры, вот эталон для CoralFIX, который является движком FIX, написанным на Java. Если вы можете пойти ниже этого, пожалуйста, дайте мне знать 🙂

Messages: 1,800,000 (one-way)
Avg Time:         4.774 micros
Min Time:         4.535 micros
Max Time:        69.516 micros
75%     =   [avg: 4.712 micros, max:  4.774 micros]
90%     =   [avg: 4.726 micros, max:  4.825 micros]
99%     =   [avg: 4.761 micros, max:  5.46  micros]
99.9%   =   [avg: 4.769 micros, max:  7.07  micros]
99.99%  =   [avg: 4.772 micros, max:  9.481 micros]
99.999% =   [avg: 4.773 micros, max: 24.017 micros]

отказЯ один из разработчиков CoralFIX.

4

Другие решения

Ганнибал анте портас! . . . не теряйте времени на оптимизацию в неположенном месте

Для принципиально низких достижимых чисел не забудь проверить ASIC / FPGA — основанные на FIX-протоколе решения. Любая последовательная / параллельная последовательная обработка имеет трудные времена, чтобы стать быстрее, чем решение с параллельным кремниевым двигателем.

Можно достичь не намного глубже, чем о 25 ns разрешение по измерению на основе кода aStopwatch.start();callProcessUnderTest();aStopwatch.stop() но реальные проблемы и проблемы находятся где-то еще.

Чтобы иметь некоторое сравнение по этому вопросу, 20 ns задержка составляет всего 5 м AOC / активных оптических кабелей в межсоединениях 120 Гбит / с в колокейшн-центрах / кластерах HPC.

0: Определите СПРАВОЧНЫЕ ТОЧКИ: избегайте сравнения апельсинов с яблоками

Настройка производительности и минимизация задержки являются одновременно захватывающими и замечательными усилиями.

На первый взгляд, спрашивая мир о «Наименьшем возможном» что-нибудь«звучит привлекательно, если не сексуально, как это часто слышно в недавних СМИ, однако любая серьезная попытка ответить на сказанное «Самый низкий возможный» трудно без надлежащего ухода, потраченного на устранение неоднозначности проблемы (если даже не демистификация (особенно во избежание сгенерированных MAR / COM обещаний получить Ответы до того, как кто-то спросит / Instant Kharma / Eternal Heaven и др., вы знаете их достаточно хорошо, чтобы упоминать их больше)).

Под солнцем нет ничего нового, что именно по этой причине МСЭ-Т / МСЭ-R и более поздние IETF приложили огромные усилия для систематической заботы об определении спецификаций, чтобы избежать любого потенциального недопонимания, тем меньше неправильных толкований (будь то в определения стандартов или процедур приемочного тестирования или спецификации минимальных эксплуатационных характеристик, которым должен соответствовать продукт / услуга, чтобы они были полностью совместимыми).

Так прежде чем принимать любую фигуру, будь то в [мс], [нас] или [нс], быть конечно есть ли у всех нас та же справочная установка System-Under-TЕсть и быть дважды уверил для которых две опорные точки [FROM]-[TO] представленная цифра была фактически измерена.


1: Определить сценарий теста (включая сообщение протокола FIX) Сквозной конец

________________________________________________________________________
+0 [us]-[__BaseLINE__] a decision to send anything is made @ <localhost>
|
|- <localhost> process wishes to request
|                                a FIX-MarketData
|                                Streaming Updates
|                                for a single item EURCHF
|                                during LON session opening time
|
|- <localhost> process wishes to request
|                                a FIX-MarketData
|                                Single FullRefresh
|                                for an itemset of:
|                                { EURUSD, GBPUSD, USDJPY,
|                                  AUDUSD, USDCAD, USDCHF }
|                                during LON session opening time
|
+  [us]-o======< REFERENCE POINT[A] >===================================
|
|- transfer all DATA to a formatting / assembly process-entity
|
+  [us]-o======< REFERENCE POINT[B] >===================================
|
|- completed a FIX-message payload to be sent
|
+  [us]-o======< REFERENCE POINT[C] >===================================
|
|- completed a FIX-message Header/Trailer/CRC to dispatch
|
+  [us]-o======< REFERENCE POINT[D] >===================================
|
|- inlined SSH/DES/AES cryptor communication service processing
|
+  [us]-o======< REFERENCE POINT[E] >===================================
|
|- L3/2 transport service protocol SAR / PMD
|
+  [us]-o======< REFERENCE POINT[F] >===================================
|
|- L2/1 PHY-device wire-on/off-load process ( NIC / FPGA )-engine
|
+  [us]-o======< REFERENCE POINT[G] >===================================
|
|- E2E transport xmit/delivery processing / latency
|
+  [us]-o======< REFERENCE POINT[H] >===================================
|
|- L1/2 PHY-device on "receiving"-side wire-on/off-load process
|
+  [us]-o======< REFERENCE POINT[I] >===================================
|
|- L2/3 transport recv/handshaking processing / latency
|
+  [us]-o======< REFERENCE POINT[J] >===================================
|
|- inlined SSH/DES/AES decryptor processing
|
+  [us]-o======< REFERENCE POINT[K] >===================================
|
|- incoming FIX-message Header/Trailer/CRC check-in
|
+  [us]-o======< REFERENCE POINT[L] >===================================
|
|- authentication / FIX-Protocol message-counter cross-validation
|
+  [us]-o======< REFERENCE POINT[M] >===================================
|
|- FIX-message requested service content de-mapping
|
+  [us]-o======< REFERENCE POINT[N] >===================================
|
|- FIX-message requested service execution / handling
|
+  [us]-o======< REFERENCE POINT[O] >===================================
|
|- FIX-message requested service response pre-processing / assy
|
+  [us]-o======< REFERENCE POINT[P] >===================================
|
[__FinishLINE__] Ready To Send anything back to <localhost>
|
+  [us]-o======< REFERENCE POINT[Q] >===================================
________|_______________________________________________________________

: SUBTOTAL BEFORE A REQUESTED SERVICE'S RESPONSE-DELIVERY STARTS
________________________________________________________________________

В качестве вдохновения попытайтесь представить что-то похожее на единую структуру отчетов о задержках для всех поставщиков (или для ваших внутренних разработчиков / команд тестирования проекта), как этот пример.


2. Определите ПОЛНЫЙ КОНТЕКСТ (включая когда / какие фоновые параллельные действия (рабочая нагрузка / шум) вы тестируете)

2

Если вам нужны минимальные задержки, клиент FIX и сервер FIX должны находиться на одном сервере, даже в одном приложении, используя решение IPC, такое как разрушитель

0

Я присутствовал на презентации Сингапурской фондовой биржи несколько лет назад. Они недавно приобрели платформу Nasdaq OMX и заявили, что наименьшее время совпадения составило около 8 микросекунд, если сообщения отправлялись по собственному протоколу. Затем они сказали, что поддерживают FIX, что приведет к 2-3 микросекундам сверх времени сопоставления …

Я полагаю, вы можете использовать это число 2-3 микросекунды как своего рода минимальные накладные расходы FIX, которых может достичь биржа, претендующая на самый быстрый результат 🙂

0
По вопросам рекламы [email protected]