Latest codec comparison
25 adapters. Checked numeric field work.
The corrected 3 October microbenchmark campaign passes 25 normal runs and 320 isolated text/numeric probes. C++, Java and Rust each have five-engine CDFs; .NET has four measured peers and Go one. llfix has encoder results only, not receive-parser or full-session results.
Retained transport reference
A passing reference is not a new competitor campaign.
The charts below use retained open-loop v4 results dated 20 September 2026. Newer tests refresh the admission roster, but do not yet supply a replacement matched, passing five-engine physical-link campaign. Rates, hosts, functional smokes and qualified latency runs are kept separate.
Each measured cell used three 30-second windows after warm-up. The workload is NewOrderSingle → acknowledgement. Response time starts at the intended send slot and includes scheduling delay. Transport paths are separate selections, never each engine’s cherry-picked best path.
CDFs connect recorded percentile anchors, not raw empirical samples. Missing targets show no latency. Read the timing contract →
HP · kernel TCP · single session · 50,000 requests/s · retained NOS/ER reference.
Workload and measurement points
What does each test measure?
Expand a scenario to follow the FIX messages, locate t0/t1, and inspect a complete captured example for every leg. The shaded interval is timed; grey dashed work is excluded. These diagrams explain the tests, not their performance.
Swipe diagrams horizontally on a small screen, or open them at full size.
What this test measures: Order → acknowledgementnos_er · D → 8 · Client clock
Client clock: t1 − t0. Both timestamps belong to one endpoint; synchronized host clocks are not required.
- t0 · start
- Published transport reference: the intended send slot, before any scheduling delay. Canonical actual-start tests: immediately before order construction and the engine-specific send call.
- t1 · stop
- After the client parses the derived acknowledgement and completes the required business-field extraction and checks.
- Included
- Client order construction/send, both endpoints, the network, server order processing and acknowledgement construction, then client reply processing. The displayed open-loop reference also includes scheduler delay.
- Excluded
- Session establishment and warm-up are outside the headline samples. An acknowledgement is not a trade fill.
Compare the canonical actual-start boundary
Canonical nos_er starts immediately before construction/send, not at the intended schedule slot. Scheduling delay is a separate probe. Do not mix that service-time distribution with the displayed open-loop reference.
Captured sample FIX messages
One complete, correlated chain from the synthetic QuickFIX/C++ functional audit. These are actual captured bytes illustrating the current canonical wire shape, not messages from the older transport campaign or measured latency samples.
The acknowledgement echoes order 11=1, symbol LCOM1, buy side, quantity 1000 and price 10000.00000. ExecType 150=0 and OrdStatus 39=0 mean New: CumQty is 0, LeavesQty is 1000 and AvgPx is 0. No LastQty/LastPx fill fields are present.
| represents SOH (ASCII 0x01). Remove display line breaks and restore SOH to recover the exact message, including valid BodyLength (9) and CheckSum (10). FIX SendingTime (52) is a wall-clock field, not the monotonic measurement clock: do not subtract these timestamps to estimate latency. Tag 60 retains the fixed July fixture time.
Download the original synthetic wire capture → · Download all checked examples and source hashes →
What this test measures: Market-data request → full bookmd · V → W · Client clock
Client clock: t1 − t0. Both timestamps belong to one endpoint; synchronized host clocks are not required.
- t0 · start
- Immediately before constructing and sending the market-data request, at actual task start.
- t1 · stop
- After the client parses the full snapshot and completes the required book-field extraction and checks.
- Included
- Request construction/send, server request parsing and book construction, both network legs, and client parsing/checking of the ten-level snapshot.
- Excluded
- Session establishment and warm-up. No order submission or ExecutionReport leg belongs to this test.
This diagram explains the canonical actual-start test. It does not assert that a matching passing distribution is available for the current chart selection.
Captured sample FIX messages
One complete, correlated chain from the synthetic QuickFIX/C++ functional audit. These are actual captured bytes illustrating the current canonical wire shape, not messages from the older transport campaign or measured latency samples.
Request 262=1 asks for 264=10 levels and both bid/offer types. Its snapshot echoes the request ID and symbol; 268=20 counts twenty entries, not twenty levels. The complete wire example includes all ten bid/offer pairs in order.
| represents SOH (ASCII 0x01). Remove display line breaks and restore SOH to recover the exact message, including valid BodyLength (9) and CheckSum (10). FIX SendingTime (52) is a wall-clock field, not the monotonic measurement clock: do not subtract these timestamps to estimate latency. Tag 60 retains the fixed July fixture time.
Download the original synthetic wire capture → · Download all checked examples and source hashes →
What this test measures: Book → derived order → acknowledgementmd_nos_er · V → W → D → 8 · Client clock
Client clock: t1 − t0. Both timestamps belong to one endpoint; synchronized host clocks are not required.
- t0 · start
- Immediately before constructing and sending the market-data request, at actual task start.
- t1 · stop
- After parsing the final acknowledgement and completing the required report checks.
- Included
- Both request/reply legs, full-book parsing/checks, client-side order derivation from the received book, order construction/send and final acknowledgement processing. One interval covers the entire chain.
- Excluded
- Session establishment and warm-up. A prebuilt constant reaction order is not a valid substitute for deriving it from the parsed snapshot.
This diagram explains the canonical actual-start test. It does not assert that a matching passing distribution is available for the current chart selection.
Captured sample FIX messages
One complete, correlated chain from the synthetic QuickFIX/C++ functional audit. These are actual captured bytes illustrating the current canonical wire shape, not messages from the older transport campaign or measured latency samples.
The received marker 262=1 is odd, so the client derives a buy (54=1). It uses the parsed best ask 10001.00000 for 44 and the ask size 1000 for 38 (within the lot/cap bounds). Order 11=1 carries the same marker; the final acknowledgement echoes these derived values.
| represents SOH (ASCII 0x01). Remove display line breaks and restore SOH to recover the exact message, including valid BodyLength (9) and CheckSum (10). FIX SendingTime (52) is a wall-clock field, not the monotonic measurement clock: do not subtract these timestamps to estimate latency. Tag 60 retains the fixed July fixture time.
Download the original synthetic wire capture → · Download all checked examples and source hashes →
What this test measures: Completed tick → reaction-order arrivaltick_to_trade · W → D · Feed/server clock
Feed/server clock: t1 − t0. Both timestamps belong to one endpoint; synchronized host clocks are not required.
- t0 · start
- Immediately before sending the completed top-of-book tick. Constructing and finalising W happens before this timestamp.
- t1 · stop
- The first instruction of the feed-side application callback after the engine frames/parses the returning order, before benchmark-side marker/extraction checks.
- Included
- Tick send, both network legs, client tick parsing, decision and order derivation/construction/send, and feed-side engine delivery of the returning order.
- Excluded
- Tick construction and finalisation, then post-t1 marker matching and benchmark extraction checks. Those checks can still invalidate the result. There is no acknowledgement/fill leg.
This diagram explains the canonical actual-start test. It does not assert that a matching passing distribution is available for the current chart selection.
Captured sample FIX messages
One complete, correlated chain from the synthetic QuickFIX/C++ functional audit. These are actual captured bytes illustrating the current canonical wire shape, not messages from the older transport campaign or measured latency samples.
The tick is top-of-book only: 268=2, one bid and one offer. Marker 262=1 produces buy order 11=1 at the parsed ask 10001.00000 for quantity 1000. No 35=8 is sent in the headline tick-to-trade workflow.
| represents SOH (ASCII 0x01). Remove display line breaks and restore SOH to recover the exact message, including valid BodyLength (9) and CheckSum (10). FIX SendingTime (52) is a wall-clock field, not the monotonic measurement clock: do not subtract these timestamps to estimate latency. Tag 60 retains the fixed July fixture time.
Download the original synthetic wire capture → · Download all checked examples and source hashes →
Read the complete canonical scenario contract → · Codec operation diagrams and all nine microbenchmark tests →
Comparison by language
C++ and C
Latest codec CDF · 3 October 2026
NewOrderSingle · checked parse and extract · nanoseconds/operation · 32-operation batch averages. This fixed codec chart does not change with the full-session selectors. It excludes networking and session state.
Full C++ and C codec table and all nine test selections →
Retained full-session CDF · 20 September 2026
Read selected workflow: order → acknowledgement →
| Rank | Engine | p50 (µs) | p99 (µs) | p99.9 (µs) | Evidence |
|---|---|---|---|---|---|
| 1 | LibHFT C++ | 13.577 | 17.935 | 23.523 | Recorded passing transport cell |
| — | quickfix_cpp | No matching admitted distribution | S5 diag 4/4 | ||
| — | nexusfix | No matching admitted distribution | S5 diag 4/4 | ||
| — | fix8 | No matching admitted distribution | S5 diag 4/4 | ||
| — | llfix | No matching admitted distribution | blocked | ||
| — | hffix | No matching admitted distribution | codec only | ||
| — | fixpp | No matching admitted distribution | codec only | ||
| — | robaho_cpp_fix_codec | No matching admitted distribution | codec only | ||
| — | openfix | No matching admitted distribution | blocked | ||
| — | robaho_cpp_fix_engine | No matching admitted distribution | blocked | ||
| — | libtrading | No matching admitted distribution | S5 diag 4/4 | ||
Comparison by language
Java
Latest codec CDF · 3 October 2026
NewOrderSingle · checked parse and extract · nanoseconds/operation · 32-operation batch averages. This fixed codec chart does not change with the full-session selectors. It excludes networking and session state.
Full Java codec table and all nine test selections →
Retained full-session CDF · 20 September 2026
Read selected workflow: order → acknowledgement →
| Rank | Engine | p50 (µs) | p99 (µs) | p99.9 (µs) | Evidence |
|---|---|---|---|---|---|
| 1 | LibHFT Java/JNI | 15.665 | 18.656 | 24.764 | Recorded passing transport cell |
| 2 | LibHFT Java Pure | 17.063 | 18.559 | 20.856 | Recorded passing transport cell |
| — | philadelphia | No matching admitted distribution | S5 pass 4/4 | ||
| — | philadelphia-fast | No matching admitted distribution | S5 pass 4/4 | ||
| — | crossfix | No matching admitted distribution | S5 pass 4/4 | ||
| — | quickfixj | No matching admitted distribution | S5 diag 4/4 | ||
| — | artio | No matching admitted distribution | S5 diag 4/4 | ||
| — | falcon | No matching admitted distribution | S3 smoke 1/4 | ||
Comparison by language
.NET
Latest codec CDF · 3 October 2026
NewOrderSingle · checked parse and extract · nanoseconds/operation · 32-operation batch averages. This fixed codec chart does not change with the full-session selectors. It excludes networking and session state.
Full .NET codec table and all nine test selections →
Retained full-session CDF · 20 September 2026
Read selected workflow: order → acknowledgement →
| Rank | Engine | p50 (µs) | p99 (µs) | p99.9 (µs) | Evidence |
|---|---|---|---|---|---|
| 1 | LibHFT .NET Native | 15.481 | 16.537 | 19.042 | Recorded passing transport cell |
| 2 | LibHFT .NET Pure | 20.794 | 24.811 | 28.828 | Recorded passing transport cell |
| — | quickfix_n | No matching admitted distribution | S5 diag 4/4 | ||
| — | fixantenna_net | No matching admitted distribution | S5 diag 4/4 | ||
Comparison by language
Rust
Latest codec CDF · 3 October 2026
NewOrderSingle · checked parse and extract · nanoseconds/operation · 32-operation batch averages. This fixed codec chart does not change with the full-session selectors. It excludes networking and session state.
Full Rust codec table and all nine test selections →
Retained full-session CDF · 20 September 2026
Read selected workflow: order → acknowledgement →
| Rank | Engine | p50 (µs) | p99 (µs) | p99.9 (µs) | Evidence |
|---|---|---|---|---|---|
| 1 | LibHFT Rust | 14.504 | 15.876 | 18.233 | Recorded passing transport cell |
| — | libhft-rust-native | No matching admitted distribution | parked | ||
| — | dfx | No matching admitted distribution | S5 diag 4/4 | ||
| — | fixer_rs | No matching admitted distribution | S5 diag 4/4 | ||
| — | truefix | No matching admitted distribution | S4 diag 4/4 | ||
| — | nanofix | No matching admitted distribution | S4 diag 4/4 | ||
| — | ferrumfix | No matching admitted distribution | codec only | ||
Comparison by language
Go
Latest codec CDF · 3 October 2026
NewOrderSingle · checked parse and extract · nanoseconds/operation · 32-operation batch averages. This fixed codec chart does not change with the full-session selectors. It excludes networking and session state.
Full Go codec table and all nine test selections →
Retained full-session CDF · 20 September 2026
Read selected workflow: order → acknowledgement →
No matching admitted full-session distribution. The source roster remains visible below; no curve or latency is invented.
| Rank | Engine | p50 (µs) | p99 (µs) | p99.9 (µs) | Evidence |
|---|---|---|---|---|---|
| — | quickfix_go | No matching admitted distribution | S5 diag 4/4 | ||
Read the current test evidence.
Correctness gates, wire captures, ownership checks, prepared clocks and scheduler-delay tests from 2–3 October are retained in the archive. Functional passes are not latency distributions; overloaded, incomplete and non-parity attempts stay out of these curves.