mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 22:35:15 +00:00
netdev-dpdk: Use LSC interrupt mode.
Querying link status may get delayed for an undeterministic (long) time with mlx5 ports. This is a consequence of the mlx5 driver calling ethtool kernel API and getting stuck on the kernel RTNL lock while some other operation is in progress under this lock. One impact for long link status query is that it is called under the bond lock taken in write mode periodically in bond_run(). In parallel, datapath threads may block requesting to read bonding related info (like for example in bond_check_admissibility()). The LSC interrupt mode is available with many DPDK drivers and is used by default with testpmd. It seems safe enough to switch on this feature by default in OVS. We keep the per interface option to disable this feature in case of an unforeseen bug. Signed-off-by: David Marchand <david.marchand@redhat.com> Reviewed-by: Robin Jarry <rjarry@redhat.com> Acked-by: Mike Pattrick <mkp@redhat.com> Acked-by: Maxime Coquelin <maxime.coquelin@redhat.com> Acked-by: Kevin Traynor <ktraynor@redhat.com> Acked-by: Aaron Conole <aconole@redhat.com>
This commit is contained in:
committed by
Kevin Traynor
parent
6b09799f03
commit
2f196c80e7
@@ -2397,7 +2397,18 @@ netdev_dpdk_set_config(struct netdev *netdev, const struct smap *args,
|
||||
}
|
||||
}
|
||||
|
||||
lsc_interrupt_mode = smap_get_bool(args, "dpdk-lsc-interrupt", false);
|
||||
lsc_interrupt_mode = smap_get_bool(args, "dpdk-lsc-interrupt", true);
|
||||
if (lsc_interrupt_mode && !(*info.dev_flags & RTE_ETH_DEV_INTR_LSC)) {
|
||||
if (smap_get(args, "dpdk-lsc-interrupt")) {
|
||||
VLOG_WARN_BUF(errp, "'%s': link status interrupt is not "
|
||||
"supported.", netdev_get_name(netdev));
|
||||
err = EINVAL;
|
||||
goto out;
|
||||
}
|
||||
VLOG_DBG("'%s': not enabling link status interrupt.",
|
||||
netdev_get_name(netdev));
|
||||
lsc_interrupt_mode = false;
|
||||
}
|
||||
if (dev->requested_lsc_interrupt_mode != lsc_interrupt_mode) {
|
||||
dev->requested_lsc_interrupt_mode = lsc_interrupt_mode;
|
||||
netdev_request_reconfigure(netdev);
|
||||
|
Reference in New Issue
Block a user