A new version of the virtio specification has been released! As it has been three years after the 1.1 release, quite a lot of changes have accumulated. I have attempted to list some of them below; for details, you are invited to check out the spec :)
There are already some changes queued for 1.3; let’s hope it won’t take us three years again before the next release ;)
New device types in 1.2
Several new device types have been added.
- virtio-pmem: persistent memory device; useful to avoid a separate page cache in the guest
- virtio-fs: access a file system; kind of the spritual successor to the never officially standardized virtio-9p
- virtio-rpmb: a tamper-resistant and anti-replay storage device
- virtio-iommu: can both be a proxy for a physical IOMMU, or act as a virtual IOMMU
- virtio-snd: a sound card supporting input and output PCM streams
- virtio-mem: provides a memory region in guest physical address space; useful to implement memory hot(un)plugging
- virtio-i2c: a virtual I2C adapter
- virtio-scmi: implements the Arm System Control and Management Interface, for things like sensors etc.
- virtio-gpio: a virtual GPIO device to manage named I/O lines
New features for existing device types
Enhancements have been added to some already existing device types.
- virtio-blk
- multiqueue support
- lifetime metrics
- secure erase
- virtio-net
- support for the guest providing the exact header length
- receive-side scaling
- per-packet hash reporting
- per-virtqueue driver notifications
- UDP segmentation offload
- virtio-gpu
- support for 3D commands
- resource sharing
- blob resources
- context initialization
- virtio-balloon
- free page hints
- page poisoning
- free page reporting
- virtio-vsock
- seqpacket sockets
Features not specific to a device type
Some general enhancements include:
- support for vendor-specific PCI capabilities
- support for sharing resources between devices
- support for resetting individual virtqueues