From: Thomas Monjalon <thomas.monjalon@6wind.com>
To: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Cc: dev@dpdk.org, bruce.richardson@intel.com,
harry.van.haaren@intel.com, hemant.agrawal@nxp.com,
gage.eads@intel.com
Subject: Re: [PATCH 1/4] eventdev: introduce event driven programming model
Date: Wed, 23 Nov 2016 19:39:09 +0100 [thread overview]
Message-ID: <3691745.y1f1NvKTEv@xps13> (raw)
In-Reply-To: <1479447902-3700-2-git-send-email-jerin.jacob@caviumnetworks.com>
Hi Jerin,
Thanks for bringing a big new piece in DPDK.
I made some comments below.
2016-11-18 11:14, Jerin Jacob:
> +Eventdev API - EXPERIMENTAL
> +M: Jerin Jacob <jerin.jacob@caviumnetworks.com>
> +F: lib/librte_eventdev/
OK to mark it experimental.
What is the plan to remove the experimental word?
> + * RTE event device drivers do not use interrupts for enqueue or dequeue
> + * operation. Instead, Event drivers export Poll-Mode enqueue and dequeue
> + * functions to applications.
To the question "what makes DPDK different" it could be answered
that DPDK event drivers implement polling functions :)
> +#include <stdbool.h>
> +
> +#include <rte_pci.h>
> +#include <rte_dev.h>
> +#include <rte_memory.h>
Is it possible to remove some of these includes from the API?
> +
> +#define EVENTDEV_NAME_SKELETON_PMD event_skeleton
> +/**< Skeleton event device PMD name */
I do not understand this #define.
And it is not properly prefixed.
> +struct rte_event_dev_info {
> + const char *driver_name; /**< Event driver name */
> + struct rte_pci_device *pci_dev; /**< PCI information */
There is some work in progress to remove PCI information from ethdev.
Please do not add any PCI related structure in eventdev.
The generic structure is rte_device.
> +struct rte_event_dev_config {
> + uint32_t dequeue_wait_ns;
> + /**< rte_event_dequeue() wait for *dequeue_wait_ns* ns on this device.
Please explain exactly when the wait occurs and why.
> + * This value should be in the range of *min_dequeue_wait_ns* and
> + * *max_dequeue_wait_ns* which previously provided in
> + * rte_event_dev_info_get()
> + * \see RTE_EVENT_DEV_CFG_PER_DEQUEUE_WAIT
I think the @see syntax would be more consistent than \see.
> + uint8_t nb_event_port_dequeue_depth;
> + /**< Number of dequeue queue depth for any event port on this device.
I think it deserves more explanations.
> + uint32_t event_dev_cfg;
> + /**< Event device config flags(RTE_EVENT_DEV_CFG_)*/
How this field differs from others in the struct?
Should it be named flags?
> + uint32_t event_queue_cfg; /**< Queue config flags(EVENT_QUEUE_CFG_) */
Same comment about the naming of this field for event_queue config sruct.
> +/** Event port configuration structure */
> +struct rte_event_port_conf {
> + int32_t new_event_threshold;
> + /**< A backpressure threshold for new event enqueues on this port.
> + * Use for *closed system* event dev where event capacity is limited,
> + * and cannot exceed the capacity of the event dev.
> + * Configuring ports with different thresholds can make higher priority
> + * traffic less likely to be backpressured.
> + * For example, a port used to inject NIC Rx packets into the event dev
> + * can have a lower threshold so as not to overwhelm the device,
> + * while ports used for worker pools can have a higher threshold.
> + * This value cannot exceed the *nb_events_limit*
> + * which previously supplied to rte_event_dev_configure()
> + */
> + uint8_t dequeue_depth;
> + /**< Configure number of bulk dequeues for this event port.
> + * This value cannot exceed the *nb_event_port_dequeue_depth*
> + * which previously supplied to rte_event_dev_configure()
> + */
> + uint8_t enqueue_depth;
> + /**< Configure number of bulk enqueues for this event port.
> + * This value cannot exceed the *nb_event_port_enqueue_depth*
> + * which previously supplied to rte_event_dev_configure()
> + */
> +};
The depth configuration is not clear to me.
> +/* Event types to classify the event source */
Why this classification is needed?
> +#define RTE_EVENT_TYPE_ETHDEV 0x0
> +/**< The event generated from ethdev subsystem */
> +#define RTE_EVENT_TYPE_CRYPTODEV 0x1
> +/**< The event generated from crypodev subsystem */
> +#define RTE_EVENT_TYPE_TIMERDEV 0x2
> +/**< The event generated from timerdev subsystem */
> +#define RTE_EVENT_TYPE_CORE 0x3
> +/**< The event generated from core.
What is core?
> +/* Event enqueue operations */
I feel a longer explanation is needed here to describe
what is an operation and where this data is useful.
> +#define RTE_EVENT_OP_NEW 0
> +/**< New event without previous context */
> +#define RTE_EVENT_OP_FORWARD 1
> +/**< Re-enqueue previously dequeued event */
> +#define RTE_EVENT_OP_RELEASE 2
There is no comment for the release operation.
> +/**
> + * Release the flow context associated with the schedule type.
> + *
[...]
> + */
There is no function declaration below this comment.
> +/**
> + * The generic *rte_event* structure to hold the event attributes
> + * for dequeue and enqueue operation
> + */
> +struct rte_event {
> + /** WORD0 */
> + RTE_STD_C11
> + union {
> + uint64_t event;
[...]
> + };
> + /** WORD1 */
> + RTE_STD_C11
> + union {
> + uintptr_t event_ptr;
I wonder if it can be a problem to have the size of this field
not constant across machines.
> + /**< Opaque event pointer */
> + struct rte_mbuf *mbuf;
> + /**< mbuf pointer if dequeued event is associated with mbuf */
How do we know that an event is associated with mbuf?
Does it mean that such events are always converted into mbuf even if the
application does not need it?
> +struct rte_eventdev_driver;
> +struct rte_eventdev_ops;
I think it is better to split API and driver interface in two files.
(we should do this split in ethdev)
> +/**
> + * Enqueue the event object supplied in the *rte_event* structure on an
> + * event device designated by its *dev_id* through the event port specified by
> + * *port_id*. The event object specifies the event queue on which this
> + * event will be enqueued.
> + *
> + * @param dev_id
> + * Event device identifier.
> + * @param port_id
> + * The identifier of the event port.
> + * @param ev
> + * Pointer to struct rte_event
> + *
> + * @return
> + * - 0 on success
> + * - <0 on failure. Failure can occur if the event port's output queue is
> + * backpressured, for instance.
> + */
> +static inline int
> +rte_event_enqueue(uint8_t dev_id, uint8_t port_id, struct rte_event *ev)
Is it really needed to have non-burst variant of enqueue/dequeue?
> +/**
> + * Converts nanoseconds to *wait* value for rte_event_dequeue()
> + *
> + * If the device is configured with RTE_EVENT_DEV_CFG_PER_DEQUEUE_WAIT flag then
> + * application can use this function to convert wait value in nanoseconds to
> + * implementations specific wait value supplied in rte_event_dequeue()
Why is it implementation-specific?
Why this conversion is not internal in the driver?
End of review for this patch ;)
next prev parent reply other threads:[~2016-11-23 18:39 UTC|newest]
Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-18 5:44 [PATCH 0/4] libeventdev API and northbound implementation Jerin Jacob
2016-11-18 5:44 ` [PATCH 1/4] eventdev: introduce event driven programming model Jerin Jacob
2016-11-23 18:39 ` Thomas Monjalon [this message]
2016-11-24 1:59 ` Jerin Jacob
2016-11-24 12:26 ` Bruce Richardson
2016-11-24 15:35 ` Thomas Monjalon
2016-11-25 0:23 ` Jerin Jacob
2016-11-25 11:00 ` Bruce Richardson
2016-11-25 13:09 ` Thomas Monjalon
2016-11-26 0:57 ` Jerin Jacob
2016-11-28 9:10 ` Bruce Richardson
2016-11-26 2:54 ` Jerin Jacob
2016-11-28 9:16 ` Bruce Richardson
2016-11-28 11:30 ` Thomas Monjalon
2016-11-29 4:01 ` Jerin Jacob
2016-11-29 10:00 ` Bruce Richardson
2016-11-25 11:59 ` Van Haaren, Harry
2016-11-25 12:09 ` Richardson, Bruce
2016-11-24 16:24 ` Bruce Richardson
2016-11-24 19:30 ` Jerin Jacob
2016-12-06 3:52 ` [PATCH v2 0/6] libeventdev API and northbound implementation Jerin Jacob
2016-12-06 3:52 ` [PATCH v2 1/6] eventdev: introduce event driven programming model Jerin Jacob
2016-12-06 16:51 ` Bruce Richardson
2016-12-07 18:53 ` Jerin Jacob
2016-12-08 9:30 ` Bruce Richardson
2016-12-08 20:41 ` Jerin Jacob
2016-12-09 15:11 ` Bruce Richardson
2016-12-14 6:55 ` Jerin Jacob
2016-12-07 10:57 ` Van Haaren, Harry
2016-12-08 1:24 ` Jerin Jacob
2016-12-08 11:02 ` Van Haaren, Harry
2016-12-14 13:13 ` Jerin Jacob
2016-12-14 15:15 ` Bruce Richardson
2016-12-15 16:54 ` Van Haaren, Harry
2016-12-07 11:12 ` Bruce Richardson
2016-12-08 1:48 ` Jerin Jacob
2016-12-08 9:57 ` Bruce Richardson
2016-12-14 6:40 ` Jerin Jacob
2016-12-14 15:19 ` Bruce Richardson
2016-12-15 13:39 ` Jerin Jacob
2016-12-06 3:52 ` [PATCH v2 2/6] eventdev: define southbound driver interface Jerin Jacob
2016-12-06 3:52 ` [PATCH v2 3/6] eventdev: implement the northbound APIs Jerin Jacob
2016-12-06 17:17 ` Bruce Richardson
2016-12-07 17:02 ` Jerin Jacob
2016-12-08 9:59 ` Bruce Richardson
2016-12-14 6:28 ` Jerin Jacob
2016-12-06 3:52 ` [PATCH v2 4/6] eventdev: implement PMD registration functions Jerin Jacob
2016-12-06 3:52 ` [PATCH v2 5/6] event/skeleton: add skeleton eventdev driver Jerin Jacob
2016-12-06 3:52 ` [PATCH v2 6/6] app/test: unit test case for eventdev APIs Jerin Jacob
2016-12-06 16:46 ` [PATCH v2 0/6] libeventdev API and northbound implementation Bruce Richardson
2016-12-21 9:25 ` [PATCH v4 " Jerin Jacob
2016-12-21 9:25 ` [PATCH v4 1/6] eventdev: introduce event driven programming model Jerin Jacob
2017-01-25 16:32 ` Eads, Gage
2017-01-25 16:36 ` Richardson, Bruce
2017-01-25 16:53 ` Eads, Gage
2017-01-25 22:36 ` Eads, Gage
2017-01-26 9:39 ` Jerin Jacob
2017-01-26 20:39 ` Eads, Gage
2017-01-27 10:03 ` Bruce Richardson
2017-01-30 10:42 ` Jerin Jacob
2017-02-02 11:18 ` Nipun Gupta
2017-02-02 14:09 ` Jerin Jacob
2017-02-03 6:38 ` Nipun Gupta
2017-02-03 10:58 ` Hemant Agrawal
2017-02-07 4:59 ` Jerin Jacob
2016-12-21 9:25 ` [PATCH v4 2/6] eventdev: define southbound driver interface Jerin Jacob
2017-02-02 11:19 ` Nipun Gupta
2017-02-02 11:34 ` Bruce Richardson
2017-02-02 12:53 ` Nipun Gupta
2017-02-02 13:58 ` Bruce Richardson
2017-02-03 5:59 ` Nipun Gupta
2016-12-21 9:25 ` [PATCH v4 3/6] eventdev: implement the northbound APIs Jerin Jacob
2017-02-02 11:19 ` Nipun Gupta
2017-02-02 14:32 ` Jerin Jacob
2017-02-03 6:59 ` Nipun Gupta
2016-12-21 9:25 ` [PATCH v4 4/6] eventdev: implement PMD registration functions Jerin Jacob
2017-02-02 11:20 ` Nipun Gupta
2017-02-05 13:04 ` Jerin Jacob
2016-12-21 9:25 ` [PATCH v4 5/6] event/skeleton: add skeleton eventdev driver Jerin Jacob
2016-12-21 9:25 ` [PATCH v4 6/6] app/test: unit test case for eventdev APIs Jerin Jacob
2016-11-18 5:45 ` [PATCH 2/4] eventdev: implement the northbound APIs Jerin Jacob
2016-11-21 17:45 ` Eads, Gage
2016-11-21 19:13 ` Jerin Jacob
2016-11-21 19:31 ` Jerin Jacob
2016-11-22 15:15 ` Eads, Gage
2016-11-22 18:19 ` Jerin Jacob
2016-11-22 19:43 ` Eads, Gage
2016-11-22 20:00 ` Jerin Jacob
2016-11-22 22:48 ` Eads, Gage
2016-11-22 23:43 ` Jerin Jacob
2016-11-28 15:53 ` Eads, Gage
2016-11-29 2:01 ` Jerin Jacob
2016-11-29 3:43 ` Jerin Jacob
2016-11-29 5:46 ` Eads, Gage
2016-11-23 9:57 ` Bruce Richardson
2016-11-23 19:18 ` Thomas Monjalon
2016-11-25 4:17 ` Jerin Jacob
2016-11-25 9:55 ` Richardson, Bruce
2016-11-25 23:08 ` Jerin Jacob
2016-11-18 5:45 ` [PATCH 3/4] event/skeleton: add skeleton eventdev driver Jerin Jacob
2016-11-18 5:45 ` [PATCH 4/4] app/test: unit test case for eventdev APIs Jerin Jacob
2016-11-18 15:25 ` [PATCH 0/4] libeventdev API and northbound implementation Bruce Richardson
2016-11-18 16:04 ` Bruce Richardson
2016-11-18 19:27 ` Jerin Jacob
2016-11-21 9:40 ` Thomas Monjalon
2016-11-21 9:57 ` Bruce Richardson
2016-11-22 0:11 ` Thomas Monjalon
2016-11-22 2:00 ` Yuanhan Liu
2016-11-22 9:05 ` Shreyansh Jain
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3691745.y1f1NvKTEv@xps13 \
--to=thomas.monjalon@6wind.com \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
--cc=gage.eads@intel.com \
--cc=harry.van.haaren@intel.com \
--cc=hemant.agrawal@nxp.com \
--cc=jerin.jacob@caviumnetworks.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.