https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=268176
ss3bsd <3226388...@jcom.home.ne.jp> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |3226388...@jcom.home.ne.jp --- Comment #9 from ss3bsd <3226388...@jcom.home.ne.jp> --- FYI, I experienced a similar problem several years ago and needed to apply some ad-hoc remedies to make if_ix with SR-IOV function properly. I have been using the interface (X557 on A2SDV-8C-TLN5F) without a problem since then. Here are the remedies I have applied. Please note that some of them may not be required anymore for the current OS/driver. Also, each of them perhaps has side-effects and may not be appropriate for every use case. 1. patches for ports/net/intel-ix-kmod (equivalent patches can be applied to in-tree sys/dev/ixgbe) ``` --- if_sriov.c +++ if_sriov.c @@ -244,6 +244,9 @@ /* Tag all traffic with provided vlan tag. */ vmvir = (tag | IXGBE_VMVIR_VLANA_DEFAULT); } + + vmolr |= (IXGBE_VMOLR_BAM | IXGBE_VMOLR_ROMPE | IXGBE_VMOLR_MPE | IXGBE_VMOLR_AUPE); + IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf->pool), vmolr); IXGBE_WRITE_REG(hw, IXGBE_VMVIR(vf->pool), vmvir); } /* ixgbe_vf_set_default_vlan */ ``` - PF needs to support PROMISC, otherwise VFs cannot receive some broadcast messages that may be required when acquiring address information (DHCP or IPv6 equivalent). If the owner of each VF is different, this change might introduce a security risk. In my use case, I am the owner of every VF, so this is not a problem. ``` @@ -688,10 +688,10 @@ * With 64 VFs, you can only have two queues per VF. * With 32 VFs, you can have up to four queues per VF. */ - if (num_vfs >= IXGBE_32_VM) + //if (num_vfs >= IXGBE_32_VM) sc->iov_mode = IXGBE_64_VM; - else - sc->iov_mode = IXGBE_32_VM; + //else + // sc->iov_mode = IXGBE_32_VM; /* Again, reserving 1 VM's worth of queues for the PF */ sc->pool = sc->iov_mode - 1; ``` - The driver changes its behavior (such as a different number of rx/tx queues for each VF) depending on the number of VFs initialized. It is expected that when only a smaller number of VFs are used, a larger number of queues are assigned for each VF and the performance gets better. However, in my environment VF instances did not work at all when a smaller number of VF instances is set for iovctl. 2. rc.conf ifconfig_ix0="promisc down" - set the PF promisc (if supporting broadcast in VFs) - keep the PF interface down until initializing VFs by iovctl, and up it later manually or by script 3. config for iovctl - do not use the first couple of VF instances. They are unstable (may be conflicting with PF, but I do not know why). Use VF-2 or later. - if you choose not to apply the patch, set a large number (>= 32) of VFs (num_vfs) even if they are not actually utilized. 4. use the driver in ports - It seems like that the recent (FreeBSD 14) in-tree ix/ixv drivers (with a patch equivalent to the above one) seem to function on some level. However, I observe they occasionally fail their initialization on boot. -- You are receiving this mail because: You are the assignee for the bug.