New settings were added in order to improve miscellaneous aspects of Handler's behavior.
New configuration parameter OnixS::CME::MarketData::HandlerSettings::bookUpdateNotificationStrategy has been added to the Handler defining the way Handler fires book update events:
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.
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.
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.
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.
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.
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.
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.