[dpdk-dev] [PATCH v8 00/18] unified packet type

Ananyev, Konstantin konstantin.ananyev at intel.com
Tue Jun 23 18:13:47 CEST 2015



> -----Original Message-----
> From: Zhang, Helin
> Sent: Tuesday, June 23, 2015 2:50 AM
> To: dev at dpdk.org
> Cc: Cao, Waterman; Liang, Cunming; Liu, Jijiang; Ananyev, Konstantin; Richardson, Bruce; yongwang at vmware.com;
> olivier.matz at 6wind.com; Wu, Jingjing; Zhang, Helin
> Subject: [PATCH v8 00/18] unified packet type
> 
> Currently only 6 bits which are stored in ol_flags are used to indicate the
> packet types. This is not enough, as some NIC hardware can recognize quite
> a lot of packet types, e.g i40e hardware can recognize more than 150 packet
> types. Hiding those packet types hides hardware offload capabilities which
> could be quite useful for improving performance and for end users.
> So an unified packet types are needed to support all possible PMDs. A 16
> bits packet_type in mbuf structure can be changed to 32 bits and used for
> this purpose. In addition, all packet types stored in ol_flag field should
> be deleted at all, and 6 bits of ol_flags can be save as the benifit.
> 
> Initially, 32 bits of packet_type can be divided into several sub fields to
> indicate different packet type information of a packet. The initial design
> is to divide those bits into fields for L2 types, L3 types, L4 types, tunnel
> types, inner L2 types, inner L3 types and inner L4 types. All PMDs should
> translate the offloaded packet types into these 7 fields of information, for
> user applications.
> 
> To avoid breaking ABI compatibility, currently all the code changes for
> unified packet type are disabled at compile time by default. Users can enable
> it manually by defining the macro of RTE_NEXT_ABI. The code changes will be
> valid by default in a future release, and the old version will be deleted
> accordingly, after the ABI change process is done.
> 
> Note that this patch set should be integrated after another patch set for
> '[PATCH v3 0/7] support i40e QinQ stripping and insertion', to clearly solve
> the conflict during integration. As both patch sets modified 'struct rte_mbuf',
> and the final layout of the 'struct rte_mbuf' is key to vectorized ixgbe PMD.
> 
> v2 changes:
> * Enlarged the packet_type field from 16 bits to 32 bits.
> * Redefined the packet type sub-fields.
> * Updated the 'struct rte_kni_mbuf' for KNI according to the mbuf changes.
> * Used redefined packet types and enlarged packet_type field for all PMDs
>   and corresponding applications.
> * Removed changes in bond and its relevant application, as there is no need
>   at all according to the recent bond changes.
> 
> v3 changes:
> * Put the mbuf layout changes into a single patch.
> * Put vector ixgbe changes right after mbuf changes.
> * Disabled vector ixgbe PMD by default, as mbuf layout changed, and then
>   re-enabled it after vector ixgbe PMD updated.
> * Put the definitions of unified packet type into a single patch.
> * Minor bug fixes and enhancements in l3fwd example.
> 
> v4 changes:
> * Added detailed description of each packet types.
> * Supported unified packet type of fm10k.
> * Added printing logs of packet types of each received packet for rxonly
>   mode in testpmd.
> * Removed several useless code lines which block packet type unification from
>   app/test/packet_burst_generator.c.
> 
> v5 changes:
> * Added more detailed description for each packet types, together with examples.
> * Rolled back the macro definitions of RX packet flags, for ABI compitability.
> 
> v6 changes:
> * Disabled the code changes for unified packet type by default, to
>   avoid breaking ABI compatibility.
> 
> v7 changes:
> * Renamed RTE_UNIFIED_PKT_TYPE to RTE_NEXT_ABI.
> * Integrated with patch set for '[PATCH v3 0/7] support i40e QinQ stripping
>   and insertion', to clearly solve the conflicts during merging.
> 
> v8 changes:
> * Moved the field of 'vlan_tci_outer' in 'struct rte_mbuf' to the end of the 1st
>   cache line, to avoid breaking any vectorized PMD storing, as fields of
>   'packet_type, pkt_len, data_len, vlan_tci, rss' should be in an contiguous 128
>   bits.
> 
> Helin Zhang (18):
>   mbuf: redefine packet_type in rte_mbuf
>   ixgbe: support unified packet type in vectorized PMD
>   mbuf: add definitions of unified packet types
>   e1000: replace bit mask based packet type with unified packet type
>   ixgbe: replace bit mask based packet type with unified packet type
>   i40e: replace bit mask based packet type with unified packet type
>   enic: replace bit mask based packet type with unified packet type
>   vmxnet3: replace bit mask based packet type with unified packet type
>   fm10k: replace bit mask based packet type with unified packet type
>   app/test-pipeline: replace bit mask based packet type with unified
>     packet type
>   app/testpmd: replace bit mask based packet type with unified packet
>     type
>   app/test: Remove useless code
>   examples/ip_fragmentation: replace bit mask based packet type with
>     unified packet type
>   examples/ip_reassembly: replace bit mask based packet type with
>     unified packet type
>   examples/l3fwd-acl: replace bit mask based packet type with unified
>     packet type
>   examples/l3fwd-power: replace bit mask based packet type with unified
>     packet type
>   examples/l3fwd: replace bit mask based packet type with unified packet
>     type
>   mbuf: remove old packet type bit masks
> 
>  app/test-pipeline/pipeline_hash.c                  |  13 +
>  app/test-pmd/csumonly.c                            |  14 +
>  app/test-pmd/rxonly.c                              | 183 +++++++
>  app/test/packet_burst_generator.c                  |   6 +-
>  drivers/net/e1000/igb_rxtx.c                       | 102 ++++
>  drivers/net/enic/enic_main.c                       |  26 +
>  drivers/net/fm10k/fm10k_rxtx.c                     |  27 ++
>  drivers/net/i40e/i40e_rxtx.c                       | 528 +++++++++++++++++++++
>  drivers/net/ixgbe/ixgbe_rxtx.c                     | 163 +++++++
>  drivers/net/ixgbe/ixgbe_rxtx_vec.c                 |  75 ++-
>  drivers/net/vmxnet3/vmxnet3_rxtx.c                 |   8 +
>  examples/ip_fragmentation/main.c                   |   9 +
>  examples/ip_reassembly/main.c                      |   9 +
>  examples/l3fwd-acl/main.c                          |  29 +-
>  examples/l3fwd-power/main.c                        |   8 +
>  examples/l3fwd/main.c                              | 123 ++++-
>  .../linuxapp/eal/include/exec-env/rte_kni_common.h |   6 +
>  lib/librte_mbuf/rte_mbuf.c                         |   4 +
>  lib/librte_mbuf/rte_mbuf.h                         | 517 ++++++++++++++++++++
>  19 files changed, 1837 insertions(+), 13 deletions(-)
> 
> --

Acked-by: Konstantin Ananyev <konstantin.ananyev at intel.com>

> 1.9.3



More information about the dev mailing list