Configuration Guide

Transport LBT-RM Operation Options

Reliable multicast protocols like LBT-RM rely on sequence numbers and the arrival of data after a loss as evidence that the loss happened. What would happen if the last packet sent by a source was lost? How would receivers learn of the loss if no further messages were sent?

LBT-RM generates session messages when the sources on a transport session stop sending. These messages contain the expected last sequence number for the session so that receivers can detect loss even when sources aren't sending. Session messages also help to maintain state in multicast routers and switches that require regular traffic to prevent the reclamation of unused forwarding entries.

The image below illustrates the sending of session messages.

No session messages are generated as long as the interval between lbm_src_send() calls that generate writes to LBT-RM is less than transport_lbtrm_sm_minimum_interval (source) option. The interval between session messages starts at transport_lbtrm_sm_minimum_interval (source) and doubles till it reaches transport_lbtrm_sm_maximum_interval (source) at which point the interval continues at that level.

The absence of activity on a transport session is the only indication receivers get that a source is gone or no longer available through any network path. LBT-RM receivers reset a session activity timer for each data message or session message that arrives. If the activity timer ever expires, all receivers on the transport session receive an LBM_MSG_EOS event. This is illustrated in the following timeline:

The activity timer is controlled with the transport_lbtrm_activity_timeout (receiver) option.

# Reference <-

## transport_lbtrm_activity_timeout (receiver) <-

  The maximum time that an LBT-RM session may be quiescent before it is deleted and an EOS event is delivered for all topics using this transport session.

  For LBT-RM transport sessions only. This option affects the transport session underlying the receiver rather than the receiver itself. The transport session uses the value from the first receiver created on the session and ignores subsequent receivers' configuration.

  Refer to Receiver Object for additional information.

  Scope: | receiver
  Type: | lbm_ulong_t
  Units: | milliseconds
  Default value: | 60000 (60 seconds)
  When to Set: | Can only be set during object initialization.

## transport_lbtrm_coalesce_threshold (source) <-

  UM passes implicitly batched messages to the Operating System sendmsg() as a set unless the size of the set exceeds the coalescing threshold at which point the messages are coalesced and passed to the O/S as one copy.

  This option accommodates the different number of iovecs supported by different O/Ss. Tuning this option balances the efficiency of less iovecs handled by the OS vs. the expense of an additional copy operation of the messages before sending. The default value is also the maximum allowable value for Solaris, AIX and HPUX. For Linux and Microsoft Windows and Darwin, the maximum allowable value is 1023. These maximum allowable values are one less than what the O/S provides. This option affects the transport session underlying the source rather than the source itself. The transport session uses the value from the first source created on the session and ignores subsequent sources' configuration.

  Refer to Source Object for additional information.

  Scope: | source
  Type: | int
  Units: | number of individual messages
  Default value: | 15
  When to Set: | Can only be set during object initialization.

## transport_lbtrm_data_rate_limit (context) <-

  Maximum aggregate transmission rate of all LBT-RM sessions' original data plus retransmissions for this particular context.

  Refer to Rate Controls for additional information about the UM rate limiting algorithm.

  Note: For backwards compatibility with earlier versions, the lbm_context_attr_setopt() function will accept both 32 and 64 bit values for this option. Note however that a 32-bit value can only specify a rate limit a little larger than 4 Gbps.

  Scope: | context
  Type: | lbm_uint64_t
  Units: | bits per second
  Default value: | 10000000 (10 Mbps)
  When to Set: | Can only be set during object initialization.

## transport_lbtrm_datagram_max_size (context) <-

  The maximum UDP datagram payload size that can be generated for a LBT-RM transport session. Note that this does not include UDP, IP, or packet overhead added by the network stack. The default value is 8192, the minimum is 500 bytes, and the maximum is 65535.

  See Message Fragmentation and Reassembly for more information.

  Informatica does not recommend setting datagram max size options to the network MTU. See Datagram Max Size and Network MTU.

Warning
  When the DRO is in use, it is recommended that all UM applications and components (including the DRO and Persistent Store) share the same maximum datagram size setting. See Protocol Conversion.

  Users of kernel-bypass drivers should also see Dynamic Fragmentation Reduction.

  Scope: | context
  Type: | lbm_uint_t
  Units: | bytes
  Default value: | 8192
  When to Set: | Can only be set during object initialization.
  Version: | This option was implemented in LBM 4.1/UME 3.1/UMQ 1.1

## transport_lbtrm_preactivity_timeout (receiver) <-

  The time that a newly-joined LBT-RM transport session can have no activity before the receiver decides the transport session is dead.

  This option typically does not need to be set for deployments using UM version 3.3 and beyond. If this option is set to 0 (the default), then the activity timeout for a newly-joined transport session is the same as transport_lbtrm_activity_timeout (receiver).

  The purpose of this option is for a receiver to allow an extended timeout for a newly-created source transport session to have no activity prior to the first application message (or TSNI) being sent.

  This option is most useful when sending applications use UM versions prior to 3.3, which did not use Topic Sequence Number Information messages (TSNIs; see transport_topic_sequence_number_info_interval (source)). In these cases, the source does not start the transport session until the first application message is sent. If the sending application might delay sending its first message for more than transport_lbtrm_activity_timeout (receiver) (60 seconds by default), the receiver will decide that the transport session is dead and will disconnect. Assuming that the source is still actually alive, the receiver will subsequently re-join the session, which can lead to "flapping".

  This flapping can be prevented by setting transport_lbtrm_preactivity_timeout to a value greater than the worst-case delay before the sending application sends its first message.

  In UM version 3.3 and beyond, LBT-RM sources enable TSNIs by default, which ensures that some transport session activity will happen within 5 seconds, by default. Thus, there is no longer any need to set a different timeout for a newly-joined transport session. But note that it also extends the time required for a receiver to detect that a newly-joined source transport session is actually dead.

  This option may still have some utility in UM version 3.3 and beyond if TSNIs need to be disabled.

  Scope: | receiver
  Type: | lbm_ulong_t
  Units: | milliseconds
  Default value: | 0 (zero)
  When to Set: | Can only be set during object initialization.
  Version: | This option was implemented in LBM 3.4.1/UME 2.1.1.

## transport_lbtrm_rate_interval (context) <-

  Period that LBT-RM rate limiter runs.

  When a source is constrained by the rate limiter, the traffic can become very "bursty", with periods of intense traffic alternating with idle periods of no traffic. These periods average to the setting of the rate limiter.

  Reducing the rate interval increases the frequency of the bursts while reducing the intensity of those bursts, resulting in the same average. The reduction in burst intensity can reduce the risk of loss, but can also increase average latency and CPU load. Refer to Rate Controls for additional information about the UM rate limiting algorithm.

  Note: technically, any value which divides evenly into 1000 is accepted by UM for a rate interval. However, values other than those listed below should not be used except as directed by Informatica Support.

  Scope: | context
  Type: | lbm_ulong_t
  Units: | milliseconds
  Default value: | 10
  When to Set: | Can only be set during object initialization.

  String value | Integer value | Description
  --- | --- | ---
  "5" | 5 | LBT-RM rate limiter runs every 5 milliseconds.
  "10" | 10 | LBT-RM rate limiter runs every 10 milliseconds. Default for all.
  "20" | 20 | LBT-RM rate limiter runs every 20 milliseconds.
  "50" | 50 | LBT-RM rate limiter runs every 50 milliseconds.
  "100" | 100 | LBT-RM rate limiter runs every 100 milliseconds.

## transport_lbtrm_receiver_datagram_max_size (context) <-

  The maximum UDP datagram payload size that can be generated for a LBT-RM transport session for the receiver. Note that this does not include UDP, IP, or packet overhead added by the network stack. The default value is 0, the minimum is 500 bytes, and the maximum is 65535.

  See Message Fragmentation and Reassembly for more information.

  Informatica does not recommend setting datagram max size options to the network MTU. See Datagram Max Size and Network MTU.

Warning
  When the DRO is in use, it is recommended that all UM applications and components (including the DRO and Persistent Store) share the same maximum datagram size setting. See Protocol Conversion.

  Users of kernel-bypass drivers should also see Dynamic Fragmentation Reduction.

  Scope: | context
  Type: | lbm_uint_t
  Units: | bytes
  Default value: | 0
  When to Set: | Can only be set during object initialization.
  Version: | This option was implemented in UM 6.17

## transport_lbtrm_receiver_timestamp (context) <-

  Controls whether high-resolution timestamps for received packets are delivered to the receiver callback.

  For LBT-RM transport sessions only.

  Refer to High-resolution Timestamps for additional information.

  Scope: | context
  Type: | int
  When to Set: | Can only be set during object initialization.
  Version: | This option was implemented in UM 6.9

  Value | Description
  --- | ---
  1 | Receive timestamps delivered to receive callback (in C: lbm_rcv_cb_proc) via lbm_msg_t_stct::hr_timestamp.
  0 | Receive timestamps not delivered. Default for all.

## transport_lbtrm_recycle_receive_buffers (context) <-

  Enables the use of buffer recycling for socket operations.

  See Receive Buffer Recycling for more information, including restrictions on the use of this feature.

  Scope: | context
  Type: | int
  When to Set: | Can only be set during object initialization.
  Version: | This option was implemented in UM 6.12

  Value | Description
  --- | ---
  1 | Use buffer recycling.
  0 | Buffer recycling is not used. Default for all.

## transport_lbtrm_retransmit_rate_limit (context) <-

  Maximum aggregate transmission rate of all LBT-RM sessions' retransmissions for this particular context.

  This should always be less than the value used for original data. Refer to Rate Controls for additional information about the UM rate limiting algorithm.

  Note: For backwards compatibility with earlier versions, the lbm_context_attr_setopt() function will accept both 32 and 64 bit values for this option. Note however that a 32-bit value can only specify a rate limit a little larger than 4 Gbps.

  Scope: | context
  Type: | lbm_uint64_t
  Units: | bits per second
  Default value: | 5000000 (5 Mbps)
  When to Set: | Can only be set during object initialization.

## transport_lbtrm_sm_maximum_interval (source) <-

  The maximum interval between LBT-RM session messages.

  In lieu of data being sent, LBT-RM sends session messages to inform receivers of sequence numbers and to let receivers know that the sender is still transmitting. This option affects the transport session underlying the source rather than the source itself. The transport session uses the value from the first source created on the session and ignores subsequent sources' configuration.

  Refer to Source Object for additional information.

  Scope: | source
  Type: | lbm_ulong_t
  Units: | milliseconds
  Default value: | 10000 (10 seconds)
  When to Set: | Can only be set during object initialization.

## transport_lbtrm_sm_minimum_interval (source) <-

  The minimum interval between LBT-RM session messages.

  In lieu of data being sent, LBT-RM sends session messages to inform receivers of sequence numbers and to let receivers know that the sender is still transmitting. This option affects the transport session underlying the source rather than the source itself. The transport session uses the value from the first source created on the session and ignores subsequent sources' configuration.

  Refer to Source Object for additional information.

  Scope: | source
  Type: | lbm_ulong_t
  Units: | milliseconds
  Default value: | 200 (0.2 seconds)
  When to Set: | Can only be set during object initialization.

## transport_lbtrm_source_datagram_max_size (context) <-

  The maximum UDP datagram payload size that can be generated for a LBT-RM transport session for the source. Note that this does not include UDP, IP, or packet overhead added by the network stack. The default value is 0, the minimum is 500 bytes, and the maximum is 65535.

  See Message Fragmentation and Reassembly for more information.

  Informatica does not recommend setting datagram max size options to the network MTU. See Datagram Max Size and Network MTU.

Warning
  When the DRO is in use, it is recommended that all UM applications and components (including the DRO and Persistent Store) share the same maximum datagram size setting. See Protocol Conversion.

  Users of kernel-bypass drivers should also see Dynamic Fragmentation Reduction.

  Scope: | context
  Type: | lbm_uint_t
  Units: | bytes
  Default value: | 0
  When to Set: | Can only be set during object initialization.
  Version: | This option was implemented in UM 6.17

## transport_lbtrm_source_timestamp (context) <-

  Controls whether high-resolution timestamps for transmitted packets are delivered to the source event callback.

  For LBT-RM transport sessions only. Refer to High-resolution Timestamps for additional information.

  Scope: | context
  Type: | int
  When to Set: | Can only be set during object initialization.
  Version: | This option was implemented in UM 6.9

  Value | Description
  --- | ---
  1 | Transmit timestamps delivered to the source event callback (in C: lbm_src_cb_proc) via event LBM_SRC_EVENT_TIMESTAMP.
  0 | Transmit timestamps not delivered. Default for all.

## transport_lbtrm_tgsz (source) <-

  The transmission group size used for this Topic when LBT-RM is used.

  This value must be greater than 0 and must be a power of 2 no greater than 32K. This option affects the transport session underlying the source rather than the source itself. The transport session uses the value from the first source created on the session and ignores subsequent sources' configuration.

  Refer to Source Object for additional information.

  Scope: | source
  Type: | lbm_uint16_t
  Units: | packets
  Default value: | 8
  When to Set: | Can only be set during object initialization.