Skip to content

Commit b3d7617

Browse files
committed
Disable virtio offloading feature bits
This fixes the compatibility with vmnet framework defaults, and shows better and more consistent performance in most cases. vmnet has partly documented vmnet_enable_tso_key and vmnet_enable_checksum_ofload_key options. Enabling these options allows vment helper to work with current krunkit. Before (TSO and checksum offload enabled): | network | vm | iper3 | iperf3 -R | |----------------------|--------- |---------------|---------------| | gvproxy | krunkit | 1.40 Gbits/s | 20.00 Gbits/s | | vmnet-helper shared | krunkit | 1.38 Gbits/s | 46.20 Gbits/s | | vmnet-helper bridged | krunkit | 1.37 Gbits/s | 45.70 Gbits/s | | vmnet-helper shared | vfkit | 4.27 Gbits/s | 8.09 Gbits/s | | vmnet-helper bridged | vfkit | 4.30 Gbits/s | 10.50 Gbits/s | After (TSO and checksum offload disabled): | network | vm | iper3 | iperf3 -R | |----------------------|----------|---------------|---------------| | gvproxy | krunkit | 1.47 Gbits/s | 2.58 Gbits/s | | vmnet-helper shared | krunkit | 10.10 Gbits/s | 8.38 Gbits/s | | vmnet-helper shared | krunkit | 10.10 Gbits/s | 8.38 Gbits/s | | gvproxy | vfkit | 1.43 Gbits/s | 2.84 Gbits/s | | vmnet-helper shared | vfkit | 10.70 Gbits/s | 8.41 Gbits/s | | vmnet-helper bridged | vfkit | 12.10 Gbits/s | 11.50 Gbits/s | It seems that using offloading makes sense only in special cases, so it should be optional. Part-of: containers#264
1 parent 5c5c852 commit b3d7617

File tree

1 file changed

+3
-13
lines changed

1 file changed

+3
-13
lines changed

src/devices/src/virtio/net/device.rs

+3-13
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,7 @@ use std::path::PathBuf;
2121
use std::sync::atomic::AtomicUsize;
2222
use std::sync::Arc;
2323
use utils::eventfd::{EventFd, EFD_NONBLOCK};
24-
use virtio_bindings::virtio_net::{
25-
VIRTIO_NET_F_CSUM, VIRTIO_NET_F_GUEST_CSUM, VIRTIO_NET_F_GUEST_TSO4, VIRTIO_NET_F_GUEST_UFO,
26-
VIRTIO_NET_F_HOST_TSO4, VIRTIO_NET_F_HOST_UFO, VIRTIO_NET_F_MAC,
27-
};
24+
use virtio_bindings::virtio_net::VIRTIO_NET_F_MAC;
2825
use virtio_bindings::virtio_ring::VIRTIO_RING_F_EVENT_IDX;
2926
use vm_memory::{ByteValued, GuestMemoryError, GuestMemoryMmap};
3027

@@ -93,15 +90,8 @@ pub struct Net {
9390
impl Net {
9491
/// Create a new virtio network device using the backend
9592
pub fn new(id: String, cfg_backend: VirtioNetBackend, mac: [u8; 6]) -> Result<Self> {
96-
let avail_features = 1 << VIRTIO_NET_F_GUEST_CSUM
97-
| 1 << VIRTIO_NET_F_CSUM
98-
| 1 << VIRTIO_NET_F_GUEST_TSO4
99-
| 1 << VIRTIO_NET_F_HOST_TSO4
100-
| 1 << VIRTIO_NET_F_GUEST_UFO
101-
| 1 << VIRTIO_NET_F_HOST_UFO
102-
| 1 << VIRTIO_NET_F_MAC
103-
| 1 << VIRTIO_RING_F_EVENT_IDX
104-
| 1 << VIRTIO_F_VERSION_1;
93+
let avail_features =
94+
1 << VIRTIO_NET_F_MAC | 1 << VIRTIO_RING_F_EVENT_IDX | 1 << VIRTIO_F_VERSION_1;
10595

10696
let mut queue_evts = Vec::new();
10797
for _ in QUEUE_SIZES.iter() {

0 commit comments

Comments
 (0)