[PATCH v4 6/7] bbdev: add queue related warning and status information
Chautru, Nicolas
nicolas.chautru at intel.com
Wed Jul 6 22:34:19 CEST 2022
Hi Tom,
> -----Original Message-----
> From: Tom Rix <trix at redhat.com>
>
>
> On 7/5/22 5:23 PM, Nicolas Chautru wrote:
> > This allows to expose more information with regards to any queue
> > related failure and warning which cannot be supported in existing API.
> >
> > Signed-off-by: Nicolas Chautru <nicolas.chautru at intel.com>
> > ---
> > app/test-bbdev/test_bbdev_perf.c | 2 ++
> > lib/bbdev/rte_bbdev.c | 21 +++++++++++++++++++++
> > lib/bbdev/rte_bbdev.h | 34 ++++++++++++++++++++++++++++++++++
> > lib/bbdev/version.map | 1 +
> > 4 files changed, 58 insertions(+)
> >
> > diff --git a/app/test-bbdev/test_bbdev_perf.c
> > b/app/test-bbdev/test_bbdev_perf.c
> > index 1abda2d..653b21f 100644
> > --- a/app/test-bbdev/test_bbdev_perf.c
> > +++ b/app/test-bbdev/test_bbdev_perf.c
> > @@ -4360,6 +4360,8 @@ typedef int (test_case_function)(struct
> active_device *ad,
> > stats->dequeued_count = q_stats->dequeued_count;
> > stats->enqueue_err_count = q_stats->enqueue_err_count;
> > stats->dequeue_err_count = q_stats->dequeue_err_count;
> > + stats->enqueue_warning_count = q_stats->enqueue_warning_count;
> > + stats->dequeue_warning_count = q_stats->dequeue_warning_count;
> > stats->acc_offload_cycles = q_stats->acc_offload_cycles;
> >
> > return 0;
> > diff --git a/lib/bbdev/rte_bbdev.c b/lib/bbdev/rte_bbdev.c index
> > 28b105d..ddad464 100644
> > --- a/lib/bbdev/rte_bbdev.c
> > +++ b/lib/bbdev/rte_bbdev.c
> > @@ -27,6 +27,8 @@
> > #define BBDEV_OP_TYPE_COUNT 6
> > /* Number of supported device status */
> > #define BBDEV_DEV_STATUS_COUNT 9
> > +/* Number of supported enqueue status */ #define
> > +BBDEV_ENQ_STATUS_COUNT 4
> >
> > /* BBDev library logging ID */
> > RTE_LOG_REGISTER_DEFAULT(bbdev_logtype, NOTICE); @@ -723,6 +725,8
> @@
> > struct rte_bbdev *
> > stats->dequeued_count += q_stats->dequeued_count;
> > stats->enqueue_err_count += q_stats->enqueue_err_count;
> > stats->dequeue_err_count += q_stats->dequeue_err_count;
> > + stats->enqueue_warn_count += q_stats-
> >enqueue_warn_count;
> > + stats->dequeue_warn_count += q_stats-
> >dequeue_warn_count;
> > }
> > rte_bbdev_log_debug("Got stats on %u", dev->data->dev_id);
> > }
> > @@ -1165,3 +1169,20 @@ struct rte_mempool *
> > rte_bbdev_log(ERR, "Invalid device status");
> > return NULL;
> > }
> > +
> > +const char *
> > +rte_bbdev_enqueue_status_str(enum rte_bbdev_enqueue_status status) {
> > + static const char * const enq_sta_string[] = {
> > + "RTE_BBDEV_ENQ_STATUS_NONE",
> > + "RTE_BBDEV_ENQ_STATUS_QUEUE_FULL",
> > + "RTE_BBDEV_ENQ_STATUS_RING_FULL",
> > + "RTE_BBDEV_ENQ_STATUS_INVALID_OP",
> > + };
> > +
> > + if (status < BBDEV_ENQ_STATUS_COUNT)
> Single use of #define, could just be an array size check and remove the #define
Thanks, good point.
> > + return enq_sta_string[status];
> > +
> > + rte_bbdev_log(ERR, "Invalid enqueue status");
> > + return NULL;
> > +}
> > diff --git a/lib/bbdev/rte_bbdev.h b/lib/bbdev/rte_bbdev.h index
> > ed528b8..b7ecf94 100644
> > --- a/lib/bbdev/rte_bbdev.h
> > +++ b/lib/bbdev/rte_bbdev.h
> > @@ -224,6 +224,19 @@ struct rte_bbdev_queue_conf {
> > rte_bbdev_queue_stop(uint16_t dev_id, uint16_t queue_id);
> >
> > /**
> > + * Flags indicate the reason why a previous enqueue may not have
> > + * consumed all requested operations
> > + * In case of multiple reasons the latter superdes a previous one */
> > +enum rte_bbdev_enqueue_status {
> > + RTE_BBDEV_ENQ_STATUS_NONE, /**< Nothing to report */
> > + RTE_BBDEV_ENQ_STATUS_QUEUE_FULL, /**< Not enough room in
> queue */
> > + RTE_BBDEV_ENQ_STATUS_RING_FULL, /**< Not enough room in
> ring */
> > + RTE_BBDEV_ENQ_STATUS_INVALID_OP, /**< Operation was
> rejected as invalid */
> > + RTE_BBDEV_ENQ_STATUS_PADDED_MAX = 6, /**< Maximum enq
> status number including padding */
> Pad to 8 like the other patch ?
It doesn't have to be the same number, just a bit of room for growth.
> > +};
> > +
> > +/**
> > * Flags indicate the status of the device
> > */
> > enum rte_bbdev_device_status {
> > @@ -246,6 +259,12 @@ struct rte_bbdev_stats {
> > uint64_t enqueue_err_count;
> > /** Total error count on operations dequeued */
> > uint64_t dequeue_err_count;
> > + /** Total warning count on operations enqueued */
> > + uint64_t enqueue_warn_count;
> > + /** Total warning count on operations dequeued */
> > + uint64_t dequeue_warn_count;
> > + /** Total enqueue status count based on rte_bbdev_enqueue_status
> enum */
> > + uint64_t
> enqueue_status_count[RTE_BBDEV_ENQ_STATUS_PADDED_MAX];
> This element is not used in this patch, is it needed ?
> > /** CPU cycles consumed by the (HW/SW) accelerator device to
> offload
> > * the enqueue request to its internal queues.
> > * - For a HW device this is the cycles consumed in MMIO write @@
> > -386,6 +405,7 @@ struct rte_bbdev_queue_data {
> > void *queue_private; /**< Driver-specific per-queue data */
> > struct rte_bbdev_queue_conf conf; /**< Current configuration */
> > struct rte_bbdev_stats queue_stats; /**< Queue statistics */
> > + enum rte_bbdev_enqueue_status enqueue_status; /**< Enqueue
> status
> > +when op is rejected */
>
> This element is not used in this patch, is it needed ?
This is exposed to both PMD and application through this commit at queue granularity. Said otherwise the PMD would then set this based on events detected in the PMD implementation.
>
> Tom
>
> > bool started; /**< Queue state */
> > };
> >
> > @@ -938,6 +958,20 @@ typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
> > const char*
> > rte_bbdev_device_status_str(enum rte_bbdev_device_status status);
> >
> > +/**
> > + * Converts queue status from enum to string
> > + *
> > + * @param status
> > + * Queue status as enum
> > + *
> > + * @returns
> > + * Queue status as string or NULL if op_type is invalid
> > + *
> > + */
> > +__rte_experimental
> > +const char*
> > +rte_bbdev_enqueue_status_str(enum rte_bbdev_enqueue_status status);
> > +
> > #ifdef __cplusplus
> > }
> > #endif
> > diff --git a/lib/bbdev/version.map b/lib/bbdev/version.map index
> > efae50b..1c06738 100644
> > --- a/lib/bbdev/version.map
> > +++ b/lib/bbdev/version.map
> > @@ -44,6 +44,7 @@ EXPERIMENTAL {
> > global:
> >
> > rte_bbdev_device_status_str;
> > + rte_bbdev_enqueue_status_str;
> > rte_bbdev_enqueue_fft_ops;
> > rte_bbdev_dequeue_fft_ops;
> > rte_bbdev_fft_op_alloc_bulk;
More information about the dev
mailing list