From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wg0-f48.google.com (mail-wg0-f48.google.com [74.125.82.48]) by dpdk.org (Postfix) with ESMTP id BA8D95916 for ; Mon, 19 May 2014 15:56:35 +0200 (CEST) Received: by mail-wg0-f48.google.com with SMTP id b13so7972601wgh.19 for ; Mon, 19 May 2014 06:56:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-type:content-transfer-encoding; bh=HTP5gxthuWElqIJtOLaMJIC1kXkrMBjEej5lKi5Rclw=; b=c6iVnxYAYkGqhptxi617YCzIuPORFn1CEH9yDA37+zx+cK5Tb5H6NXFccYlWjqJEXe EtWvbORQSk9kstFvsMAJ9LQylK6tvkE5YwV4FjiFnhPg5DiruPz24/Lk3eZ1mLBI7PXO LTLSES++jAvibRVrNuvZ+sRILUJy2SdbMxE4gjMUc9LtWcuo7iVzPz/dmwOSiH1IbBwv QvHqSEB632xRAiJnS5DhNQ6HpaJauKyNGxksRNTS4hfi0IbA8FtjrYWiucM1gkVtRUgo PHIPD8/OumxoSC3wYrq2aIo9GskzdixLIAHvdhYxpvxX3uGBpJx1KK0VWQuEhISKbkD8 H3Ug== X-Gm-Message-State: ALoCoQn9c7zLe9k86KSoa3Xh/6+bz/vfzY2CHyQh3ajvFGe1Uz4neD7ICUqCUiVkeqf+t4Go8V2v X-Received: by 10.194.57.225 with SMTP id l1mr30306795wjq.25.1400507804400; Mon, 19 May 2014 06:56:44 -0700 (PDT) Received: from glumotte.dev.6wind.com (6wind.net2.nerim.net. [213.41.180.237]) by mx.google.com with ESMTPSA id t18sm15201828wiv.16.2014.05.19.06.56.42 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 19 May 2014 06:56:43 -0700 (PDT) From: Olivier Matz To: dev@dpdk.org Date: Mon, 19 May 2014 15:56:12 +0200 Message-Id: <1400507789-18453-1-git-send-email-olivier.matz@6wind.com> X-Mailer: git-send-email 1.9.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v2 00/17] ixgbe/mbuf: add TSO support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 May 2014 13:56:36 -0000 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