Hi Maxime, A Grout issue [1] regarding RX checksum offload with virtio and vhost triggered my curiosity...
AFAIU, in Linux, the VIRTIO_NET_F_GUEST_CSUM flag on a virtio network device tells the host that it doesn't need to set the correct checksums in packets it writes to the device, because the guest will do it (when reading them). Now; if a guest application requests RTE_ETH_RX_OFFLOAD_CHECKSUM offload, the virtio PMD initializes the Linux device with VIRTIO_NET_F_GUEST_CSUM [2]. This behavior seems counterintuitive to me... I would assume that if an application cares about packet checksums on ingress, it will set RTE_ETH_RX_OFFLOAD_CHECKSUM, so the NIC/PMD checks them, and the application can discard packets with invalid checksums on ingress. But the virtio PMD uses RTE_ETH_RX_OFFLOAD_CHECKSUM to disable checksums, not enable them? Two questions: 1. What is the use case for a guest application receiving packets without correct packet checksums from the virtio ports, which motivated this driver behavior? 2. What is the performance gain in the Linux host by not setting the checksums (enabling VIRTIO_NET_F_GUEST_CSUM)? (If the guest application needs to calculate them instead, the performance cost in the guest might outweigh the performance gain in the host not doing it when creating the packet in the Linux kernel.) NB: According to the Grout issue, the vhost PMD behaves similarly; but I haven't checked. [1]: https://github.com/DPDK/grout/issues/724 [2]: https://github.com/DPDK/dpdk/blob/25.11/drivers/net/virtio/virtio_ethdev.c#L2282-L2284 Venlig hilsen / Kind regards, -Morten Brørup

