OnixS C++ CME Market Data Handler  2.56.0.0
New Settings Affecting Handler's Behavior

New settings were added in order to improve miscellaneous aspects of Handler's behavior.

Book Updates Notification Strategies

New configuration parameter OnixS::CME::MarketData::HandlerSettings::bookUpdateNotificationStrategy has been added to the Handler defining the way Handler fires book update events:

Network Packet Maximal Size

In order to achieve better performance by reducing memory coping operations, sub-system manipulating network packets has been redesigned. As a result, Handler manipulates network packets more effectively and with less memory. To avoid allocating of unnecessarily huge buffers while working with packets, Handler exposes new OnixS::CME::MarketData::HandlerSettings::maxPacketSize parameter defining maximal size for a network packet transmitted by MDP.

Network Packets Pool Maximal Size

Handler uses pool of network packets to speed-up reception of market data coming from the network. Pool also helps to avoid losing incoming data during data bursts when MDP transmits huge number of data in a very short time frame. The drawback of using pool is increased memory usage. Handler uses OnixS::CME::MarketData::HandlerSettings::maxPacketPoolSize parameter to limit number of packets stored in pool. As a result, Handler will keep packets for further reuse up to the value defined by noted parameter.

Network Packets Pulling Strategies

Since this release, the OnixS::CME::MarketData::HandlerSettings contains new parameter OnixS::CME::MarketData::HandlerSettings::packetsPullingStrategy affecting the way Handler listens to and processes network packets transmitted by MDP. Read Network Packets Pulling Strategies for more information.

TCP Recovery Request Processing Time Bounds

Handler takes advantage of using TCP Recovery feed in case of packet gap detection. When gap is detected, Handler suspends real-time market data processing and requests missing packets from the TCP recovery feed. While missing packets are being requested, incoming real-time data is being cached into internal queues. To avoid market data processing from being blocked by recovery, Handler offers new parameter OnixS::CME::MarketData::HandlerSettings::tcpReplayRequestTimeframe specifying time bounds for the recovery procedure.

Changing 'Wait On Socket' Time Intervals

Handler's settings now include OnixS::CME::MarketData::HandlerSettings::ioCompletionWaitTime parameter defining amount of time Handler waits on sockets to receive multicast data. Changing this parameter has direct impact onto performance/latency characteristics and load onto CPU. For example, setting value to zero disables sleeping in kernel mode while waiting on incoming data and thus Handler loops until data is not received. This increases use of CPU to 100% (per core) but reduces general latency, especially when data is transmitted quite rarely.

Note
Changing given parameter also affects general responsiveness in aspects how quickly Handler may join and unjoin multicast groups as well as stops data processing. For this reason, it's not recommended to set value exceeding thousands of milliseconds.

Switching Between Local and Universal Time

Historically, all time exposed by Handler's API (packet/message receiving time, log file entries) was a local time. Since this release, Handler allows users to define whether timestamps are to be in local or universal time. Switching to universal time has also performance benefits because obtaining universal time is significantly faster rather than local time.

Controlling Size of Log File Volumes

New parameter has been added to Handler's settings (OnixS::CME::MarketData::HandlerSettings::logFileSizeLimit) allowing to define log file size limits. Handler detaches logged data (by moving it to the file having same as log file name but suffixed with time-stamp) upon reaching defined size limit and continues logging.