[ovs-dev] [PATCHv9 1/2] userspace: Enable TSO support for non-DPDK.
William Tu
u9012063 at gmail.com
Thu May 14 14:23:50 UTC 2020
On Thu, May 14, 2020 at 01:42:21PM +0200, Ilya Maximets wrote:
> On 3/24/20 11:10 PM, William Tu wrote:
> > This patch enables TSO support for non-DPDK use cases, and
> > also add check-system-tso testsuite. Before TSO, we have to
> > disable checksum offload, allowing the kernel to calculate the
> > TCP/UDP packet checsum. With TSO, we can skip the checksum
> > validation by enabling checksum offload, and with large packet
> > size, we see better performance.
> >
> > Consider container to container use cases:
> > iperf3 -c (ns0) -> veth peer -> OVS -> veth peer -> iperf3 -s (ns1)
> > And I got around 6Gbps, similar to TSO with DPDK-enabled.
> >
> > Signed-off-by: William Tu <u9012063 at gmail.com>
> > Acked-by: Flavio Leitner <fbl at sysclose.org>
> >
>
> This version looks good except the '(DPDK doesn't support)' comment.
> It's misleading. DPDK supports partial offloading.
>
> And a couple of minor style/grammar suggestions:
> ---
> diff --git a/lib/dp-packet.h b/lib/dp-packet.h
> index 4c127e759..0430cca8e 100644
> --- a/lib/dp-packet.h
> +++ b/lib/dp-packet.h
> @@ -47,6 +47,7 @@ enum OVS_PACKED_ENUM dp_packet_source {
> };
>
> #define DP_PACKET_CONTEXT_SIZE 64
> +
> #ifdef DPDK_NETDEV
> #define DEF_OL_FLAG(NAME, DPDK_DEF, GENERIC_DEF) NAME = DPDK_DEF
> #else
> @@ -58,7 +59,7 @@ enum dp_packet_offload_mask {
> /* Value 0 is not used. */
> /* Is the 'rss_hash' valid? */
> DEF_OL_FLAG(DP_PACKET_OL_RSS_HASH, PKT_RX_RSS_HASH, 0x1),
> - /* Is the 'flow_mark' valid? (DPDK does not support) */
> + /* Is the 'flow_mark' valid? */
> DEF_OL_FLAG(DP_PACKET_OL_FLOW_MARK, PKT_RX_FDIR_ID, 0x2),
> /* Bad L4 checksum in the packet. */
> DEF_OL_FLAG(DP_PACKET_OL_RX_L4_CKSUM_BAD, PKT_RX_L4_CKSUM_BAD, 0x4),
> @@ -80,20 +81,20 @@ enum dp_packet_offload_mask {
> DEF_OL_FLAG(DP_PACKET_OL_TX_UDP_CKSUM, PKT_TX_UDP_CKSUM, 0x400),
> /* Offload SCTP checksum. */
> DEF_OL_FLAG(DP_PACKET_OL_TX_SCTP_CKSUM, PKT_TX_SCTP_CKSUM, 0x800),
> - /* Adding new field requres adding to DP_PACKET_OL_SUPPORTED_MASK */
> + /* Adding new field requires adding to DP_PACKET_OL_SUPPORTED_MASK. */
> };
>
> -#define DP_PACKET_OL_SUPPORTED_MASK (DP_PACKET_OL_RSS_HASH | \
> - DP_PACKET_OL_FLOW_MARK | \
> - DP_PACKET_OL_RX_L4_CKSUM_BAD | \
> - DP_PACKET_OL_RX_IP_CKSUM_BAD | \
> - DP_PACKET_OL_RX_L4_CKSUM_GOOD| \
> - DP_PACKET_OL_RX_IP_CKSUM_GOOD| \
> - DP_PACKET_OL_TX_TCP_SEG | \
> - DP_PACKET_OL_TX_IPV4 | \
> - DP_PACKET_OL_TX_IPV6 | \
> - DP_PACKET_OL_TX_TCP_CKSUM | \
> - DP_PACKET_OL_TX_UDP_CKSUM | \
> +#define DP_PACKET_OL_SUPPORTED_MASK (DP_PACKET_OL_RSS_HASH | \
> + DP_PACKET_OL_FLOW_MARK | \
> + DP_PACKET_OL_RX_L4_CKSUM_BAD | \
> + DP_PACKET_OL_RX_IP_CKSUM_BAD | \
> + DP_PACKET_OL_RX_L4_CKSUM_GOOD | \
> + DP_PACKET_OL_RX_IP_CKSUM_GOOD | \
> + DP_PACKET_OL_TX_TCP_SEG | \
> + DP_PACKET_OL_TX_IPV4 | \
> + DP_PACKET_OL_TX_IPV6 | \
> + DP_PACKET_OL_TX_TCP_CKSUM | \
> + DP_PACKET_OL_TX_UDP_CKSUM | \
> DP_PACKET_OL_TX_SCTP_CKSUM)
>
> #define DP_PACKET_OL_TX_L4_MASK (DP_PACKET_OL_TX_TCP_CKSUM | \
> @@ -888,7 +889,7 @@ dp_packet_batch_reset_cutlen(struct dp_packet_batch *batch)
> }
>
> /* Returns the RSS hash of the packet 'p'. Note that the returned value is
> - * correct only if 'dp_packet_rss_valid(p)' returns true */
> + * correct only if 'dp_packet_rss_valid(p)' returns 'true'. */
> static inline uint32_t
> dp_packet_get_rss_hash(const struct dp_packet *p)
> {
> ---
>
>
> With above diff applied for the series:
> Acked-by: Ilya Maximets <i.maximets at ovn.org>
Applied to master, thanks!
More information about the dev
mailing list