Monitoring, Debugging, and Troubleshooting

Networking applications open various types of sockets.

The XLIO library holds the following counters:

  • Per socket state and performance counters

  • Internal performance counters which accumulate information for select(), poll() and epoll_wait() usage by the whole application. An additional performance counter logs the CPU usage of XLIO during select(), poll(), or epoll_wait() calls. XLIO calculates this counter only if XLIO_CPU_USAGE_STATS parameter is enabled, otherwise this counter is not in use and displays the default value as zero.

  • XLIO internal CQ performance counters

  • XLIO internal RING performance counters

  • XLIO internal Buffer Pool performance counters

Use the included xlio_stats utility to view the per-socket information and performance counters during runtime.

Note: For TCP connections, xlio_stats shows only offloaded traffic, and not "os traffic."

Usage:

Copy
Copied!
            

#xlio_stats [-p pid] [-k directory] [-v view] [-d details] [-i interval]

The following table lists the basic and additional xlio_stats utility options.

Parameter Name

Description

Values

-p, --pid

<pid>

Shows XLIO statistics for a process with pid: <pid>.

-k, --directory

<directory>

Sets shared memory directory path to <directory>

-n, --name

<application>

Shows XLIO statistics for application: <application>

-f, --find_pid

Finds PID and shows statistics for the XLIO instance running (default).

-F, --forbid_clean

When you set this flag to inactive, shared objects (files) are not removed.

-i, --interval

<n>

Prints a report every <n> seconds.

Default: 1 sec

-c, --cycles

<n>

Do <n> report print cycles and exit, use 0 value for infinite.

Default: 0

-v, --view

<1|2|3|4|5>

Sets the view type:

1. Shows the runtime basic performance counters (default).

2. Shows extra performance counters.

3. Shows additional application runtime configuration information.

4. Shows multicast group membership information.

Shows netstat like view of all sockets.

-d, --details

<1|2>

Sets the details mode:

1. Show totals (default).

Show deltas.

-S, --fd_dump

<fd> [<level>]

Dumps statistics for fd number <fd> using log level <level>. Use 0 value for all open fds.

-z, --zero

Zero counters.

-l, --log_level

<level>

Sets the XLIO log level to <level> (1 <= level <= 7).

-D, --details_level

<level>

Sets the XLIO log detail level to <level> (0 <= level <= 3).

-s, --sockets

<list|range>

Logs only sockets that match <list> or <range> format: 4-16 or 1,9 (or combination).

-V, --version

Prints the version number.

-h, --help

Prints a help message.

Examples

The following sections contain examples of the xlio_stats utility.

Example 1

Description

The following example demonstrates basic use of the xlio_stats utility.

Command Line

Copy
Copied!
            

#xlio_stats –p <pid>

Warning

If there is only a single process running over XLIO, it is not necessary to use the –p option, since xlio_stats will automatically recognize the process.

Output

If no process with a suitable pid is running over the XLIO, the output is:

Copy
Copied!
            

xliostat: Failed to identify process...

If an appropriate process was found, the output is:

Copy
Copied!
            

fd      ------------ total offloaded -------------   ----- total os ------                pkt  Kbyte   eagain   error   poll%     pkt   Kbyte   error 14  Rx:  140479898 274374        0       0   100.0       0       0       0     Tx:  140479902 274502        0       0               0       0       0 --------------------------------------------------------------------------

Output Analysis

  • A single socket with user fd=14 was created

  • Received 140479898 packets, 274374 Kilobytes via the socket

  • Transmitted 140479898 packets, 274374 Kilobytes via the socket

  • All the traffic was offloaded. No packets were transmitted or received via the OS.

  • There were no missed Rx polls (see XLIO_RX_POLL). This implies that the receiving thread did not enter a blocked state, and therefore there was no context switch to hurt latency.

  • There are no transmission or reception errors on this socket

Example 2

Description

xlio_stats presents not only cumulative statistics, but also enables you to view deltas of XLIO counter updates. This example demonstrates the use of the "deltas" mode.

Command Line

Copy
Copied!
            

#xlio_stats –p <pid> -d 2

Output

Copy
Copied!
            

fd --------------- offloaded ---------------- ---------- os ---------- pkt/s Kbyte/s eagain/s error/s poll% pkt/s Kbyte/s error/s  15 Rx: 15186 29 0 0 0.0 0 0 0 Tx: 15186 29 0 0 0 0 0  19 Rx: 15186 29 0 0 0.0 0 0 0 Tx: 15186 29 0 0 0 0 0  23 Rx: 0 0 0 0 0.0 15185 22 0 Tx: 0 0 0 0 15185 22 0 select() Rx Ready:15185/30372 [os/offload] Timeouts:0 Errors:0 Poll:100.00% Polling CPU:70%

Output Analysis

  • Three sockets were created (fds: 15, 19, and 23)

  • Received 15186 packets, 29 Kilobytes during the last second via fds: 15 and 19

  • Transmitted 15186 packets, 29 Kbytes during the last second via fds: 15 and 19

  • Not all the traffic was offloaded, as fd 23: 15185 packets, 22 KBytes were transmitted and received via the OS. This means that fd 23 was used for unicast traffic.

  • No transmission or reception errors were detected on any socket

  • The application used select for I/O multiplexing

  • 45557 packets were placed in socket ready queues (over the course of the last second): 30372 of them offloaded (15186 via fd 15 and 15186 via fd 19), and 15185 were received via the OS (through fd 23)

  • There were no missed Select polls (see XLIO_SELECT_POLL). This implies that the receiving thread did not enter a blocked state. Thus, there was no context switch to hurt latency.

  • The CPU usage in the select call is 70%
    You can use this information to calculate the division of CPU usage between XLIO and the application. For example when the CPU usage is 100%, 70% is used by XLIO for polling the hardware, and the remaining 30% is used for processing the data by the application.

Example 3

Description

This example presents the most detailed xlio_stats output.

Command Line

Copy
Copied!
            

#xlio_stats –p <pid> -v 3 –d 2

Output

Copy
Copied!
            

====================================================== Fd=[14] - Blocked, MC Loop Enabled - Bound IF = [0.0.0.0:11111] - Member of = [224.7.7.7] Rx Offload: 1128530 / 786133 / 0 / 0 [kilobytes/packets/eagains/errors] Rx byte: cur 1470 / max 23520 / dropped/s 0 / limit 16777216 Rx pkt : cur 1 / max 16 / dropped/s 0 Rx poll: 10 / 276077 (100.00%) [miss/hit] ====================================================== Fd=[29] - TCP, Blocked - Local Address = [[2003::30]:11112] - Foreign Address = [[2003::20]:29386] Tx Offload: 27932 / 2043030 / 0 / 0 [kilobytes/packets/eagains/errors] Rx Offload: 27932 / 2043030 / 0 / 0 [kilobytes/packets/eagains/errors] Rx byte: cur 0 / max 14 / dropped 0 / limit 0  Rx pkt : cur 0 / max 1 / dropped 0  Rx RQ Strides: 2043035 / 1 [total/max-per-packet] Rx poll: 1 / 2043029 (100.00%) [miss/hit] ========================================================         CQ=[0] Packets dropped: 0 Packets queue len: 0 Drained max: 511 Buffer pool size: 500 ====================================================== ====================================================== RING_ETH=[0] Rx Offload: 1192953 / 786133 [kilobytes/packets] Interrupts: 786137 / 78613 [requests/received] Moderation: 10 / 181 [frame count/usec period] ====================================================== ====================================================== BUFFER_POOL(RX)=[0] Size: 168000 No buffers error: 0 ====================================================== BUFFER_POOL(TX)=[1] Size: 199488 No buffers error: 0 ======================================================

Output Analysis

  • A single socket with user fd=14 was created

  • The socket is a member of multicast group: 224.7.7.7

  • Received 786133 packets, 1128530 Kilobytes via the socket during the last second

  • No transmitted data

  • All the traffic was offloaded. No packets were transmitted or received via the OS

  • There were almost no missed Rx polls (see XLIO_RX_POLL)

  • There were no transmission or reception errors on this socket

  • The sockets receive buffer size is 16777216 Bytes

  • There were no dropped packets caused by the socket receive buffer limit (see XLIO_RX_BYTES_MIN)

  • Currently, one packet of 1470 Bytes is located in the socket receive queue

  • The maximum number of packets ever located, simultaneously, in the sockets receive queue is 16

  • No packets were dropped by the CQ

  • No packets in the CQ ready queue (packets which were drained from the CQ and are waiting to be processed by the upper layers)

  • The maximum number of packets drained from the CQ during a single drain cycle is 511 (see XLIO_CQ_DRAIN_WCE_MAX)

  • The RING_ETH received 786133 packets during this period

  • The RING_ETH received 1192953 kilo bytes during this period. This includes headers bytes.

  • 786137 interrupts were requested by the ring during this period

  • 78613 interrupts were intercepted by the ring during this period

  • The moderation engine was set to trigger an interrupt for every 10 packets and with maximum time of 181 usecs

  • There were no retransmissions

  • The current available buffers in the RX pool is 168000

  • The current available buffers in the TX pool is 199488

  • There were no buffer requests that failed (no buffer errors)

Example 4

Description

This example demonstrates how you can get multicast group membership information via xlio_stats.

Command Line

Copy
Copied!
            

#xlio_stats –p <pid> -v 4

Output

Copy
Copied!
            

XLIO Group Membership Information Group fd number ------------------------------ [224.4.1.3] 15 [224.4.1.2] 19

Example 5

Description

This is an example of the “netstat like” view of xlio_stats (-v 5).

Output

Copy
Copied!
            

Proto Offloaded Local Address Foreign Address State Inode PID udp Yes 0.0.0.0:44522 0.0.0.0:* 733679757 1576 tcp Yes 0.0.0.0:11111 0.0.0.0:* LISTEN 733679919 1618

Output Analysis

  • Two processes are running XLIO

  • PID 1576 has one UDP socket bounded to all interfaces on port 44522

  • PID 1618 has one TCP listener socket bounded to all interfaces on port 11111

Example 6

Description

This is an example of a log of socket performance counters along with an explanation of the results (using XLIO_STATS_FILE parameter).

Output

Copy
Copied!
            

XLIO: [fd=10] Tx Offload: 455 / 233020 / 0 [kilobytes/packets/errors] XLIO: [fd=10] Tx OS info: 0 / 0 / 0 [kilobytes/packets/errors] XLIO: [fd=10] Rx Offload: 455 / 233020 / 0 [kilobytes/packets/errors] XLIO: [fd=10] Rx OS info: 0 / 0 / 0 [kilobytes/packets/errors] XLIO: [fd=10] Rx byte: max 200 / dropped 0 (0.00%) / limit 2000000  XLIO: [fd=10] Rx pkt : max 1 / dropped 0 (0.00%) XLIO: [fd=10] Rx poll: 0 / 233020 (100.00%) [miss/hit]

Output Analysis

  • No transmission or reception errors occurred on this socket (user fd=10).

  • All the traffic was offloaded. No packets were transmitted or received via the OS.

  • There were practically no missed Rx polls (see XLIO_RX_POLL and XLIO_SELECT_POLL). This implies that the receiving thread did not enter a blocked state. Thus, there was no context switch to hurt latency.

  • There were no dropped packets caused by the socket receive buffer limit (see XLIO_RX_BYTES_MIN). A single socket with user fd=14 was created.

Example 7

Description

This is an example of xlio_stats fd dump utility of established TCP socket using log level = info.

Command Line

Copy
Copied!
            

#xlio_stats –-fd_dump 17 info

Output

Copy
Copied!
            

XLIO INFO : ============ DUMPING FD 17 STATISTICS ============ XLIO INFO : ==================== SOCKET FD =================== XLIO INFO : Fd number : 17 XLIO INFO : Bind info : 22.0.0.4:58795 XLIO INFO : Connection info : 22.0.0.3:6666 XLIO INFO : Protocol : PROTO_TCP XLIO INFO : Is closed : false XLIO INFO : Is blocking : true XLIO INFO : Rx reuse buffer pending : false XLIO INFO : Rx reuse buffer postponed : false XLIO INFO : Is offloaded : true XLIO INFO : Tx Offload : 12374 / 905105 / 0 / 0 [kilobytes/packets/drops/errors] XLIO INFO : Rx Offload : 12374 / 905104 / 0 / 0 [kilobytes/packets/eagains/errors] XLIO INFO : Rx byte : max 14 / dropped 0 (0.00%) / limit 0 XLIO INFO : Rx pkt : max 1 / dropped 0 (0.00%) XLIO INFO : Rx poll : 0 / 905109 (100.00%) [miss/hit] XLIO INFO : Socket state : TCP_SOCK_CONNECTED_RDWR XLIO INFO : Connection state : TCP_CONN_CONNECTED XLIO INFO : Receive buffer : m_rcvbuff_current 0, m_rcvbuff_max 87380, m_rcvbuff_non_tcp_recved 0 XLIO INFO : Rx lists size : m_rx_pkt_ready_list 0, m_rx_ctl_packets_list 0, m_rx_ctl_reuse_list 0 XLIO INFO : PCB state : ESTABLISHED XLIO INFO : PCB flags : 0x140 XLIO INFO : Segment size : mss 1460, advtsd_mss 1460 XLIO INFO : Window scaling : ENABLED, rcv_scale 7, snd_scale 7 XLIO INFO : Receive window : rcv_wnd 87380 (682), rcv_ann_wnd 87240 (681), rcv_wnd_max 87380 (682), rcv_wnd_max_desired 87380 (682) XLIO INFO : Send window : snd_wnd 87168 (681), snd_wnd_max 8388480 (65535) XLIO INFO : Congestion : cwnd 1662014 XLIO INFO : Receiver data : rcv_nxt 12678090, rcv_ann_right_edge 12765330 XLIO INFO : Sender data : snd_nxt 12678080, snd_wl1 12678076, snd_wl2 12678066 XLIO INFO : Send buffer : snd_buf 255986, max_snd_buff 256000 XLIO INFO : Retransmission : rtime 0, rto 3, nrtx 0 XLIO INFO : RTT variables : rttest 38, rtseq 12678066 XLIO INFO : First unsent : NULL XLIO INFO : First unacked : seqno 12678066, len 14, seqno + len 12678080 XLIO INFO : Last unacked : seqno 12678066, len 14, seqno + len 12678080 XLIO INFO : Acknowledge : lastack 12678066 XLIO INFO : ================================================== XLIO INFO : ==================================================

Output Analysis

  • Fd 17 is a descriptor of established TCP socket (22.0.0.4:58795 -> 22.0.0.3:6666)

  • Fd 17 is offloaded by XLIO

  • The current usage of the receive buffer is 0 bytes, while the max possible is 87380

  • The connection (PCB) flags are TF_WND_SCALE and TF_NODELAY (PCB0x140)

  • Window scaling is enabled, receive and send scales equal 7

  • Congestion windows equal 1662014

  • Unsent queue is empty

  • There is a single packet of 14 bytes in the un-acked queue (seqno 12678066)

  • The last acknowledge sequence number is 12678066

XLIO Logs

Use the XLIO logs in order to trace XLIO operations. XLIO logs can be controlled by the XLIO_TRACELEVEL variable. This variable's default value is 3, meaning that the only logs obtained are those with severity of PANIC, ERROR, and WARNING.

You can increase the XLIO_TRACELEVEL variable value up to 6 (as described in XLIO Configuration Parameters to see more information about each thread's operation. Use the XLIO_LOG_DETAILS=3 to add a time stamp to each log line. This can help to check the time difference between different events written to the log.

Use the XLIO_LOG_FILE=/tmp/my_file.log to save the daily events. It is recommended to check these logs for any XLIO WARNINGs and errors. Refer to the Troubleshooting section to help resolve the different issues in the log.

XLIO will replace a single '%d' appearing in the log file name with the pid of the process loaded with XLIO. This can help in running multiple instances of XLIO each with its own log file name.

When XLIO_LOG_COLORS is enabled, XLIO uses a color scheme when logging: Red for errors and warnings, and dim for low level debugs.

Use the XLIO_HANDLE_SIGSEGV to print a backtrace if a segmentation fault occurs.

Ethernet Counters

Look at the Ethernet counters (by using the ifconfig command) to understand whether the traffic is passing through the kernel or through the XLIO (Rx and Tx).

tcpdump

For tcpdump to capture offloaded traffic, please follow instructions in section Offloaded Traffic Sniffer in the MLNX_OFED User Manual.

NIC Counters

Look at the NIC counters to monitor HW interface level packets received and sent, drops, errors, and other useful information.

Copy
Copied!
            

ls /sys/class/net/eth2/statistics/

Peer notification service handles TCP half-open connections where one side discovers the connection was lost but the other side still see it as active.

The peer-notification daemon is started at system initialization or manually under super user permissions.

The daemon collects information about TCP connections from all the running XLIO processes. Upon XLIO process termination (identified as causing TCP half open connection) the daemon notifies the peers (by sending Reset packets) in order to let them delete the TCP connections on their side.

This section lists problems that can occur when using XLIO, and describes solutions for these problems.

  1. High Log Level

    Copy
    Copied!
                

    XLIO: WARNING: ***************************************************************   XLIO: WARNING: *XLIO is currently configured with high log level*   XLIO: WARNING: *Application performance will decrease in this log level!*   XLIO: WARNING: *This log level is recommended for debugging purposes only*   XLIO: WARNING: ***************************************************************

This warning message indicates that you are using XLIO with a high log level.

The XLIO_TRACELEVEL variable value is set to 4 or more, which is good for troubleshooting but not for live runs or performance measurements.

Solution: Set XLIO_TRACELEVEL to its default value 3.

2. On running an application with XLIO, the following error is reported:

Copy
Copied!
            

ERROR: ld.so: object 'libxlio.so' from LD_PRELOAD cannot be preloaded: ignored.

Solution: Check that libxlio is properly installed, and that libxlio.so is located in /usr/lib (or in /usr/lib64, for 64-bit machines).

3. On attempting to install libxlio rpm, the following error is reported:

Copy
Copied!
            

#rpm –ivh libxlio-w.x.y-z.rpm error: can't create transaction lock

Solution: Install the rpm with privileged user (root).

4. The following warning is reported:

Copy
Copied!
            

XLIO:  WARNING: ********************************************************** XLIO:  WARNING: Your current max locked memory is: 33554432. Please change it to unlimited. XLIO:  WARNING: Set this user's default to `ulimit -l unlimited`. XLIO:  WARNING: Read more about this issue in the XLIO's User Manual. XLIO:  WARNING: **********************************************************

Solution: When working with root, increase the maximum locked memory to 'unlimited' by using the following command:

Copy
Copied!
            

#ulimit -l unlimited

When working as a non-privileged user, ask your administrator to increase the maximum locked memory to unlimited.

5. Lack of huge page resources in the system. The following warning is reported:

Copy
Copied!
            

XLIO WARNING: ************************************************************** XLIO WARNING: * NO IMMEDIATE ACTION NEEDED! XLIO WARNING: * Not enough hugepage resources for XLIO memory allocation. XLIO WARNING: * XLIO will continue working with regular memory allocation. XLIO INFO   : * Optional: XLIO INFO   : *   1. Switch to a different memory allocation type XLIO INFO   : *      (XLIO_MEM_ALLOC_TYPE!= 2) XLIO INFO   : *   2. Restart process after increasing the number of XLIO INFO   : *      hugepages resources in the system: XLIO INFO   : *      "echo 1000000000 > /proc/sys/kernel/shmmax" XLIO INFO   : *      "echo 800 > /proc/sys/vm/nr_hugepages" XLIO WARNING: * Please refer to the memory allocation section in the XLIO's XLIO WARNING: * User Manual for more information XLIO WARNING: ***************************************************************

This warning message means that you are using XLIO with huge page memory allocation enabled (XLIO_MEM_ALLOC_TYPE=2), but not enough huge page resources are available in the system. XLIO will use contiguous pages instead.

Note that XLIO_MEM_ALLOC_TYPE= 1 is not supported while working with Microsoft hypervisor. In this case – please use XLIO_MEM_ALLOC_TYPE= 0 (malloc).

If you want XLIO to take full advantage of the performance benefits of huge pages, restart the application after adding more huge page resources to your system similar to the details in the warning message above, or try to free unused huge page shared memory segments with the script below.

Copy
Copied!
            

echo 1000000000 > /proc/sys/kernel/shmmax echo 800 > /proc/sys/vm/nr_hugepages

If you are running multiple instances of your application loaded with XLIO, you will probably need to increase the values used in the above example.

Important

Check that your host machine has enough free memory after allocating the huge page resources for XLIO. Low system memory resources may cause your system to hang.

Warning

Use "ipcs -m" and "ipcrm -m shmid" to check and clean unused shared memory segments.

Use the following script to release XLIO unused huge page resources:

Copy
Copied!
            

for shmid in `ipcs -m | grep 0x00000000 | awk '{print $2}'`; do echo 'Clearing' $shmid; ipcrm -m $shmid; done;

6. Wrong ARP resolution when multiple ports are on the same network.

When two (or more) ports are configured on the same network (e.g. 192.168.1.1/24 and 192.168.1.2/24) XLIO will only detect the MAC address of one of the interfaces. This will result in incorrect ARP resolution.

This is due to the way Linux handles ARP responses in this configuration. By default, Linux returns the same MAC address for both IPs. This behavior is called “ARP Flux”.

To fix this, it is required to change some of the interface’s settings:

Copy
Copied!
            

$ sysctl -w net.ipv4.conf.[DEVICE].arp_announce=1 $ sysctl -w net.ipv4.conf.[DEVICE].arp_ignore=2 $ sysctl -w net.ipv4.conf.[DEVICE].rp_filter=0

To verify the issue is resolved, clear the ARP tables on a different server that is on the same network and use the arping utility to verify that each IP reports its own MAC address correctly:

Copy
Copied!
            

$ ip -s neigh flush all   # clear the arp table on the remote server   $ arping -b -I ens3f1 192.168.1.1 ARPING 192.168.1.1 from 192.168.1.5 ens3f0 Unicast reply from 192.168.1.1 [24:8A:07:9A:16:0A]  0.548ms $ arping  -b -I ens3f1 192.168.1.2 ARPING 192.168.1.2 from 192.168.1.5 ens3f0 Unicast reply from 192.168.1.2 [24:8A:07:9A:16:1A]  0.548ms

7. XLIO process cannot establish connection with daemon (xliod) in Microsoft hypervisor environment.

When working with Microsoft Hypervisor, XLIO daemon must be enabled in order to submit Traffic Control (TC) rules which will offload the traffic to the TAP device in case of plug-out events.

The following warning is reported during XLIO startup:

Copy
Copied!
            

XLIO WARNING: *********************************************************** XLIO WARNING: * Can not establish connection with the daemon (xliod).    * XLIO WARNING: * UDP/TCP connections are likely to be limited.           * XLIO WARNING: ***********************************************************

The following warning is reported during any connection establishment/termination:

Copy
Copied!
            

XLIO WARNING: ring_tap[0x1efc910]:135:attach_flow() Add TC rule failed with error=-19

To fix this, run “xliod” as root.

8. Device memory programming is not supported on VMs that lack Blue Flame support.
XLIO will explicitly disable Device Memory capability if it detects Blue Flame support is missing on the node on which user application was launched using XLIO. The following warning message will appear:

Copy
Copied!
            

XLIO WARNING: Device Memory functionality is not used on devices w/o Blue Flame support.

© Copyright 2023, NVIDIA. Last updated on May 23, 2023.