This is one of the few cryptocurrency exchanges offering co-location (more details can be found here). Internal processing latency of Roq Trading Solutions may therefore become relevant.
We will therefore demonstrate some key latency metrics relevant to the performance of the gateway.
All Roq gateways support live monitoring of performance metrics, including latency distributions. However, it is important to understand that a synthetic test will often not show the tail distributions that you will find for your actual product system. The distribution is often influenced by secondary effects, e.g. process scheduling, hyper-threading, SIMD, frequency scaling, interrupts, etc. Suffice to say, benchmark tools and access to profiling metrics are built-in features of all Roq Trading Solutions. We encourage you to run your own tests, on your own hardware, using your own kernel configuration.
We test two different configurations:
Gateway will try to reduce I/O polling and is allowed to yield CPU.
Gateway will aggressively poll I/O and never yield CPU.
The system is generally configured for low latency using
The kernel command-line will have e.g.
isolcpus=1-6to exclude some cores from general process scheduling.
Hyper-threading is disabled at the BIOS level.
1# flagfile for the roq-deribit gateway 2 3--loop_cpu_affinity=1 4--loop_sleep=500ns 5--loop_timer_freq=2500ns
(*) All measurements in nanoseconds.
The table columns are
[CPU] Name of the processor.
[event] Gateway processing a Market Data Incremental Refresh FIX message. This includes
decode the FIX message,
apply the changes to a cached version of the full order book, and
encode the update message for shared memory using our native format.
The gateway subscribes all symbols from the exchange and runs for approximately 10-15 minutes.
[decode_1] Decode a typical Market Data Incremental Refresh FIX message with 1 level updating.
[decode_5] Decode a typical Market Data Incremental Refresh FIX message with 5 levels updating.
[threads/core] Hyper-threading could be enabled (number > 1).
isolcpus] The Linux kernel will by default allow scheduling on all cores.
[PassMark] The PassMark single-threaded score.