From: Olivier Matz <olivier.matz@6wind.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH v2 00/17] ixgbe/mbuf: add TSO support
Date: Mon, 19 May 2014 15:56:12 +0200 [thread overview]
Message-ID: <1400507789-18453-1-git-send-email-olivier.matz@6wind.com> (raw)
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
next reply other threads:[~2014-05-19 13:56 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-19 13:56 Olivier Matz [this message]
2014-05-19 13:56 ` [dpdk-dev] [PATCH v2 01/17] igb/ixgbe: fix IP checksum calculation Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [PATCH v2 02/17] mbuf: rename RTE_MBUF_SCATTER_GATHER into RTE_MBUF_REFCNT Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [PATCH v2 03/17] mbuf: remove rte_ctrlmbuf Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [PATCH v2 04/17] mbuf: remove the rte_pktmbuf structure Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [PATCH v2 05/17] mbuf: merge physaddr and buf_len in a bitfield Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [PATCH v2 06/17] mbuf: cosmetic changes in rte_mbuf structure Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [PATCH v2 07/17] mbuf: replace data pointer by an offset Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [PATCH v2 08/17] mbuf: add functions to get the name of an ol_flag Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [PATCH v2 09/17] mbuf: change ol_flags to 32 bits Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [PATCH v2 10/17] mbuf: rename vlan_macip_len in hw_offload and increase its size Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [PATCH v2 11/17] testpmd: modify source address to validate checksum calculation Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [PATCH v2 12/17] mbuf: generic support of TCP segmentation offload Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [PATCH v2 13/17] ixgbe: support " Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [virtio-net-pmd PATCH v2 14/17] pmd: adapt to new rte_mbuf structure Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [vmxnet3-usermap PATCH v2 15/17] pmd: remove support of old dpdk versions Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [vmxnet3-usermap PATCH v2 16/17] pmd: adapt to new rte_mbuf structure Olivier Matz
2014-05-19 13:56 ` [dpdk-dev] [memnic PATCH v2 17/17] " Olivier Matz
2014-05-22 15:02 ` [dpdk-dev] [PATCH v2 00/17] add TSO support Thomas Monjalon
2014-05-22 16:09 ` Venkatesan, Venky
2014-05-23 14:22 ` Olivier MATZ
2014-05-23 14:43 ` Venkatesan, Venky
2014-05-26 11:59 ` Olivier MATZ
2014-05-23 12:47 ` Ananyev, Konstantin
2014-05-23 14:32 ` Olivier MATZ
2014-05-26 15:20 ` Ananyev, Konstantin
2014-11-03 7:32 ` [dpdk-dev] [PATCH v2 00/17] ixgbe/mbuf: " Liu, Jijiang
2014-11-03 10:12 ` Olivier MATZ
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1400507789-18453-1-git-send-email-olivier.matz@6wind.com \
--to=olivier.matz@6wind.com \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).