Known Issues
The following is a list of general existing limitations and known issues of the various components of XLIO.
Since XLIO has been inherited from Messaging Accelerator (VMA) v9.2.2, some issues point to (VMA).
Internal Ref. Number |
Details |
3795997 |
Description: When the aggregated data to be sent exceeds the TCP send window, XLIO will postpone the transmission (Tx operation) until all previously sent data is acknowledged by the remote side. |
Workaround: Increase the TCP receive window size on the remote side. |
|
Keywords: TSO; quick ack; delayed ack; TCP window |
|
Discovered in Version: 3.31.2 |
|
3795997 |
Description: When aggregated data to send is bigger than the TCP send window allows - XLIO will postpone TX operation unless all previously sent data is acked by the remote side. |
Workaround: Increase TCP receive window size on the remote side. |
|
Keywords: TSO, Quick ack, Delayed ack, TCP window |
|
Discovered in Version: 3.30.5 |
|
3865579 |
Description: For small packets, up to 205 bytes, the removal of the BlueFlame feature from XLIO causes latency degradation. Expect up to a 400 ns increase in latency. |
Workaround: N/A |
|
Keywords: latency, blue flame |
|
Discovered in Version: 3.30.5 |
|
3654779 |
Description: In the current state of the library, the TCP keep-alive feature is partially supported. The known limitations are: 1. The keep-alive internal parameters are as follows: a. TCP_KEEPINTVL - 75,000ms or 75 seconds (1:15 minutes) b. TCP_KEEPCNT - 9 (probes to send before timeout) 2. The following setsockopt options are unsupported: a. setsockopt(sock, IPPROTO_TCP, TCP_KEEPINTVL, &interval, sizeof(interval)); - Change the intervals between the keep-alive probes not operational b. setsockopt(sock, IPPROTO_TCP, TCP_KEEPCNT, &retries, sizeof(retries)); - Change the number of probes not operational 3. The following system configurations are disregarded: `sysctl -w net.ipv4.tcp_keepalive_intvl=60` `sysctl -w net.ipv4.tcp_keepalive_probes=3` 4. The contents of the following files are disregarded: /proc/sys/net/ipv4/tcp_keepalive_intvl /proc/sys/net/ipv4/tcp_keepalive_probes |
Workaround: N/A |
|
Keywords: keep-alive, TCP_KEEPALIVE |
|
Discovered in Version: 3.10 |
|
3440429 |
Description: XLIO fails to create RFS rule and prints the following error: Create RFS flow failed, Tag: Y, Flow: dst: X.X.X.X:X, src: X.X.X.X:X, proto: TCP, family: INET, Priority: 1, errno: 17 - File exists This happens when a new socket allocates the same fd as a socket in cleanup process. |
Workaround: Set XLIO_TCP_ABORT_ON_CLOSE=1 to lower the chances of such a scenario to take place. |
|
Keywords: RFS; steering failure error |
|
Discovered in Version: 3.0.2 |
|
2970828 |
Description: XLIO ignores all signals except SIGINT signal, occasionally resulting in blocked IO calls. |
Workaround: N/A |
|
Keywords: Signal; SIGINT; IO |
|
Discovered in Version: 2.1.4 |
|
3204491 |
Description: Note the following limitations when working with setsockopt for UDP multicast socket. 1. Setting either IP_DROP_MEMBERSHIP or IP_DROP_SOURCE_MEMBERSHIP reverts IP_MULTICAST_LOOP=0 to 1. 2. Only the first multicast group will be offloaded by XLIO using IP_ADD_SOURCE_MEMBERSHIP or MCAST_JOIN_SOURCE_GROUP. The rest of the groups will be handled by the Kernel. 3. Binding to a specific IP (not any_address) after setting multicast setsockopt options will result in binding to any_address instead. |
Workaround: N/A |
|
Keywords: multicast; setsockopt; bind |
|
Discovered in Version: 2.1.4 |
|
3217617 |
Description: When XLIO binds to any IP, resource allocation is required for each IP per port. This action may take up to several seconds with a limit of 64K steerings per family. |
Workaround: To avoid this scenario, bind a socket to a specific IP instead. |
|
Keywords: Bind to any IP; resource allocation |
|
Discovered in Version: 2.0.6 |
|
3190147 |
Description: TCP User Timeout options are not supported with select(); pselect(); poll(); ppoll(); __poll_chk(); and __ppoll_chk. |
Workaround: Application may use epoll instead. |
|
Keywords: TCP; user timeout; select; poll; ppoll |
|
Discovered in Version: 2.0.6 |
|
3217629 |
Description: iperf3 usage of longjmp operation in the signal handler results in abandoning previous thread context, leaving the state of internal objects in an undefined state. |
Workaround: N/A |
|
Keywords: iperf3; signal handler termination |
|
Discovered in Version: 2.0.6 |
|
3231754/3208316 |
Description: Traffic over IPv6 link-local addresses is not supported. |
Workaround: N/A |
|
Keywords: IPv6; link-local |
|
Discovered in Version: 2.0.6 |
|
3231768 |
Description: IPv6 Flow Labels are not supported. |
Workaround: N/A |
|
Keywords: IPv6 flow labels |
|
Discovered in Version: 2.0.6 |
|
3231781 |
Description: The following IPv6 multicast socket options are not supported:
|
Workaround: N/A |
|
Keywords: IPV6_MULTICAST_LOOP; MCAST_BLOCK_SOURCE; MCAST_UNBLOCK_SOURCE; socket; IPv6 |
|
Discovered in Version: 2.0.6 |
|
3232106 |
Description: SO_MAX_PACING_RATE socket option is not supported. |
Workaround: N/A |
|
Keywords: SO_MAX_PACING_RATE; socket |
|
Discovered in Version: 2.0.6 |
|
3136901 |
Description: If a multi-threaded application calls exit() syscall while other threads call socket API concurrently, this can lead to a race between XLIO library destructor and intercepted socket API or in rare cases to a segmentation fault. |
Workaround: It is recommended to finish running threads before process termination. Alternatively, avoid calling socket API concurrently with exit() syscall. |
|
Keywords: multithreaded applications |
|
Discovered in Version: 1.3.5 |
|
2667588 |
Description: XLIO conf file does not support IPv6 (see XLIO Configuration Parameters). |
Workaround: N/A |
|
Keywords: xlio.conf; IPv6 |
|
Discovered in Version: 1.2.9 |
|
N/A |
Description: Socket API breaks for closed UDP sockets when using XLIO_NGINX_UDP_POOL_SIZE != 0, as the socket is not entirely closed. Socket operations will not fail after the socket is closed. |
Workaround: N/A |
|
Keywords: UDP; pool |
|
Discovered in Version: 1.2.9 |
|
1542628 |
Description: Device memory programming is not supported on VMs that lack Blue Flame support. |
Workaround: N/A |
|
Keywords: MEMIC, Device Memory, Virtual Machine, Blue flame |
|
Discovered in Version: 1.0.6 |
|
— |
Description: If XLIO runs when XLIO_HANDLE_SIGINTR is enabled, an error message might be written upon exiting. |
Workaround: Ignore the error message, or run XLIO with XLIO_HANDLE_SIGINTR disabled. |
|
Keywords: XLIO_HANDLE_SIGINTR, error message |
|
Discovered in Version: 1.0.6 |
|
965237 |
Description: The following sockets APIs are directed to the OS and are not offloaded by XLIO: · int socketpair(int domain, int type, int protocol, int sv[2]); · int dup(int oldfd); · int dup2(int oldfd, int newfd); |
Workaround: N/A |
|
Keywords: sockets, socketpair, dup, dup2 |
|
965227 |
Description: Multicast (MC) loopback within a process is not supported by XLIO:
|
Workaround: N/A |
|
Keywords: Multicast, Loopback |
|
965227 |
Description: MC loopback between XLIO and the OS limitation.
|
Workaround: N/A |
|
Keywords: Multicast, Loopback |
|
965227 |
Description: MC loopback Tx is currently disabled and setsockopt (IP_MULTICAST_LOOP) is not supported. |
Workaround: N/A |
|
Keywords: Multicast, Loopback |
|
1011005 |
Description: XLIO SELECT option supports up to 200 sockets in TCP. |
Workaround: Use ePoll that supports up to 6000 sockets. |
|
Keywords: SockPerf |
|
977899 |
Description: An unsuccessful trial to connect to a local interface, is reported by XLIO as Connection timeout rather than Connection refused. |
Workaround: N/A |
|
Keywords: Verification |
|
1019085 |
Description: Poll is limited with the number of sockets. |
Workaround: Use ePoll for large number of sockets (tested up to 6000) |
|
Keywords: Poll, ePoll |
|
— |
Description: The following XLIO_PANIC will be displayed when there are not enough open files defined on the server:XLIO PANIC : si[fd=1023]:51:sockinfo() failed to create internal epoll (ret=-1 Too many open files |
Workaround: Verify that the number of max open FDs (File Descriptors) in the system (ulimit -n) is twice as number of needed sockets. XLIO internal logic requires one additional FD per offloaded socket. |
|
Keywords: XLIO_PANIC while opening large number of sockets |
|
— |
Description: When a XLIO -enabled application is running, there are several cases when it does not exit as expected pressing CTRL-C. |
Workaround: Enable SIGINT handling in XLIO, by using:#export XLIO_HANDLE_SIGINTR=1 |
|
Keywords: The XLIO application does not exit when you press CTRL-C. |
|
— |
Description: XLIO does not support network interface changes during runtime |
Workaround: N/A |
|
Keywords: Dynamic network interface changes |
|
— |
Description: XLIO behavior of epoll EPOLLET (Edge Triggered) and EPOLLOUT flags with TCP sockets differs between OS and XLIO.
|
Workaround: N/A |
|
Keywords: XLIO behavior of epoll EPOLLET (Edge Triggered) and EPOLLOUT flags with TCP sockets |
|
— |
Description: XLIO does not close connections located on the same node (sends FIN to peers) when its own process is terminated. |
Workaround: N/A |
|
Keywords: XLIO connection |
|
— |
Description: XLIO is not closed (sends FIN to peers) when its own process is terminated when the /etc/init.d/XLIO is stopped. |
Workaround: Launch /etc/init.d/XLIO start |
|
Keywords: XLIO connection |
|
— |
Description: When a non-offloaded process joins the same MC address as another XLIO process on the same machine, the non-offloaded process does not get any traffic. |
Workaround: Run both processes with XLIO |
|
Keywords: MC traffic with XLIO process and non XLIO process on the same machine |
|
— |
Description: Occasionally, epoll with EPOLLONESHOT does not function properly. |
Workaround: N/A |
|
Keywords: epoll with EPOLLONESHOT |
|
— |
Description: Occasionally, when running UDP SFNT-STREAM client with poll muxer flag, the client-side ends with an expected error:ERROR: Sync messages at end of test lost ERROR: Test failed. This only occurs with poll flag |
Workaround: Set a higher acknowledgment waiting time value in the sfnt-stream. |
|
Keywords: SFNT-STREAM UDP with poll muxer flag ends with an error on client-side |
|
— |
Description: Occasionally, SFNT-STREAM UDP client hangs when running multiple times. |
Workaround: Set a higher acknowledgment waiting time value in the sfnt-stream. |
|
Keywords: SFNT-STREAM UDP client hanging issue |
|
— |
Description: Ethernet loopback functions only if both sides are either off-loaded or not-offloaded. |
Workaround: N/A |
|
Keywords: Ethernet loopback is not functional between the XLIO and the OS |
|
— |
Description: The following error may occur when running netperf TCP tests with XLIO:remote error 107 'Transport endpoint is not connected |
Workaround: Use netperf 2.6.0 |
|
Keywords: Error when running netperf 2.4.4 with XLIO |
|
— |
Description: Occasionally, a packet is not sent if the socket is closed immediately after send() (also for blocking socket) |
Workaround: Wait several seconds after send() before closing the socket |
|
Keywords: A packet is not sent if the socket is closed immediately after send() |
|
— |
Description: It can take for XLIO more time than the OS to return from an iomux call if all sockets in this iomux are empty sockets |
Workaround: N/A |
|
Keywords: Iomux call with empty sockets |
|
— |
Description: Sharing of HW resources between the different working threads might cause lock contentions which can affect performance. |
Workaround: Use different ring allocation logic. |
|
Keywords: Issues with performance with some multi-threaded applications |
|
— |
Description: XLIO does not support broadcast traffic. |
Workaround: Use libxlio.conf to pass broadcast through OS |
|
Keywords: No support for direct broadcast |
|
— |
Description: Directing XLIO to access non-valid memory area will cause a segmentation fault. |
Workaround: N/A |
|
Keywords: There is no non-valid pointer handling in XLIO |
|
— |
Description: XLIO allocates resources on the first connect/send operation, which might take up to several tens of milliseconds. |
Workaround: N/A |
|
Keywords: First connect/send operation might take more time than expected |
|
— |
Description: Calling select upon shutdown of socket will return “ready to write” instead of timeout. |
Workaround: N/A |
|
Keywords: Calling select() after shutdown (write) returns socket ready to write, while select() is expected to return timeout |
|
— |
Description: XLIO does not raise sigpipe in connection shutdown. |
Workaround: N/A |
|
Keywords: XLIO does not raise sigpipe |
|
— |
Description: XLIO polls the CQ for packets; if no packets are available in the socket layer, it takes longer. |
Workaround: N/A |
|
Keywords: When there are no packets in the socket, it takes longer to return from the read call |
|
— |
Description: Select with more than 1024 sockets is not supported |
Workaround: Compile XLIO with SELECT_BIG_SETSIZE defined. |
|
Keywords: 1024 sockets |
|
— |
Description: Possible performance degradation running NGINX QUIC. |
Workaround: Use XLIO_CQ_MODERATION_ENABLE=0. |
|
Keywords: QUIC, NGINX, XLIO_CQ_MODERATION_ENABLE |