foniod/redbpf

XDP Tx ring disable timeout when loader is stopped

Opened this issue · 3 comments

Hello, I've discovered in /var/log/syslog that when the loader program is stopped, there is a disable timeout, and then the i40e driver enters allmulti mode:

Apr 26 15:26:55 SRV-PVE-2 kernel: [895028.655165] i40e 0000:01:00.0: VSI seid 404 XDP Tx ring 33 disable timeout
Apr 26 15:26:57 SRV-PVE-2 kernel: [895030.595925] i40e 0000:01:00.0: entering allmulti mode.

I'm using the same loader code as in this example. I have a few maps in my BPF program:

  • 3x PerfMap with 1024 max_entries
  • 2x HashMap with 1 max_entries
  • 1x PerCpuHashMap with 1_000_000 max_entries

I suspect the last one caused the issue - it's used as a rate limit for each saddr as a key, and a counter as the value.

Hi @QuiiBz, do you have suggestions for reproducing this issue?
As I understand it, i40e is a driver for Intel's NIC, right? I don't have a hands-on access to this kind of hardware but it'd be very helpful if it can be emulated somehow.

Yes, i40e is a driver for the following controllers:

  • Intel® Ethernet Controller X710
  • Intel® Ethernet Controller XL710
  • Intel® Ethernet Network Connection X722
  • Intel® Ethernet Controller XXV710
  • Intel® Ethernet Controller V710

Sadly, I didn't found a way to emulate it.

rsdy commented

I think allmulti mode is quite universal. If you can provide us with a complete, minimal example, I could try this on a KVM box and see if it gets triggered, then we can go from there.