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: http://git.kernel.org/?p=linux/kernel/git/davem/net-next-2.6.git;a=commitdiff;h=3f2c31d90327f21d76d296af34aa4ca547932ff4 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] virtio_net-mergeable-receive-buffers.patch
in kernel-2.6.18-126.el5 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. http://rhn.redhat.com/errata/RHSA-2009-0225.html
*** Bug 469153 has been marked as a duplicate of this bug. ***