On Thu, Oct 15, 2020 at 2:57 PM Jerin Jacob <jerinjac...@gmail.com> wrote: > > On Thu, Oct 15, 2020 at 1:13 PM Slava Ovsiienko <viachesl...@nvidia.com> > wrote: > > > > Hi, Jerin > > Hi Slava, > > > > > > -----Original Message----- > > > From: Jerin Jacob <jerinjac...@gmail.com> > > > Sent: Wednesday, October 14, 2020 21:57 > > > To: Slava Ovsiienko <viachesl...@nvidia.com> > > > Cc: dpdk-dev <dev@dpdk.org>; NBU-Contact-Thomas Monjalon > > > <tho...@monjalon.net>; Stephen Hemminger > > > <step...@networkplumber.org>; Ferruh Yigit <ferruh.yi...@intel.com>; > > > Olivier Matz <olivier.m...@6wind.com>; Maxime Coquelin > > > <maxime.coque...@redhat.com>; David Marchand > > > <david.march...@redhat.com>; Andrew Rybchenko > > > <arybche...@solarflare.com> > > > Subject: Re: [PATCH v6 1/6] ethdev: introduce Rx buffer split > > > > > > On Wed, Oct 14, 2020 at 11:42 PM Viacheslav Ovsiienko > > > <viachesl...@nvidia.com> wrote: > > > > > > > > The DPDK datapath in the transmit direction is very flexible. > > > > An application can build the multi-segment packet and manages almost > > > > all data aspects - the memory pools where segments are allocated from, > > > > the segment lengths, the memory attributes like external buffers, > > > > registered for DMA, etc. > > > > > > > > [..snip..] > > > > > > For example, let's suppose we configured the Rx queue with the > > > > following segments: > > > > seg0 - pool0, len0=14B, off0=2 > > > > seg1 - pool1, len1=20B, off1=128B > > > > seg2 - pool2, len2=20B, off2=0B > > > > seg3 - pool3, len3=512B, off3=0B > > > > > > > > > Sorry for chime in late. This API lookout looks good to me. > > > But, I am wondering how the application can know the capability or > > > "limits" of > > > struct rte_eth_rxseg structure for the specific PMD. The other descriptor > > > limit, > > > it's being exposed with struct rte_eth_dev_info::rx_desc_lim; If PMD can > > > support a specific pattern rather than returning the blanket error, the > > > application should know the limit. > > > IMO, it is better to add > > > struct rte_eth_rxseg *rxsegs; > > > unint16_t nb_max_rxsegs > > > in rte_eth_dev_info structure to express the capablity. > > > Where the en and offset can define the max offset. > > > > > > Thoughts? > > > > Moreover, there might be implied a lot of various limitations - offsets > > might be not supported at all or > > have some requirements for alignment, the similar requirements might be > > applied to segment size > > (say, ask for some granularity). Currently it is not obvious how to report > > all nuances, and it is supposed > > the limitations of this kind must be documented in PMD chapter. As for mlx5 > > - it has no special > > limitations besides common requirements to the regular segments. > > Reporting the limitation in the documentation will not help for the > generic applications. > > > > > One more point - the split feature might be considered as just one of > > possible cases of using > > these segment descriptions, other features might impose other (unknown for > > now) limitations.
Also , I agree that w will have multiple use cases with segment descriptors. In order to make it future proof on the API definion is better to have from: struct rte_eth_rxseg { struct rte_mempool *mp; /**< Memory pool to allocate segment from. */ uint16_t length; /**< Segment data length, configures split point. */ uint16_t offset; /**< Data offset from beginning of mbuf data buffer. */ uint32_t reserved; /**< Reserved field. */ }; something lime below: struct rte_eth_rxseg { enum rte_eth_rxseg_mode mode ; union { struct rte_eth_rxseg_mode xxx { struct rte_mempool *mp; /**< Memory pool to allocate segment from. */ uint16_t length; /**< Segment data length, configures split point. */ uint16_t offset; /**< Data offset from beginning of mbuf data buffer. */ uint32_t reserved; /**< Reserved field. */ } } Another mode, Marvell PMD has it(I believe Intel also) i.e When we say: seg0 - pool0, len0=2000B, off0=0 seg1 - pool1, len1=2001B, off1=0 packet size up to, 2000B goes to pool 0 and if is >=2001 goes to pool1. I think, it is better to have mode param in rte_eth_rxseg for avoiding ABI changes.(Just like clean rte_flow APIs) > > If we see some of the features of such kind or other PMDs adopts the split > > feature - we'll try to find > > the common root and consider the way how to report it. > > My only concern with that approach will be ABI break again if > something needs to exposed over rte_eth_dev_info(). > IMO, if we featured needs to completed only when its capabilities are > exposed in a programmatic manner. > As of mlx5, if there not limitation then info > rte_eth_dev_info::rxsegs[x].len, offset etc as UINT16_MAX so > that application is aware of the state. > > > > > With best regards, Slava > >