> -----Original Message----- > From: Yigit, Ferruh > Sent: Friday, September 6, 2019 22:22 > To: Ray Kinsella <m...@ashroe.eu>; Wang, Haiyue <haiyue.w...@intel.com> > Cc: dev@dpdk.org > Subject: Re: [dpdk-dev] [RFC v2 1/3] ethdev: add the API for getting trace > information > > On 8/13/2019 1:51 PM, Ray Kinsella wrote: > > > > > > On 13/08/2019 04:24, Stephen Hemminger wrote: > >> On Tue, 13 Aug 2019 11:06:10 +0800 > >> Haiyue Wang <haiyue.w...@intel.com> wrote: > >> > >>> Enhance the PMD to support retrieving trace information like > >>> Rx/Tx burst selection etc. > >>> > >>> Signed-off-by: Haiyue Wang <haiyue.w...@intel.com> > >>> --- > >>> lib/librte_ethdev/rte_ethdev.c | 18 ++++++++++++++++++ > >>> lib/librte_ethdev/rte_ethdev.h | 9 +++++++++ > >>> lib/librte_ethdev/rte_ethdev_core.h | 4 ++++ > >>> 3 files changed, 31 insertions(+) > >>> > >>> diff --git a/lib/librte_ethdev/rte_ethdev.c > >>> b/lib/librte_ethdev/rte_ethdev.c > >>> index 17d183e..6098fad 100644 > >>> --- a/lib/librte_ethdev/rte_ethdev.c > >>> +++ b/lib/librte_ethdev/rte_ethdev.c > >>> @@ -4083,6 +4083,24 @@ rte_eth_tx_queue_info_get(uint16_t port_id, > >>> uint16_t queue_id, > >>> } > >>> > >>> int > >>> +rte_eth_trace_info_get(uint16_t port_id, uint16_t queue_id, > >>> + enum rte_eth_trace type, char *buf, int sz) > > Better to use struct as argument instead of individual variables because it is > easier to extend the struct later if needed. > > >>> +{ > >>> + struct rte_eth_dev *dev; > >>> + > >>> + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); > >>> + > >>> + if (buf == NULL) > >>> + return -EINVAL; > >>> + > >>> + dev = &rte_eth_devices[port_id]; > >>> + > >>> + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->trace_info_get, -ENOTSUP); > >>> + > >>> + return dev->dev_ops->trace_info_get(dev, queue_id, type, buf, sz); > >> > >> What if queueid is out of bounds? > >> > >> The bigger problem is that this information is like a log message > >> and unstructured, which makes it device specific and useless for > >> automation. > > > > IMHO - this is much better implemented as a capability bitfield, that > > can be queried. > > +1 to return the datapath capability as bitfield. > > Also +1 to have a new API, > - I am not sure about the API name, 'rte_eth_trace_info_get()', can we find > something better instead of 'trace' there. > - I think we should limit this API only to get current datapath configuration, > for clarity of the API don't return capability or not datapath related config. > > Also this information not always supported in queue level, what do you think > having ability to get this information in port level, > like this API can return a struct, which may have a field that says if the > output is for queue or port, or this can be another bitfield, what do you > think? >
#define RX_SCALAR (1ULL < 0) #define RX_VECTOR_AVX2 ... ... #define RX_SCATTER ... #define RX_BULK_ALLOC #define TX_SCALAR #define TX_VECTOR_AVX2 .. ... #define TX_SIMPLE struct rte_pkt_burst_info { bool per_queue_support; /* Per queue has each rx/tx burst setting */ uint64_t burst_infos; }; int rte_eth_pkt_burst_info_get(uint16_t port_id, bool is_rx, uint16_t queue_id, struct rte_pkt_burst_info *pbinfo) Rx/Tx shares the 64 bits definition, but return according to 'is_rx'. Application can call with 'queue_id = 0' firstly, if the Rx/Tx queue support queue level burst setting, then 'per_queue_support = true', then it can iterate to get the burst info with different 'queue_id', of course, the 'per_queue_support = true' will be returned always. How about this ? > > > >> > >> Why not just keep it in the log like it is now? > >> > >>> int rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id, > >>> struct rte_eth_txq_info *qinfo); > >>> > >>> +int > >>> +rte_eth_trace_info_get(uint16_t port_id, uint16_t queue_id, > >>> + enum rte_eth_trace type, char *buf, int sz); > >>> + > >> > >> You didn't run checkpatch, otherwise you would have seen complaints > >> about not listing API as experimental. > >> > >> Also the API would have to be in the map file as well. > >> > >> Docbook comments are also missing. > >> > >> > >> > >>