[dpdk-users] DPDK RX TCP checksum failed
fwefew 4t4tg
7532yahoo at gmail.com
Mon Mar 28 05:11:53 CEST 2022
https://github.com/rodgarrison/reinvent
demonstrates ether/UDP chec-kum offload running on AWS which uses virtio. I
don't think TCP offload
is substantially different. Look here:
https://github.com/rodgarrison/reinvent/blob/main/integration_tests/reinvent_dpdk_udp/reinvent_dpdk_udp_integration_test.cpp#L345
for where the mbuf needs to be setup.
But I kind of agree with Stephan, although I haven't tested it, avoiding
more sets into mbuf which might involve cache misses it might be faster to
do by hand since the data is already in cache.
On Sat, Mar 26, 2022 at 2:59 PM Stephen Hemminger <
stephen at networkplumber.org> wrote:
> On Sat, 26 Mar 2022 08:13:21 +0000
> "jiangheng (H)" <jiangheng12 at huawei.com> wrote:
>
> > Hi all,
> >
> > I tried using the checksum offloads feature in DPDK and it did not see
> working under virtual machine.
> >
> > Port only support TCP checksum and do not support IP checksum:
> > rx_offload_capa = DEV_RX_OFFLOAD_TCP_CKSUM
> > tx_offload_capa = DEV_TX_OFFLOAD_TCP_CKSUM
> >
> > so I config rxmode.offload txmode.offloads as below:
> > rxmode.offloads = DEV_RX_OFFLOAD_TCP_CKSUM
> > txmode.offloads = DEV_TX_OFFLOAD_TCP_CKSUM
> >
> > For TX, I set the following parameters, it works good.
> > mbuf->l2_len = sizeof(*ethhdr)
> > mbuf->l3_len = ip header len
> > mbuf-ol_flags = RTE_MBUF_F_TX_IPV4 | RTE_MBUF_F_TX_TCP_CKSUM
>
>
> Virtio does not support IP checksum offload. Because Virtio passes
> packets to Linux kernel, and Linux kernel does not do IP checksum offload.
> The IP checksum is so trivial it is faster for most things to just
> do it in software; the header is only 20 bytes and it will be in cache.
>
> You should always check device capability before enabling an offload.
>
>
> > For RX, It will execute the following code:
> > In drivers/net/virtio/virtio_rxtx.c virtio_rx_offload function :
> > if (hdr->flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) {
> > hdrlen = hdr_lens.l2_len + hdr_lens.l3_len + hdr_lens.l4_len;
> > if (hdr->csum_start <= hdrlen && l4_supported) {
> > m->ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_NONE;
> > } else {
> >
> > m->ol_flags set to RTE_MBUF_F_RX_L4_CKSUM_NONE, causing the TCP RX
> checksum failed.
> > How do I avoid the above code going into this branch?
> >
>
> If you want TCP checksum offload you have to set
> RTE_ETH_RX_OFFLOAD_TCP_CKSUM
> in the rxmode when port is configured. This will tell virtio to ask the
> host to do rx offload. Again, virtio does not do IP checksum offload and
> you should always query device capability first.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mails.dpdk.org/archives/users/attachments/20220327/cd5e3fd1/attachment-0001.htm>
More information about the users
mailing list