[dpdk-dev] [PATCH v2 00/17] ixgbe/mbuf: add TSO support

Liu, Jijiang jijiang.liu at intel.com
Mon Nov 3 08:32:44 CET 2014


Hi Olivier,

Do you plan to integrate this patch set with latest mbuf changes into DPDK1.8?

If yes, I can develop TSO feature of tunneling packet based on this patch set and the Mirek's i40e TSO patch set in the next release.

Thanks
Jijiang Liu

> -----Original Message-----
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Olivier Matz
> Sent: Monday, May 19, 2014 9:56 PM
> To: dev at dpdk.org
> Subject: [dpdk-dev] [PATCH v2 00/17] ixgbe/mbuf: add TSO support
> 
> This series add TSO support in ixgbe DPDK driver. This is the second version of the
> series. The first version (RFC) was posted 10 days ago and discussed on the list
> [1]. The list of changes is provided at the end of this cover letter.
> 
> Also, as discussed previously on the list [2], one problem is that there is not
> enough room in rte_mbuf today to store the required information to implement
> this feature:
>   - a new ol_flag
>   - the MSS
>   - the L4 header len
> 
> A solution would be to increase the size of the mbuf to 2 cache lines but it could
> have a bad impact on performance. This series proposes some rework to
> drastically reduce the size of the rte_mbuf structures before implementing the
> TSO, avoiding to change the mbuf size to 128 bytes.
> 
> After the rework of mbuf structures, the size of rte_mbuf structure is reduced by
> 9 bytes. The implementation of TSO requires to double the size of ol_flags (16 to
> 32 bits) and to double the size of offload information in order to add the mss and
> the l4 header length (32 to 64 bits). At the end of the whole series,
> sizeof(rte_mbuf) is still 64 bytes and 4 bytes are available for future use.
> 
> This rework causes a lot of modifications in the mbuf structure, implying some
> changes in the applications that directly use the mbuf structure fields instead of
> using the API functions (sometimes there is no function). In my opinion, it's the
> proper moment for this evolution as the 1.7.0 window is open.
> 
> About TSO, the new fields in mbuf try to be generic enough to apply to other
> hardware in the future. To delegate the TCP segmentation to the hardware, the
> user has to:
> 
>   - set the PKT_TX_TCP_SEG flag in mbuf->ol_flags (this flag implies
>     PKT_TX_IP_CKSUM and PKT_TX_TCP_CKSUM)
>   - fill the mbuf->hw_offload information: l2_len, l3_len, l4_len, mss
>   - calculate the pseudo header checksum and set it in the TCP header,
>     as required when doing hardware TCP checksum offload
>   - set the IP checksum to 0
> 
> Compilation of DPDK and examples is tested for the following
> targets: x86_64-*-linuxapp-gcc, i686-*-linuxapp-gcc, x86_64-*-bsdapp-gcc
> 
> The mbuf rework series is validated with autotests:
> 
>   cd dpdk.org/
>   make install T=x86_64-default-linuxapp-gcc
>   cd x86_64-default-linuxapp-gcc/
>   modprobe uio
>   insmod kmod/igb_uio.ko
>   python ../tools/igb_uio_bind.py -b igb_uio 0000:02:00.0
>   echo 0 > /proc/sys/kernel/randomize_va_space
>   echo 1000 > /sys/devices/system/node/node0/hugepages/hugepages-
> 2048kB/nr_hugepages
>   echo 1000 > /sys/devices/system/node/node1/hugepages/hugepages-
> 2048kB/nr_hugepages
>   mount -t hugetlbfs none /mnt/huge
>   make test
> 
> TSO is validated with IPv4 and IPv6 with testpmd (see the commit log of patch
> "ixgbe: support TCP segmentation offload" for details).
> 
> The performance non-regression has been tested with 6WINDGate fast path, and
> with test-pmd [3].
> 
> [1] http://dpdk.org/ml/archives/dev/2014-May/002322.html
> [2] http://dpdk.org/ml/archives/dev/2013-October/thread.html#572
> [3] http://dpdk.org/ml/archives/dev/2014-May/002516.html
> 
> 
> Changes included in v2:
> - rebase on head, resolve conflicts in 3 test-pmd engines
> - add more comments in rte_mbuf.h about how to use TSO
> - ixgbe: advertise the TSO feature
> - ixgbe: small optimization, move some tso code in the if (tx_ol_req)
> - split "mbuf: replace data pointer by an offset" (cosmetics vs functional)
> - split "ixgbe/mbuf: add TSO support" (ixgbe vs generic changes)
> - modifications of external PMDs (memnic, virtio, vmxnet3)
> - I did not add the new checksum flags PKT_RX_L4_CKSUM_GOOD and
>   PKT_RX_IP_CKSUM_GOOD as proposed on the list. The patch is ready but
>   I don't think it should be included in this series.
> 
> Olivier Matz (17):
>  dpdk             igb/ixgbe: fix IP checksum calculation
>  dpdk             mbuf: rename RTE_MBUF_SCATTER_GATHER into
>  dpdk             mbuf: remove rte_ctrlmbuf
>  dpdk             mbuf: remove the rte_pktmbuf structure
>  dpdk             mbuf: merge physaddr and buf_len in a bitfield
>  dpdk             mbuf: cosmetic changes in rte_mbuf structure
>  dpdk             mbuf: replace data pointer by an offset
>  dpdk             mbuf: add functions to get the name of an ol_flag
>  dpdk             mbuf: change ol_flags to 32 bits
>  dpdk             mbuf: rename vlan_macip_len in hw_offload and increase
>  dpdk             testpmd: modify source address to validate checksum
>  dpdk             mbuf: generic support of TCP segmentation offload
>  dpdk             ixgbe: support TCP segmentation offload
>  virtio-net-pmd   pmd: adapt to new rte_mbuf structure
>  vmxnet3-usermap  pmd: remove support of old dpdk versions  vmxnet3-usermap
> pmd: adapt to new rte_mbuf structure
>  memnic           pmd: adapt to new rte_mbuf structure
> 
> Diffstat:
>  dpdk.org/app/test-pmd/cmdline.c                                        |   60 -
>  dpdk.org/app/test-pmd/config.c                                         |   18
>  dpdk.org/app/test-pmd/csumonly.c                                       |   56
>  dpdk.org/app/test-pmd/flowgen.c                                        |   26
>  dpdk.org/app/test-pmd/icmpecho.c                                       |    6
>  dpdk.org/app/test-pmd/ieee1588fwd.c                                    |    6
>  dpdk.org/app/test-pmd/macfwd-retry.c                                   |    4
>  dpdk.org/app/test-pmd/macfwd.c                                         |   16
>  dpdk.org/app/test-pmd/macswap.c                                        |   16
>  dpdk.org/app/test-pmd/rxonly.c                                         |   53
>  dpdk.org/app/test-pmd/testpmd.c                                        |   14
>  dpdk.org/app/test-pmd/testpmd.h                                        |   15
>  dpdk.org/app/test-pmd/txonly.c                                         |   59 -
>  dpdk.org/app/test/commands.c                                           |    2
>  dpdk.org/app/test/test_mbuf.c                                          |  106 -
>  dpdk.org/app/test/test_sched.c                                         |    4
>  dpdk.org/config/defconfig_i686-default-linuxapp-gcc                    |    2
>  dpdk.org/config/defconfig_i686-default-linuxapp-icc                    |    2
>  dpdk.org/config/defconfig_x86_64-default-bsdapp-gcc                    |    2
>  dpdk.org/config/defconfig_x86_64-default-linuxapp-gcc                  |    2
>  dpdk.org/config/defconfig_x86_64-default-linuxapp-icc                  |    2
>  dpdk.org/doc/doxy-api.conf                                             |    2
>  dpdk.org/examples/dpdk_qat/crypto.c                                    |   22
>  dpdk.org/examples/dpdk_qat/main.c                                      |    2
>  dpdk.org/examples/exception_path/main.c                                |   13
>  dpdk.org/examples/ip_reassembly/ipv4_rsmbl.h                           |   30
>  dpdk.org/examples/ip_reassembly/main.c                                 |   10
>  dpdk.org/examples/ipv4_frag/Makefile                                   |    4
>  dpdk.org/examples/ipv4_frag/main.c                                     |    4
>  dpdk.org/examples/ipv4_frag/rte_ipv4_frag.h                            |   42
>  dpdk.org/examples/ipv4_multicast/Makefile                              |    4
>  dpdk.org/examples/ipv4_multicast/main.c                                |   16
>  dpdk.org/examples/l3fwd-power/main.c                                   |    2
>  dpdk.org/examples/l3fwd-vf/main.c                                      |    2
>  dpdk.org/examples/l3fwd/main.c                                         |   10
>  dpdk.org/examples/load_balancer/runtime.c                              |    2
>  dpdk.org/examples/multi_process/client_server_mp/mp_client/client.c    |    2
>  dpdk.org/examples/quota_watermark/qw/main.c                            |    4
>  dpdk.org/examples/vhost/main.c                                         |   43
>  dpdk.org/examples/vhost_xen/main.c                                     |   24
>  dpdk.org/lib/librte_eal/bsdapp/eal/include/exec-env/rte_kni_common.h   |    2
>  dpdk.org/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h |    2
>  dpdk.org/lib/librte_mbuf/rte_mbuf.c                                    |  105 -
>  dpdk.org/lib/librte_mbuf/rte_mbuf.h                                    |  580 ++++------
>  dpdk.org/lib/librte_pmd_e1000/em_rxtx.c                                |  163 +-
>  dpdk.org/lib/librte_pmd_e1000/igb_rxtx.c                               |  212 +--
>  dpdk.org/lib/librte_pmd_ixgbe/ixgbe_ethdev.c                           |    3
>  dpdk.org/lib/librte_pmd_ixgbe/ixgbe_rxtx.c                             |  419 ++++---
>  dpdk.org/lib/librte_pmd_ixgbe/ixgbe_rxtx.h                             |   10
>  dpdk.org/lib/librte_pmd_pcap/rte_eth_pcap.c                            |   14
>  dpdk.org/lib/librte_pmd_virtio/virtio_rxtx.c                           |   20
>  dpdk.org/lib/librte_pmd_virtio/virtqueue.h                             |   11
>  dpdk.org/lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c                         |   37
>  dpdk.org/lib/librte_pmd_xenvirt/rte_eth_xenvirt.c                      |   14
>  dpdk.org/lib/librte_pmd_xenvirt/virtqueue.h                            |    4
>  dpdk.org/lib/librte_sched/rte_sched.c                                  |   14
>  dpdk.org/lib/librte_sched/rte_sched.h                                  |   10
>  memnic/pmd/pmd_memnic.c                                                |   14
>  vmxnet3-usermap/pmd/vmxnet3.c                                          |  119 --
>  virtio-net-pmd/virtio_user.c                                           |   44
>  60 files changed, 1217 insertions(+), 1289 deletions(-)
> 
> 
> --
> 1.9.2



More information about the dev mailing list