On 11.10.23 18:48, Kevin Traynor wrote:
> On 11/10/2023 11:11, jm...@redhat.com wrote:
>> From: Jakob Meng <c...@jakobmeng.de>
>>
>> For better usability, the function pairs get_config() and
>> set_config() for each netdev should be symmetric: Options which are
>> accepted by set_config() should be returned by get_config() and the
>> latter should output valid options for set_config() only.
>>
>> This patch moves key-value pairs which are no valid options from
>> get_config() to the get_status() callback. For example, get_config()
>> in lib/netdev-dpdk.c returned {configured,requested}_{rx,tx}_queues
>> previously. For requested rx queues the proper option name is n_rxq,
>> so requested_rx_queues has been renamed respectively. Tx queues
>> cannot be changed by the user, hence requested_tx_queues has been
>> dropped. Both configured_{rx,tx}_queues will be returned as
>> n_{r,t}xq in the get_status() callback.
>> vi yo   
>
>> The documentation in vswitchd/vswitch.xml for status columns as well
>> as tests have been updated accordingly.
>>
>> Reported-at: https://bugzilla.redhat.com/1949855
>> Signed-off-by: Jakob Meng <c...@jakobmeng.de>
>> ---
>>   Documentation/intro/install/afxdp.rst | 12 ++---
>>   Documentation/topics/dpdk/phy.rst     |  4 +-
>>   lib/netdev-afxdp.c                    | 21 ++++++++-
>>   lib/netdev-afxdp.h                    |  1 +
>>   lib/netdev-dpdk.c                     | 49 +++++++++++---------
>>   lib/netdev-dummy.c                    | 19 ++++++--
>>   lib/netdev-linux-private.h            |  1 +
>>   lib/netdev-linux.c                    |  4 +-
>>   tests/pmd.at                          | 26 +++++------
>>   tests/system-dpdk.at                  | 64 +++++++++++++++++----------
>>   vswitchd/vswitch.xml                  | 25 ++++++++++-
>>   11 files changed, 150 insertions(+), 76 deletions(-)
>>
>
> Hi Jakob, some initial comments below.
>

Thank you ☺️

> It feels like a lot of changes in one patch, split across different netdevs. 
> I wonder could it be broken up into patches for the different netdev types ? 
> or even further like groups for related features, queues/rx-steering/flow 
> control ? Not sure what works best without causing too much intermediate 
> updates with UTs etc.
>
> Also, I'd suggest adding a cover letter with diff from previous version i.e. 
> the thing I forgot last week :-)
>

Ack, will try to split this patch up for the next revision. But first, some 
questions below ;)

>
>> diff --git a/Documentation/intro/install/afxdp.rst 
>> b/Documentation/intro/install/afxdp.rst
>> index 51c24bf5b..5776614c8 100644
>> --- a/Documentation/intro/install/afxdp.rst
>> +++ b/Documentation/intro/install/afxdp.rst
>> @@ -219,14 +219,10 @@ Otherwise, enable debugging by::
>>     ovs-appctl vlog/set netdev_afxdp::dbg
>>     To check which XDP mode was chosen by ``best-effort``, you can look for
>> -``xdp-mode-in-use`` in the output of ``ovs-appctl dpctl/show``::
>> -
>> -  # ovs-appctl dpctl/show
>> -  netdev@ovs-netdev:
>> -    <...>
>> -    port 2: ens802f0 (afxdp: n_rxq=1, use-need-wakeup=true,
>> -                      xdp-mode=best-effort,
>> -                      xdp-mode-in-use=native-with-zerocopy)
>> +``xdp-mode`` in the output of ``ovs-vsctl get interface INT 
>> status:xdp-mode``::
>> +
>> +  # ovs-vsctl get interface ens802f0 status:xdp-mode
>> +  "native-with-zerocopy"
>>     References
>>   ----------
>> diff --git a/Documentation/topics/dpdk/phy.rst 
>> b/Documentation/topics/dpdk/phy.rst
>> index f66b106c4..41cc3588a 100644
>> --- a/Documentation/topics/dpdk/phy.rst
>> +++ b/Documentation/topics/dpdk/phy.rst
>> @@ -198,7 +198,7 @@ Example::
>>      a dedicated queue, it will be explicit::
>>           $ ovs-vsctl get interface dpdk-p0 status
>> -      {..., rx_steering=unsupported}
>> +      {..., rx-steering=unsupported}
>>   
>
> The fix is correct, but the meaning of unsupported is changed so text above 
> (not shown in diff) is incorrect. Mentioning here but I think it will change 
> in the status reporting and then the docs can be synced with that.

Good catch! We could expose "rx_steer_flows_num" but this would be less 
self-explanatory than printing some kind of "unsupported". Any idea how to fix 
this properly in the docs?

>
>>      More details can often be found in ``ovs-vswitchd.log``::
>>   @@ -499,7 +499,7 @@ its options::
>>         $ ovs-appctl dpctl/show
>>       [...]
>> -      port 3: dpdk-rep0 (dpdk: configured_rx_queues=1, ..., 
>> dpdk-vf-mac=00:11:22:33:44:55, ...)
>> +      port 3: dpdk-rep0 (dpdk: ..., dpdk-vf-mac=00:11:22:33:44:55, ...)
>>         $ ovs-vsctl show
>>       [...]
>> diff --git a/lib/netdev-afxdp.c b/lib/netdev-afxdp.c
>> index 16f26bc30..8519b5a2b 100644
>> --- a/lib/netdev-afxdp.c
>> +++ b/lib/netdev-afxdp.c
>> @@ -672,8 +672,6 @@ netdev_afxdp_get_config(const struct netdev *netdev, 
>> struct smap *args)
>>       ovs_mutex_lock(&dev->mutex);
>>       smap_add_format(args, "n_rxq", "%d", netdev->n_rxq);
>>       smap_add_format(args, "xdp-mode", "%s", xdp_modes[dev->xdp_mode].name);
>> -    smap_add_format(args, "xdp-mode-in-use", "%s",
>> -                    xdp_modes[dev->xdp_mode_in_use].name);
>>       smap_add_format(args, "use-need-wakeup", "%s",
>>                       dev->use_need_wakeup ? "true" : "false");
>>       ovs_mutex_unlock(&dev->mutex);
>> @@ -1367,3 +1365,22 @@ netdev_afxdp_get_stats(const struct netdev *netdev,
>>         return error;
>>   }
>> +
>> +int
>> +netdev_afxdp_get_status(const struct netdev *netdev,
>> +                        struct smap *args)
>> +{
>> +    int error = netdev_linux_get_status(netdev, args);
>
> blank line here

Why should I add a blank line before "if (error)"? In most cases across OVS' 
codebase, the conditional has no blank line in front. Or what are you referring 
to?

>
>> +    if (error) {
>> +        return error;
>> +    }
>> +
>> +    struct netdev_linux *dev = netdev_linux_cast(netdev);
>> +
>> +    ovs_mutex_lock(&dev->mutex);
>> +    smap_add_format(args, "xdp-mode", "%s",
>> +                    xdp_modes[dev->xdp_mode_in_use].name);
>> +    ovs_mutex_unlock(&dev->mutex);
>> +
>> +    return error;
>> +}
>> diff --git a/lib/netdev-afxdp.h b/lib/netdev-afxdp.h
>> index e91cd102d..bd3b9dfbe 100644
>> --- a/lib/netdev-afxdp.h
>> +++ b/lib/netdev-afxdp.h
>> @@ -63,6 +63,7 @@ int netdev_afxdp_set_config(struct netdev *netdev, const 
>> struct smap *args,
>>   int netdev_afxdp_get_config(const struct netdev *netdev, struct smap 
>> *args);
>>   int netdev_afxdp_get_stats(const struct netdev *netdev_,
>>                              struct netdev_stats *stats);
>> +int netdev_afxdp_get_status(const struct netdev *netdev, struct smap *args);
>>   int netdev_afxdp_get_custom_stats(const struct netdev *netdev,
>>                                     struct netdev_custom_stats 
>> *custom_stats);
>>   diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
>> index 55700250d..05153d02f 100644
>> --- a/lib/netdev-dpdk.c
>> +++ b/lib/netdev-dpdk.c
>> @@ -1905,24 +1905,26 @@ netdev_dpdk_get_config(const struct netdev *netdev, 
>> struct smap *args)
>>         ovs_mutex_lock(&dev->mutex);
>>   -    smap_add_format(args, "requested_rx_queues", "%d", dev->user_n_rxq);
>> -    smap_add_format(args, "configured_rx_queues", "%d", netdev->n_rxq);
>> -    smap_add_format(args, "requested_tx_queues", "%d", 
>> dev->requested_n_txq);
>> -    smap_add_format(args, "configured_tx_queues", "%d", netdev->n_txq);
>
> User is losing info here as n_rxq and n_txq are not reported in 
> dpkvhostclient status, suggest to add them to there.
>
>> -    smap_add_format(args, "mtu", "%d", dev->mtu);
>> +    smap_add_format(args, "dpdk-devargs", "%s", dev->devargs);
>> +    smap_add_format(args, "n_rxq", "%d", dev->user_n_rxq);
>
>> +    smap_add_format(args, "rx-flow-ctrl", "%s",
>> +                    dev->fc_conf.mode == RTE_ETH_FC_TX_PAUSE ||
>> +                    dev->fc_conf.mode == RTE_ETH_FC_FULL ? "true" : 
>> "false");
>> +    smap_add_format(args, "tx-flow-ctrl", "%s",
>> +                    dev->fc_conf.mode == RTE_ETH_FC_RX_PAUSE ||
>> +                    dev->fc_conf.mode == RTE_ETH_FC_FULL ? "true" : 
>> "false");
>> +    smap_add_format(args, "flow-ctrl-autoneg", "%s",
>> +                    dev->fc_conf.autoneg ? "true" : "false");
>
> Flow control config should be for dpdk devices only below

Well, I completely missed netdev_dpdk_vhost_client_set_config🙈 Will fix.

>
>>         if (dev->type == DPDK_DEV_ETH) {
>>           smap_add_format(args, "n_rxq_desc", "%d", dev->rxq_size);
>>           smap_add_format(args, "n_txq_desc", "%d", dev->txq_size);
>> -        if (dev->hw_ol_features & NETDEV_RX_CHECKSUM_OFFLOAD) {
>> -            smap_add(args, "rx_csum_offload", "true");
>> -        } else {
>> -            smap_add(args, "rx_csum_offload", "false");
>> -        }
>> +
>>           if (dev->rx_steer_flags == DPDK_RX_STEER_LACP) {
>>               smap_add(args, "rx-steering", "rss+lacp");
>>           }
>> -        smap_add(args, "lsc_interrupt_mode",
>> +
>> +        smap_add(args, "dpdk-lsc-interrupt",
>>                    dev->lsc_interrupt_mode ? "true" : "false");
>>             if (dpdk_port_is_representor(dev)) {
>> @@ -1930,6 +1932,7 @@ netdev_dpdk_get_config(const struct netdev *netdev, 
>> struct smap *args)
>>                               ETH_ADDR_ARGS(dev->requested_hwaddr));
>>           }
>>       }
>> +
>
> nit: unneeded newline added
>
>>       ovs_mutex_unlock(&dev->mutex);
>>         return 0;
>> @@ -4161,6 +4164,13 @@ netdev_dpdk_get_status(const struct netdev *netdev, 
>> struct smap *args)
>>       smap_add_format(args, "max_vfs", "%u", dev_info.max_vfs);
>>       smap_add_format(args, "max_vmdq_pools", "%u", dev_info.max_vmdq_pools);
>>   +    smap_add_format(args, "n_rxq", "%d", netdev->n_rxq);
>> +    smap_add_format(args, "n_txq", "%d", netdev->n_txq);
>> +
>> +    smap_add(args, "rx_csum_offload",
>> +             dev->hw_ol_features & NETDEV_RX_CHECKSUM_OFFLOAD
>> +             ? "true" : "false");
>> +
>>       /* Querying the DPDK library for iftype may be done in future, pending
>>        * support; cf. RFC 3635 Section 3.2.4. */
>>       enum { IF_TYPE_ETHERNETCSMACD = 6 };
>> @@ -4186,16 +4196,15 @@ netdev_dpdk_get_status(const struct netdev *netdev, 
>> struct smap *args)
>>                           ETH_ADDR_ARGS(dev->hwaddr));
>>       }
>>   -    if (rx_steer_flags) {
>> -        if (!rx_steer_flows_num) {
>> -            smap_add(args, "rx_steering", "unsupported");
>> +    smap_add(args, "rx-steering", dev->rx_steer_flags == DPDK_RX_STEER_LACP
>> +                                  ? "rss+lacp" : "unsupported");
>
> I don't think "unsupported" is the right term now. If I don't enable 
> rx-steering, it will report rx-steering=unsupported.
>
> It was previously for if rx-steering was requested by the user but the flow 
> rule to steer traffic to the additional rxq was unsupported in the NIC. Also 
> the phy.rst mentions this and it's out of sync now.
>
> Could consider reporting "rss" if rx_steer_flags are not set, but that is the 
> default anyway so perhaps not needed.

Thank you for the explanation. A value other than "rss+lacp" in "rx-steering" 
will cause dpdk_set_rx_steer_config() to log an error and basically ignore that 
option. Suddenly returning a different value such as "rss" for "rx-steering" 
would be strange.

On the other hand, the try_rx_steer code in netdev_dpdk_reconfigure() will log 
"rx-steering: default rss" when hw support is missing. Then again the 
dpdk_rx_steer_flags enum only lists DPDK_RX_STEER_LACP which feels like it 
contradicts the log message?!?

How to clean this up?

>
>> +
>> +    if (rx_steer_flags && rx_steer_flows_num) {
>> <REMAINING TEXT REMOVED BECAUSE IRRELEVANT TO DISCUSSION>

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to