OnixS C++ CME Market Data Handler  5.2.0
API documentation
The Feed Engine Based On Solarflare ef_vi SDK

The OnixS CME MDP Market Data Handler C++ Feed Engine advanced programming feature is specifically designed to enable the Market Data Handler to receive and process market data from network and file-based historical data set sources. The Feed Engine also enables users to build bespoke methods for extracting market data from custom data sources.

The default implementation of the Feed Engine is based on the standard socket API. However, various network card manufactures offer alternatives to the standard sockets API to manipulate network data. For example, the Solarflare ef_vi SDK to send and receive multicast packets bypassing the kernel and avoiding copying data from internal buffers to user space. The Solarflare ef_vi SDK is designed for high-performance networking for trading applications.

From version 5.1 of the OnixS CME Market Data Handler SDK, the standard distribution includes an implementation of the Feed Engine concept based on the Solarflare ef_vi SDK. The functionality is encapsulated in the OnixS::CME::MDH::SolarflareFeedEngine class. The design of the class is similar to the OnixS::CME::MDH::MultithreadedFeedEngine class. Also, since the noted release, the OnixS::CME::MDH::MultithreadedFeedEngine was updated and now has the same OnixS::CME::MDH::FeedEngineThreadListener event listener. The only difference is the parameters affecting the behaviour of the new feed engine.

The Solarflare ef_vi SDK is available for Linux platforms only and solely for Solarflare network cards. To simplify the development process for users, the Handler SDK exposes the OnixS::CME::MDH::SolarflareFeedEngine and related classes for all platforms. However, instance creation will fail at runtime on a platform where the corresponding functionality is not supported. Similarly, any attempt to use the ef_vi based feed engine with a non-Solarflare network interface will lead to an error.

Configuring the New Feed Engine

The parameters affecting behavior of the feed engine based on the ef_vi SDK are grouped into two categories. The first one defines the size and affinity for the working threads used by the feed engine. The second one affects the network layer.

The ef_vi SDK uses the concept of virtual interfaces to manipulate (send and receive) network data. The OnixS CME Market Data Handler SDK follows this concept and exposes parameters related to the given entities. In particular, parameters related to virtual interfaces are gathered into the OnixS::CME::MDH::SolarflareViSettings class:

The Sample Application

The OnixS CME MDP Market Data Handler C++ evaluation distribution includes fast-start reference implementation source code samples - including a Benchmarking sample. This sample has been updated to include the Feed Engine based on the Solarflare ef_vi SDK in the available predefined Feed Engine implementations. See the sample source code to get familiar with the concept and use of the feed engine implementation based on the Solarflare ef_vi SDK.