Red Hat Bugzilla – Bug 473120
RHEL 5.3: implement virtio_net mergeable receive buffer allocate scheme
Last modified: 2009-02-10 02:52:27 EST
Currently, with GSO support enabled, the virtio_net driver allocates maximum sized packet buffers and passes them to the host.
This uses up 20 virtio ring entries, allowing us to supply only 20 packets buffers to the host with a 256 entry ring.
This is a huge overhead when receiving small packets, and is most keenly felt when receiving MTU sized packets from off-host.
To improve the performance obtained with small packets, we have introduced a new buffer allocation scheme upstream whereby the guest allocates small buffers, allowing the ring to hold many more small packets than before.
In the case of large packets, the host can combine multiple buffers together to form a larger logical buffer with no effect on performance.
This is an addition to the virtio_net host<->guest ABI which has recently been added to the upstream net-next-2.6 tree and will be included in 2.6.29:
This scheme allows us to be efficient in our use of ring entries while still supporting large packets. Benchmarking using netperf from an external machine to a guest over a 10Gb/s network shows a 100% improvement from ~1Gb/s to ~2Gb/s. With a local host->guest benchmark with GSO disabled on the host side, throughput was seen to increase from 700Mb/s to 1.7Gb/s.
Created attachment 324773 [details]
You can download this test kernel from http://people.redhat.com/dzickus/el5
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on therefore solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.
*** Bug 469153 has been marked as a duplicate of this bug. ***