nanovms / nanos

A kernel designed to run one and only one application in a virtualized environment
https://nanos.org
Apache License 2.0
2.59k stars 134 forks source link

virtio-net: add support for segmentation offload #1985

Closed francescolavra closed 8 months ago

francescolavra commented 9 months ago

This patchset enhances the virtio-net driver to support TCP segmentation and UDP fragmentation offload, which allows the virtIO device to merge multiple received packets into one large packet; in addition, the driver now supports the MRG_RXBUF feature, so that it is not necessary for the driver to allocate large RX buffers in order to receive large packets. These changes bring a performance improvement to applications receiving large amounts of data over a network link, e.g. when a VM uses virtual network interfaces backed by tap interfaces on the host. The first commit is a fix to the network socket code that was causing a performance penalty in data transfers on TCP connections with the window scaling option enabled.

rinor commented 9 months ago

will investigate further, but it looks like this is breaking some stuff on clouds. GCP metrics for one is not working anymore (no errors, no warnings).

francescolavra commented 8 months ago

GCP metrics for one is not working anymore (no errors, no warnings).

Thanks for reporting the issue. The code used by the GCP klib to communicate with the monitoring server was indeed not prepared to handle input packets with segmentation offload. This is now fixed in the updated PR, and specifically in commit https://github.com/nanovms/nanos/pull/1985/commits/3ef3181a34dff24adf4d010f32fc9ecf9ebf802a