Skip to content

Conversation

@sodar
Copy link
Owner

@sodar sodar commented Aug 12, 2020

TODO:

  • Document (somewhere) dpdk-example application and command line arguments.
  • Test on a machine other than DigitalOcean VM (preferrably a machine with a NIC other than virtio NIC).
  • Test using dpdk/devtools/test-null.sh.
  • Build dpdk with Mellanox NICs support.

TODO in rr:

  • How to expose RDMA_VERBS_IOCTL ioctl command to rr?
  • What ETHTOOL command (cmd 76) mlx5 PMD uses which is not exposed in Linux headers?
  • Handle ETHTOOL_GLINKSETTINGS properly.
  • Handle ETHTOOL_GSTATS properly.

@sodar sodar self-assigned this Aug 12, 2020
@sodar sodar marked this pull request as draft August 12, 2020 11:31
@sodar
Copy link
Owner Author

sodar commented Aug 12, 2020

Note to self:

@sodar
Copy link
Owner Author

sodar commented Aug 14, 2020

Run rr record with dpdk-example on Packet's bare metal server (flavour: c3.small.x86):

Hehe

[ds@6f3019a0a899 dev]$ ls -l /home/ds/dev/rr-obj/share/rr/rr_page_64
-rw-rw-r-- 1 ds ds 32 Aug 15 13:46 /home/ds/dev/rr-obj/share/rr/rr_page_64

@sodar
Copy link
Owner Author

sodar commented Aug 15, 2020

Successful run with dpdk-example with:

  • no-huge;
  • no-pci.

Output:

rr: Saving execution to trace directory `/root/.local/share/rr/dpdk-example-8'.
EAL: Detected 16 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Static memory layout is selected, amount of reserved memory can be adjusted with -m or --socket-mem
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: Probing VFIO support...
EAL: No legacy callbacks, legacy socket not created

It was possible to replay the trace:

[root@ams1-c3 ~]# ~/rr-obj/bin/rr replay
GNU gdb (GDB) Red Hat Enterprise Linux 8.2-11.el8
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /root/.local/share/rr/dpdk-example-8/mmap_hardlink_3_dpdk-example...done.
Really redefine built-in command "restart"? (y or n) [answered Y; input not from terminal]
Remote debugging using 127.0.0.1:2863
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
0x00007f2ee07fd050 in _start () from /lib64/ld-linux-x86-64.so.2
Missing separate debuginfos, use: yum debuginfo-install glibc-2.28-101.el8.x86_64
(rr) b rte_eal_init
Breakpoint 1 at 0x41d39d9: file ../lib/librte_eal/linux/eal.c, line 969.
(rr) b rte_eal_cleanup
Breakpoint 2 at 0x41d4695: file ../lib/librte_eal/linux/eal.c, line 1356.
(rr) c
Continuing.
warning: Loadable section ".note.gnu.property" outside of ELF segments
warning: Loadable section ".note.gnu.property" outside of ELF segments
warning: Loadable section ".note.gnu.property" outside of ELF segments

Breakpoint 1, rte_eal_init (argc=3, argv=0x7ffcb365d278) at ../lib/librte_eal/linux/eal.c:969
969     ../lib/librte_eal/linux/eal.c: No such file or directory.
Missing separate debuginfos, use: yum debuginfo-install elfutils-libelf-0.178-7.el8.x86_64 numactl-libs-2.0.12-9.el8.x86_64 zlib-1.2.11-13.el8.x86_64
(rr) c
Continuing.
EAL: Detected 16 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Static memory layout is selected, amount of reserved memory can be adjusted with -m or --socket-mem
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: Probing VFIO support...
EAL: No legacy callbacks, legacy socket not created
[New Thread 2857.2858]
[New Thread 2857.2859]
[New Thread 2857.2860]

Thread 1 hit Breakpoint 2, rte_eal_cleanup () at ../lib/librte_eal/linux/eal.c:1356
1356    in ../lib/librte_eal/linux/eal.c
(rr) c
Continuing.

Thread 4 received signal SIGKILL, Killed.
[Switching to Thread 2857.2860]
0x0000000070000002 in ?? ()
(rr) reverse-cont
Continuing.
[New Thread 2857.2857]
[New Thread 2857.2858]
[New Thread 2857.2859]
[Switching to Thread 2857.2857]

Thread 5 hit Breakpoint 2, rte_eal_cleanup () at ../lib/librte_eal/linux/eal.c:1356
1356    in ../lib/librte_eal/linux/eal.c
(rr) reverse-cont
Continuing.

Thread 5 hit Breakpoint 1, rte_eal_init (argc=3, argv=0x7ffcb365d278) at ../lib/librte_eal/linux/eal.c:969
969     in ../lib/librte_eal/linux/eal.c

@sodar
Copy link
Owner Author

sodar commented Aug 16, 2020

After applying b667be5.

@sodar
Copy link
Owner Author

sodar commented Aug 21, 2020

Recorded a trace on x1.small.x86 machine on Packet. Record and replay was successful.

x1.small.x86 has the following spec:

- CPU: Intel(R) Xeon(R) CPU E3-1578L v5 @ 2.00GHz (4 cores, 8 threads);
- MEM: 32 GB
- NIC:
    - Intel Corporation Ethernet Controller X710 for 10GbE backplane (rev 02) [2 port] [PCI 8086:1581 15d9:0000]

@sodar
Copy link
Owner Author

sodar commented Aug 31, 2020

Testing on c3.small.x86

  • dpdk-example - recorded, on replay still having the following issue:

    [FATAL /home/ds/dev/rr/src/ReplaySession.cc:1053:check_ticks_consistency()]
     (task 7582 (rec:7558) at time 3392)
     -> Assertion `ticks_now == trace_ticks' failed to hold.
       ticks mismatch for 'SYSCALL: ioctl'; expected 9914340, got 9914334
    
  • dpdk-receive-and-dump - recorded (fix for recording 6a611d9); however application behaviour changes:

    • without recording - goes into packet RX loop;
    • with recording - lcore is not launched;

@sodar
Copy link
Owner Author

sodar commented Aug 31, 2020

What ETHTOOL command (cmd 76) mlx5 PMD uses which is not exposed in Linux headers?

It is ETHTOOL_GLINKSETTINGS (b626777).

@sodar
Copy link
Owner Author

sodar commented Aug 31, 2020

Continued on c3.small.x86:

  • dpdk-example with custom built rdma-core and libmlx5:

    net_mlx5: mlx5.c:2978: mlx5_pci_probe(): checking device "mlx5_1"
    net_mlx5: mlx5.c:3012: mlx5_pci_probe(): PCI information matches for device "mlx5_1"
    net_mlx5: mlx5.c:2978: mlx5_pci_probe(): checking device "mlx5_0"
    net_mlx5: mlx5.c:3243: mlx5_pci_probe(): no E-Switch support detected
    net_mlx5: mlx5.c:2132: mlx5_dev_spawn(): naming Ethernet device "0000:01:00.1"
    [FATAL /home/ds/dev/rr/src/ReplaySession.cc:596:enter_syscall()]
     (task 5518 (rec:5513) at time 10008)
     -> Assertion `!syscall_bp_vm' failed to hold.
    

    trace: https://gist.github.com/sodar/9b5d73b2b0661d4e5ec1c0c7e0b282b3

  • attempted to run dpdk-example with:

    MLX5_STALL_CQ_POLL=1 /opt/dev/rr/bin/rr record -n ./dpdk-example -w 0000:01:00.1 --log-level lib.eal:debug --log-level pmd.net.mlx5:debug
    

    stacktrace changed from mlx5_enable_sandy_bridge_fix to execute_ioctl.

    Something breaks with mmap syscalls to descriptor used to map /dev/infiniband/uverbs1. mmap is called with the following parameters:

    strace: mmap(NULL, 4096, PROT_WRITE, MAP_SHARED, 79, 0x300000)
    
    void* addr    : rdi            0x0                 0
    size_t length : rsi            0x1000              4096
    int prot      : rdx            0x2                 2
    int flags     : r10            0x1                 1
    int fd        : r8             0x4f                79
    off_t offset  : r9             0x300000            3145728
    

    rr recording log of this mmap call:

    [INFO log()] SYSCALL: mmap
    [INFO log()] (none)
    [RecordSession] EXEC_IN_SYSCALL: status=0x857f (SYSCALL)
    [Scheduler] Scheduling next task (PREVENT_SWITCH)
    [Scheduler]   (4115 is un-switchable at SYSCALL: mmap)
    [RecordSession] trace time 9909: Active task is 4115. Events:
    [INFO log()] SYSCALL: mmap
    [INFO log()] (none)
    [RecordSession] EXEC_SYSCALL_DONE: status=0x857f (SYSCALL)
    [RecordSession]   original_syscallno:9 (mmap); return val:0x7f7a976a4000
    [record_syscall] 4115: processing: SYSCALL: mmap -- time: 9909
    [AddressSpace] mmap(0x7f7a976a4000, 4096, 0x2, 0x1, 0x300000)
    [AddressSpace] munmap(0x7f7a976a4000, 4096)
    [AddressSpace]   mapping at 0x7f7a976a5000 out of range, done.
    [AddressSpace]   mapping 0x7f7a976a4000-0x7f7a976a5000 -w-s 00300000 00:06 36737      /dev/infiniband/uverbs1
    [AddressSpace]   no mappings to coalesce
    [util]   copying non-regular-file
    [record_syscall] /dev/infiniband/uverbs1 is SHARED|writable; that's not handled correctly yet. Optimistically hoping it's not written by programs outside the rr tracee tree.
    

    stored logs: TODO (20200901, dpdk-example-4) from the following execution:

    MLX5_STALL_CQ_POLL=1 RR_LOG=all:debug RR_LOG_FILE=/tmp/rr-record.log /opt/dev/rr/bin/rr record -n ./dpdk-example -w 0000:01:00.1 --log-level lib.eal:debug --log-level pmd.net.mlx5:debug
    RR_LOG=all:debug RR_LOG_FILE=/tmp/rr-replay.log /opt/dev/rr/bin/rr replay
    /opt/dev/rr/bin/rr replay -g 9908
    

@sodar
Copy link
Owner Author

sodar commented Sep 4, 2020

Working with recording and replaying traces of testpmd on x1.small.x86 with vfio-pci bound to testpmd:

# rr crash
[FATAL /home/ds/dev/rr/src/ReplaySession.cc:596:enter_syscall()]
 (task 6921 (rec:6329) at time 4713)
 -> Assertion `!syscall_bp_vm' failed to hold.
# ...
{
  real_time:4580.834249 global_time:4712, event:`SYSCALL: ioctl' (state:EXITING_SYSCALL) tid:6329, ticks:2430237
rax:0x0 rbx:0x52549a0 rcx:0xffffffffffffffff rdx:0x7ffede01b708 rsi:0x3b67 rdi:0x1c rbp:0x7ffede01b760 rsp:0x7ffede01a698 r8:0x0 r9:0x7ffede0191c7 r10:0x0 r11:0x246 r12:0x405a00 r13:0x7ffede01cc10 r14:0x0 r15:0x0 rip:0x7fee910f287b eflags:0x3246 cs:0x33 ss:0x2b ds:0x0 es:0x0 fs:0x0 gs:0x0 orig_rax:0x10 fs_base:0x7fee925c1000 gs_base:0x0
}
{
  real_time:4580.834381 global_time:4713, event:`SYSCALL: ioctl' (state:ENTERING_SYSCALL) tid:6329, ticks:2430245
rax:0xffffffffffffffda rbx:0x52549a0 rcx:0xffffffffffffffff rdx:0x7ffede01b704 rsi:0x3b68 rdi:0x1c rbp:0x7ffede01b760 rsp:0x7ffede01a698 r8:0x0 r9:0x7ffede0191c7 r10:0x0 r11:0x246 r12:0x405a00 r13:0x7ffede01cc10 r14:0x0 r15:0x0 rip:0x7fee910f287b eflags:0x246 cs:0x33 ss:0x2b ds:0x0 es:0x0 fs:0x0 gs:0x0 orig_rax:0x10 fs_base:0x7fee925c1000 gs_base:0x0
}
{
  real_time:4580.834422 global_time:4714, event:`SYSCALL: ioctl' (state:EXITING_SYSCALL) tid:6329, ticks:2430245
rax:0x0 rbx:0x52549a0 rcx:0xffffffffffffffff rdx:0x7ffede01b704 rsi:0x3b68 rdi:0x1c rbp:0x7ffede01b760 rsp:0x7ffede01a698 r8:0x0 r9:0x7ffede0191c7 r10:0x0 r11:0x246 r12:0x405a00 r13:0x7ffede01cc10 r14:0x0 r15:0x0 rip:0x7fee910f287b eflags:0x3246 cs:0x33 ss:0x2b ds:0x0 es:0x0 fs:0x0 gs:0x0 orig_rax:0x10 fs_base:0x7fee925c1000 gs_base:0x0
}

# trace
(gdb) bt
#0  0x00007fee910ecb5f in write () from /lib64/libc.so.6
#1  0x00007fee9107c89d in _IO_file_write@@GLIBC_2.2.5 () from /lib64/libc.so.6
#2  0x00007fee9107bc0f in new_do_write () from /lib64/libc.so.6
#3  0x00007fee9107d969 in __GI__IO_do_write () from /lib64/libc.so.6
#4  0x00007fee9107cf6f in __GI__IO_file_xsputn () from /lib64/libc.so.6
#5  0x00007fee91071e2c in fwrite () from /lib64/libc.so.6
#6  0x00000000011cb904 in console_log_write (c=0x0, buf=0x5282c80 "EAL:   0000:02:00.0 VFIO group is not viable! Not all devices in IOMMU group bound to VFIO or unbound\n", size=102) at ../dpdk/lib/librte_eal/linux/eal_log.c:31
#7  0x00007fee91071512 in _IO_cookie_write () from /lib64/libc.so.6
#8  0x00007fee9107bc0f in new_do_write () from /lib64/libc.so.6
#9  0x00007fee9107d969 in __GI__IO_do_write () from /lib64/libc.so.6
#10 0x00007fee9107bab8 in __GI__IO_file_sync () from /lib64/libc.so.6
#11 0x00007fee91070fd1 in fflush () from /lib64/libc.so.6
#12 0x0000000001190b22 in rte_vlog (level=4, logtype=0, format=0x4494c10 "EAL:   %s VFIO group is not viable! Not all devices in IOMMU group bound to VFIO or unbound\n", ap=0x7ffede01a5c0)
    at ../dpdk/lib/librte_eal/common/eal_common_log.c:448
#13 0x0000000001190bcd in rte_log (level=4, logtype=0, format=0x4494c10 "EAL:   %s VFIO group is not viable! Not all devices in IOMMU group bound to VFIO or unbound\n") at ../dpdk/lib/librte_eal/common/eal_common_log.c:464
#14 0x00000000011d4861 in rte_vfio_setup_device (sysfs_base=0x44a5472 "/sys/bus/pci/devices", dev_addr=0x7ffede01b790 "0000:02:00.0", vfio_dev_fd=0x7ffede01b78c, device_info=0x7ffede01c790) at ../dpdk/lib/librte_eal/linux/eal_vfio.c:760
#15 0x000000000125aedb in pci_vfio_map_resource_primary (dev=0x528aba0) at ../dpdk/drivers/bus/pci/linux/pci_vfio.c:709
#16 0x000000000125b71c in pci_vfio_map_resource (dev=0x528aba0) at ../dpdk/drivers/bus/pci/linux/pci_vfio.c:910
#17 0x000000000125703f in rte_pci_map_device (dev=0x528aba0) at ../dpdk/drivers/bus/pci/linux/pci.c:74
#18 0x0000000001255500 in rte_pci_probe_one_driver (dr=0x4b37de0 <rte_i40e_pmd>, dev=0x528aba0) at ../dpdk/drivers/bus/pci/pci_common.c:192
#19 0x00000000012557b1 in pci_probe_all_drivers (dev=0x528aba0) at ../dpdk/drivers/bus/pci/pci_common.c:279
#20 0x0000000001255837 in pci_probe () at ../dpdk/drivers/bus/pci/pci_common.c:306
#21 0x00000000011892fc in rte_bus_probe () at ../dpdk/lib/librte_eal/common/eal_common_bus.c:72
#22 0x00000000011c5468 in rte_eal_init (argc=11, argv=0x7ffede01cc18) at ../dpdk/lib/librte_eal/linux/eal.c:1280
#23 0x000000000060a99a in main (argc=11, argv=0x7ffede01cc18) at ../dpdk/app/test-pmd/testpmd.c:3673

after changing to igb_uio:

# command line
/opt/dev/rr/bin/rr record -n \
    /opt/dev/dpdk/bin/dpdk-testpmd \
        -l 0-3 \
        -w pci:0000:02:00.0 \
        --log-level lib.eal:debug \
        -- \
        --port-topology=loop \
        --forward-mode=icmpecho \
        --nb-cores=2

# rr replay
EAL: PCI device 0000:02:00.0 on NUMA socket -1
EAL:   Invalid NUMA socket, default to 0                                                                                                                                                                                                     EAL:   probe driver: 8086:1581 net_i40e
EAL:   PCI memory mapped at 0x1100800000                                                                                                                                                                                                     EAL:   PCI memory mapped at 0x1101000000
EAL: Probe PCI driver: net_i40e (8086:1581) device: 0000:02:00.0 (socket 0)
[ERROR /home/ds/dev/rr/src/Registers.cc:295:maybe_print_reg_mismatch()] rbx 0x7ffe4cd37ab0 != 0x7ffe4cd26ec0 (replaying vs. recorded)
[ERROR /home/ds/dev/rr/src/Registers.cc:295:maybe_print_reg_mismatch()] rsi 0x7ffe4cd37ac0 != 0x7ffe4cd26ed0 (replaying vs. recorded)                                                                                                        [ERROR /home/ds/dev/rr/src/Registers.cc:295:maybe_print_reg_mismatch()] rdi 0x7ffe4cd37ab0 != 0x7ffe4cd26ec0 (replaying vs. recorded)                                                                                                        [ERROR /home/ds/dev/rr/src/Registers.cc:295:maybe_print_reg_mismatch()] rbp 0x7ffe4cd37ac0 != 0x7ffe4cd26ed0 (replaying vs. recorded)
[ERROR /home/ds/dev/rr/src/Registers.cc:295:maybe_print_reg_mismatch()] r9 0 != 0x1003adcee (replaying vs. recorded)
[ERROR /home/ds/dev/rr/src/Registers.cc:295:maybe_print_reg_mismatch()] r10 0xa != 0 (replaying vs. recorded)
[FATAL /home/ds/dev/rr/src/Registers.cc:405:compare_register_files()]
 (task 3551 (rec:3176) at time 4715)
 -> Assertion `!bail_error || match' failed to hold. Fatal register mismatch (ticks/rec:2102485/2201436)

{
  real_time:428.113223 global_time:4714, event:`SYSCALL: nanosleep' (state:EXITING_SYSCALL) tid:3176, ticks:2102472
rax:0x0 rbx:0x7ffe4cd37ab0 rcx:0xffffffffffffffff rdx:0x0 rsi:0x7ffe4cd37ac0 rdi:0x7ffe4cd37ab0 rbp:0x7ffe4cd37ac0 rsp:0x7ffe4cd37a70 r8:0x0 r9:0x0 r10:0xa r11:0x246 r12:0x405a00 r13:0x7ffe4cd38180 r14:0x0 r15:0x0 rip:0x7fa4594ac260 eflags:0x3246 cs:0x33 ss:0x2b ds:0x0 es:0x0 fs:0x0 gs:0x0 orig_rax:0x23 fs_base:0x7fa45a699000 gs_base:0x0                                                                                                                                       }                                                                                                                                                                                                                                            {                                                                                                                                                                                                                                              real_time:428.113586 global_time:4715, event:`SYSCALL: nanosleep' (state:ENTERING_SYSCALL) tid:3176, ticks:2201436
rax:0xffffffffffffffda rbx:0x7ffe4cd26ec0 rcx:0xffffffffffffffff rdx:0x0 rsi:0x7ffe4cd26ed0 rdi:0x7ffe4cd26ec0 rbp:0x7ffe4cd26ed0 rsp:0x7ffe4cd26e80 r8:0x0 r9:0x1003adcee r10:0x0 r11:0x246 r12:0x405a00 r13:0x7ffe4cd38180 r14:0x0 r15:0x0 rip:0x7fa4594ac260 eflags:0x246 cs:0x33 ss:0x2b ds:0x0 es:0x0 fs:0x0 gs:0x0 orig_rax:0x23 fs_base:0x7fa45a699000 gs_base:0x0
}
{
  real_time:428.113753 global_time:4716, event:`SYSCALL: nanosleep' (state:EXITING_SYSCALL) tid:3176, ticks:2201436
rax:0x0 rbx:0x7ffe4cd26ec0 rcx:0xffffffffffffffff rdx:0x0 rsi:0x7ffe4cd26ed0 rdi:0x7ffe4cd26ec0 rbp:0x7ffe4cd26ed0 rsp:0x7ffe4cd26e80 r8:0x0 r9:0x1003adcee r10:0x0 r11:0x246 r12:0x405a00 r13:0x7ffe4cd38180 r14:0x0 r15:0x0 rip:0x7fa4594ac260 eflags:0x3246 cs:0x33 ss:0x2b ds:0x0 es:0x0 fs:0x0 gs:0x0 orig_rax:0x23 fs_base:0x7fa45a699000 gs_base:0x0
}

# trace
(gdb) bt
#0  0x00007fa4594ac260 in nanosleep () from /lib64/libpthread.so.0
#1  0x00000000011c2ea1 in rte_delay_us_sleep (us=1000) at ../dpdk/lib/librte_eal/unix/eal_unix_timer.c:22
#2  0x0000000001ba6f4e in i40e_pf_reset (hw=0x1003ad980) at ../dpdk/drivers/net/i40e/base/i40e_common.c:1413
#3  0x0000000001ce7b91 in eth_i40e_dev_init (dev=0x51d3140 <rte_eth_devices>, init_params=0x0) at ../dpdk/drivers/net/i40e/i40e_ethdev.c:1519
#4  0x0000000001090b70 in rte_eth_dev_create (device=0x603bbb0, name=0x6032c58 "0000:02:00.0", priv_data_size=10752, ethdev_bus_specific_init=0x1ce5067 <eth_dev_pci_specific_init>, bus_init_params=0x603bba0,
    ethdev_init=0x1ce786f <eth_i40e_dev_init>, init_params=0x0) at ../dpdk/lib/librte_ethdev/rte_ethdev.c:4320
#5  0x0000000001ce5d97 in eth_i40e_pci_probe (pci_drv=0x4b37de0 <rte_i40e_pmd>, pci_dev=0x603bba0) at ../dpdk/drivers/net/i40e/i40e_ethdev.c:650
#6  0x00000000012555ba in rte_pci_probe_one_driver (dr=0x4b37de0 <rte_i40e_pmd>, dev=0x603bba0) at ../dpdk/drivers/bus/pci/pci_common.c:204
#7  0x00000000012557b1 in pci_probe_all_drivers (dev=0x603bba0) at ../dpdk/drivers/bus/pci/pci_common.c:279
#8  0x0000000001255837 in pci_probe () at ../dpdk/drivers/bus/pci/pci_common.c:306
#9  0x00000000011892fc in rte_bus_probe () at ../dpdk/lib/librte_eal/common/eal_common_bus.c:72
#10 0x00000000011c5468 in rte_eal_init (argc=11, argv=0x7ffe4cd38188) at ../dpdk/lib/librte_eal/linux/eal.c:1280
#11 0x000000000060a99a in main (argc=11, argv=0x7ffe4cd38188) at ../dpdk/app/test-pmd/testpmd.c:3673

I would name this, __very Work in Progress__.

This commit:

- `0xc0181b01` is a RDMA_VERBS_IOCTL `ioctl` command used internally by
  libibverbs, which is used by mlx5 DPDK PMD.
- `76` is an ETHTOOL subcommand used by mlx5 PMD.
For now just handle the ETHTOOL_GSTATS command. Does not do anything
useful.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants