[dpdk-dev] [PATCH] doc: announce changes to ethdev rxconf structure
Ferruh Yigit
ferruh.yigit at intel.com
Thu Aug 6 18:15:48 CEST 2020
On 8/3/2020 3:31 PM, Andrew Rybchenko wrote:
> On 8/3/20 1:58 PM, Viacheslav Ovsiienko wrote:
>> The DPDK datapath in the transmit direction is very flexible.
>> The applications can build multisegment packets and manages
>> almost all data aspects - the memory pools where segments
>> are allocated from, the segment lengths, the memory attributes
>> like external, registered, etc.
>>
>> In the receiving direction, the datapath is much less flexible,
>> the applications can only specify the memory pool to configure
>> the receiving queue and nothing more. In order to extend the
>> receiving datapath capabilities it is proposed to add the new
>> fields into rte_eth_rxconf structure:
>>
>> struct rte_eth_rxconf {
>> ...
>> uint16_t rx_split_num; /* number of segments to split */
>> uint16_t *rx_split_len; /* array of segment lengthes */
>> struct rte_mempool **mp; /* array of segment memory pools */
>> ...
>> };
>>
>> The non-zero value of rx_split_num field configures the receiving
>> queue to split ingress packets into multiple segments to the mbufs
>> allocated from various memory pools according to the specified
>> lengths. The zero value of rx_split_num field provides the
>> backward compatibility and queue should be configured in a regular
>> way (with single/multiple mbufs of the same data buffer length
>> allocated from the single memory pool).
>
> From the above description it is not 100% clear how it will
> coexist with:
> - existing mb_pool argument of the rte_eth_rx_queue_setup()
+1
> - DEV_RX_OFFLOAD_SCATTER
> - DEV_RX_OFFLOAD_HEADER_SPLIT
> How will application know that the feature is supported? Limitations?
+1
> Is it always split by specified/fixed length?
> What happens if header length is actually different?
As far as I understand intention is to filter specific packets to a queue first
and later do the split, so the header length will be fixed...
>
>> The new approach would allow splitting the ingress packets into
>> multiple parts pushed to the memory with different attributes.
>> For example, the packet headers can be pushed to the embedded data
>> buffers within mbufs and the application data into the external
>> buffers attached to mbufs allocated from the different memory
>> pools. The memory attributes for the split parts may differ
>> either - for example the application data may be pushed into
>> the external memory located on the dedicated physical device,
>> say GPU or NVMe. This would improve the DPDK receiving datapath
>> flexibility preserving compatibility with existing API.
>>
>> Signed-off-by: Viacheslav Ovsiienko <viacheslavo at mellanox.com>
>> ---
>> doc/guides/rel_notes/deprecation.rst | 5 +++++
>> 1 file changed, 5 insertions(+)
>>
>> diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst
>> index ea4cfa7..cd700ae 100644
>> --- a/doc/guides/rel_notes/deprecation.rst
>> +++ b/doc/guides/rel_notes/deprecation.rst
>> @@ -99,6 +99,11 @@ Deprecation Notices
>> In 19.11 PMDs will still update the field even when the offload is not
>> enabled.
>>
>> +* ethdev: add new fields to ``rte_eth_rxconf`` to configure the receiving
>> + queues to split ingress packets into multiple segments according to the
>> + specified lengths into the buffers allocated from the specified
>> + memory pools. The backward compatibility to existing API is preserved.
>> +
>> * ethdev: ``rx_descriptor_done`` dev_ops and ``rte_eth_rx_descriptor_done``
>> will be deprecated in 20.11 and will be removed in 21.11.
>> Existing ``rte_eth_rx_descriptor_status`` and ``rte_eth_tx_descriptor_status``
>
More information about the dev
mailing list