question

Upvotes
Accepted
100 4 4 7

RsslConnectOptions params for a busy consumer app

for a very busy consumer application, what's suggested value for RsslConnectOptions.numInputBuffers and sysRecBufSize? Presume guaranteedOutputBuffers does not matter. Any other params do I need to change?

elektronrefinitiv-realtimeelektron-sdkrrteta-apielektron-transport-api
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

1 Answer

Upvotes
Accepted
478 4 2 3

Much of this comes down to how efficiently the application is processing the content as well as the quality of the network connection. I will provide information about what these control and how they work together, but there is not really any magic bullet setting that works in every environment - you can use the ETA performance tools that are provided with the product to run up some high performance numbers in your environment and see what works best for you.

sysRecvBufSize controls the TCP SO_RCVBUF size, which determines the maximum amount of bytes that TCP/IP can take off of the network without the user reading any data. As the application uses the read operations to take data out of TCP's receive buffer, this frees up more space that allows it to read more from the network. This is a sliding window protocol (https://en.wikipedia.org/wiki/Sliding_window_protocol)

numInputBuffers controls the size of ETA's internal input buffer - when the user calls the rsslRead method, ETA attempts to read as many bytes as possible from TCPs receive buffer in a single socket read operation. These bytes are then put into the input buffer, allowing TCP to read as much as it can again while the user processes out of ETA's input buffer. The numInputBuffers value will basically be multiplied by the maxFragmentSize configuration of the server side of the connection to create one large continuous block of memory to read into. After reading from TCP, subsequent calls to rsslRead will go through ETA's input buffer and return pointers to the messages already read from TCP. When the end of the input buffer is hit, rsslRead will then use socket read to pull a large chunk of bytes from TCP again.

Having a numInputBuffers value that gives an input buffer that matches the SO_RCVBUF size can theoretically allow ETA to drain TCPs receive buffer with a single rsslRead operation, but this generally depends on how much data is currently available in TCP and again depends on network and application processing conditions.

Hope this helps,

Brian

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 5.0 MiB each and 10.0 MiB total.

Click below to post an Idea Post Idea