[dpdk-dev] [PATCH 1/4] vhost: inroduce operation to get vDPA queue stats
Matan Azrad
matan at mellanox.com
Thu Apr 16 11:06:32 CEST 2020
Hi Maxime
Can you point on specific vendor specific counter I suggested?
I think all of them come directly from virtio protocols.
השג את Outlook עבור Android<https://aka.ms/ghei36>
________________________________
From: Maxime Coquelin <maxime.coquelin at redhat.com>
Sent: Wednesday, April 15, 2020 5:36:59 PM
To: Matan Azrad <matan at mellanox.com>; dev at dpdk.org <dev at dpdk.org>
Cc: Slava Ovsiienko <viacheslavo at mellanox.com>; Shahaf Shuler <shahafs at mellanox.com>
Subject: Re: [PATCH 1/4] vhost: inroduce operation to get vDPA queue stats
Hi Matan,
On 4/2/20 1:26 PM, Matan Azrad wrote:
> The vDPA device offloads all the datapath of the vhost device to the HW
> device.
>
> In order to expose to the user traffic information this patch introduce
> new API to get traffic statistics per virtio queue.
>
> The statistics are taken directly from the vDPA driver managing the HW
> device.
>
> Signed-off-by: Matan Azrad <matan at mellanox.com>
> Acked-by: Viacheslav Ovsiienko <viacheslavo at mellanox.com>
> ---
> doc/guides/rel_notes/release_20_05.rst | 4 +++
> doc/guides/vdpadevs/features/default.ini | 1 +
> doc/guides/vdpadevs/features_overview.rst | 3 +++
> lib/librte_vhost/rte_vdpa.h | 45 ++++++++++++++++++++++++++++++-
> lib/librte_vhost/rte_vhost_version.map | 1 +
> lib/librte_vhost/vdpa.c | 14 ++++++++++
> 6 files changed, 67 insertions(+), 1 deletion(-)
...
> diff --git a/lib/librte_vhost/rte_vdpa.h b/lib/librte_vhost/rte_vdpa.h
> index 9a3deb3..d6cbf48 100644
> --- a/lib/librte_vhost/rte_vdpa.h
> +++ b/lib/librte_vhost/rte_vdpa.h
> @@ -37,6 +37,27 @@ struct rte_vdpa_dev_addr {
> };
> };
>
> +struct rte_vdpa_queue_stats {
> + /** Number of descriptors received by device */
> + uint64_t received_desc;
> + /** Number of descriptors completed by the device */
> + uint64_t completed_desc;
> + /** Number of bad descriptors received by device */
> + uint32_t bad_desc;
> + /**
> + * Number of chained descriptors received that exceed the max allowed
> + * chain by device
> + */
> + uint32_t exceed_max_chain;
> + /**
> + * Number of times device tried to read or write buffer that is not
> + * registered to the device
> + */
> + uint32_t invalid_buffer;
> + /** Number of errors detected by the device */
> + uint32_t errors;
> +};
> +
I think doing it like that, we risk to keep the rte_vdpa_get_stats API
always experimental, as every vendor will want to add their own counters
and so break the ABI.
How about implementing something similar to rte_eth_xstat?
As these stats are for debugging purpose, it would give you much more
flexibility in adding new counters as HW or firmwares evolves.
What do you think?
Thanks,
Maxime
> /**
> * vdpa device operations
> */
> @@ -73,8 +94,11 @@ struct rte_vdpa_dev_ops {
> int (*get_notify_area)(int vid, int qid,
> uint64_t *offset, uint64_t *size);
>
> + /** Get statistics of the queue */
> + int (*get_stats)(int did, int qid, struct rte_vdpa_queue_stats *stats);
> +
> /** Reserved for future extension */
> - void *reserved[5];
> + void *reserved[4];
> };
>
> /**
> @@ -200,4 +224,23 @@ struct rte_vdpa_device *
> __rte_experimental
> int
> rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m);
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice
> + *
> + * Get vDPA device queue statistics.
> + *
> + * @param did
> + * device id
> + * @param qid
> + * queue id
> + * @param stats
> + * queue statistics pointer.
> + * @return
> + * 0 on success, non-zero on failure.
> + */
> +__rte_experimental
> +int
> +rte_vdpa_get_stats(int did, uint16_t qid, struct rte_vdpa_queue_stats *stats);
> #endif /* _RTE_VDPA_H_ */
> diff --git a/lib/librte_vhost/rte_vhost_version.map b/lib/librte_vhost/rte_vhost_version.map
> index 051d08c..c9dcff4 100644
> --- a/lib/librte_vhost/rte_vhost_version.map
> +++ b/lib/librte_vhost/rte_vhost_version.map
> @@ -38,6 +38,7 @@ EXPERIMENTAL {
> rte_vdpa_find_device_id;
> rte_vdpa_get_device;
> rte_vdpa_get_device_num;
> + rte_vdpa_get_stats;
> rte_vhost_driver_attach_vdpa_device;
> rte_vhost_driver_detach_vdpa_device;
> rte_vhost_driver_get_vdpa_device_id;
> diff --git a/lib/librte_vhost/vdpa.c b/lib/librte_vhost/vdpa.c
> index 2b86708..57900fc 100644
> --- a/lib/librte_vhost/vdpa.c
> +++ b/lib/librte_vhost/vdpa.c
> @@ -227,3 +227,17 @@ struct rte_vdpa_device *
> free_ind_table(idesc);
> return -1;
> }
> +
> +int
> +rte_vdpa_get_stats(int did, uint16_t qid, struct rte_vdpa_queue_stats *stats)
> +{
> + struct rte_vdpa_device *vdpa_dev;
> +
> + vdpa_dev = rte_vdpa_get_device(did);
> + if (!vdpa_dev)
> + return -ENODEV;
> +
> + RTE_FUNC_PTR_OR_ERR_RET(vdpa_dev->ops->get_stats, -ENOTSUP);
> +
> + return vdpa_dev->ops->get_stats(did, qid, stats);
> +}
>
השג את Outlook עבור Android<https://aka.ms/ghei36>
More information about the dev
mailing list