The VIRTIO 1.1 specification has been published! This article covers the major new features in this specification.
New Devices
The following new devices are defined:
- virtio-input is a Linux evdev input device (mouse, keyboard, joystick)
- virtio-gpu is a 2D graphics device (with 3D support planned)
- virtio-vsock is a host<->guest socket communications device
- virtio-crypto is a cryptographic accelerator device
New Device Features
virtio-net
- VIRTIO_NET_F_MTU advises the driver of the device's maximum MTU
- VIRTIO_NET_F_RSC_EXT adds Receive Segment Coalescing support
- VIRTIO_NET_F_STANDBY indicates that this device can act as a failover device for a primary device
virtio-blk
- VIRTIO_BLK_F_DISCARD adds discard (aka trim) support for unmapping blocks
- VIRTIO_BLK_F_WRITE_ZEROES adds zero offload support and is more efficient than writing buffers of zeroes
virtio-balloon
- Several new guest memory statistics are available
New Core Features
There is a new virtqueue memory layout called packed virtqueues. The old layout is called split virtqueues because the avail and used rings are separate from the descriptor table. The new packed virtqueue layout uses just a single descriptor table as the single ring. The layout is optimized for a friendlier CPU cache footprint and there are several features that devices can exploit for better peformance.
The VIRTIO_F_NOTIFICATION_DATA feature is an optimization mainly for hardware implementations of VIRTIO. The driver writes extra information as part of the Available Buffer Notification. Thanks to the information included in the notification, the device does not need to fetch this information from memory anymore. This is useful for PCI hardware implementations where minimizing DMA operations improves performance significantly.