By default, a feed engine assigns the timestamp to the incoming multicast packet] as soon as it is received. The application code can use this timestamp to measure the latency of market data processing by the handler.
The handler also supports timestamps assigned by the network adapter (so-called hardware timestamps). Hardware timestamps allow measuring the time the network packet spent in the kernel/adapter before the Handle received and processed it.
Hardware timestamps are enabled by assigning an OnixS::CboeCFE::MarketData::Pitch::NicWatch instance.
For example:
The hardware timestamps must also be enabled for the network interface. Otherwise, a feed engine will raise a warning or report an error, depending on the implementation.
Enabling hardware timestamps on a NIC affects all applications and requires additional (root) privileges.
Also, a network adapter may require clock synchronization manipulations before using the hardware timestamping feature.
Before running, it's necessary to enable hardware timestamps for a network interface and to synchronise both adapter and system clocks.
The best way to complete both preparation steps is to run the Solarflare PTP daemon. Please follow the Solarflare documentation on configuring and running the daemon.
OnixS::CboeCFE::MarketData::Pitch::SocketFeedEngine can also be used in combination with the Solarflare OpenOnload tools. The EF_RX_TIMESTAMPING
environment variable must be set to 1
before benchmarking under the Solarflare OpenOnload. This environment variable activates hardware timestamping for the Solarflare OpenOnload tools.