diff options
author | Michael S. Tsirkin <mst@redhat.com> | 2018-03-09 23:23:35 +0200 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2018-03-20 02:29:10 +0200 |
commit | 40d6ce03a3f16146f896157a5af7a8a3d20661c2 (patch) | |
tree | b3827a01ab1a6d76b0ff6d206af6a6ed15a1276f /content.tex | |
parent | 8ff142ad62c4f2eb2f455d0da317474b30cb1d15 (diff) |
packed virtqueues: more efficient virtqueue layout
Performance analysis of this is in my kvm forum 2016 presentation. The
idea is to have a r/w descriptor in a ring structure, replacing the used
and available ring, index and descriptor buffer.
This is also easier for devices to implement than the 1.0 layout.
Several more enhancements will be necessary to actually make this
efficient for devices to use.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Cornelia Huck <cohuck@redhat.com>
Approved-by: https://www.oasis-open.org/apps/org/workgroup/virtio/ballot.php?id=3177
Fixes: https://github.com/oasis-tcs/virtio-spec/issues/3
Diffstat (limited to 'content.tex')
-rw-r--r-- | content.tex | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/content.tex b/content.tex index c577133..4147467 100644 --- a/content.tex +++ b/content.tex @@ -263,8 +263,20 @@ these parts (following \ref{sec:Basic Facilities of a Virtio Device / Split Virt \end{note} +Two formats are supported: Split Virtqueues (see \ref{sec:Basic +Facilities of a Virtio Device / Split +Virtqueues}~\nameref{sec:Basic Facilities of a Virtio Device / +Split Virtqueues}) and Packed Virtqueues (see \ref{sec:Basic +Facilities of a Virtio Device / Packed +Virtqueues}~\nameref{sec:Basic Facilities of a Virtio Device / +Packed Virtqueues}). + +Every driver and device supports either the Packed or the Split +Virtqueue format, or both. + \input{split-ring.tex} +\input{packed-ring.tex} \chapter{General Initialization And Device Operation}\label{sec:General Initialization And Device Operation} We start with an overview of device initialization, then expand on the @@ -5215,10 +5227,15 @@ Currently these device-independent feature bits defined: \begin{description} \item[VIRTIO_F_RING_INDIRECT_DESC (28)] Negotiating this feature indicates that the driver can use descriptors with the VIRTQ_DESC_F_INDIRECT - flag set, as described in \ref{sec:Basic Facilities of a Virtio Device / Virtqueues / The Virtqueue Descriptor Table / Indirect Descriptors}~\nameref{sec:Basic Facilities of a Virtio Device / Virtqueues / The Virtqueue Descriptor Table / Indirect Descriptors}. - + flag set, as described in \ref{sec:Basic Facilities of a Virtio +Device / Virtqueues / The Virtqueue Descriptor Table / Indirect +Descriptors}~\nameref{sec:Basic Facilities of a Virtio Device / +Virtqueues / The Virtqueue Descriptor Table / Indirect +Descriptors} and \ref{sec:Packed Virtqueues / Indirect Flag: Scatter-Gather Support}~\nameref{sec:Packed Virtqueues / Indirect Flag: Scatter-Gather Support}. \item[VIRTIO_F_RING_EVENT_IDX(29)] This feature enables the \field{used_event} - and the \field{avail_event} fields as described in \ref{sec:Basic Facilities of a Virtio Device / Virtqueues / Virtqueue Interrupt Suppression} and \ref{sec:Basic Facilities of a Virtio Device / Virtqueues / The Virtqueue Used Ring}. + and the \field{avail_event} fields as described in +\ref{sec:Basic Facilities of a Virtio Device / Virtqueues / Virtqueue Interrupt Suppression}, \ref{sec:Basic Facilities of a Virtio Device / Virtqueues / The Virtqueue Used Ring} and \ref{sec:Packed Virtqueues / Driver and Device Event Suppression}. + \item[VIRTIO_F_VERSION_1(32)] This indicates compliance with this specification, giving a simple way to detect legacy devices or drivers. @@ -5228,6 +5245,9 @@ Currently these device-independent feature bits defined: addresses in memory. If this feature bit is set to 0, then the device emits physical addresses which are not translated further, even though an IOMMU may be present. + \item[VIRTIO_F_RING_PACKED(34)] This feature indicates + support for the packed virtqueue layout as described in + \ref{sec:Basic Facilities of a Virtio Device / Packed Virtqueues}~\nameref{sec:Basic Facilities of a Virtio Device / Packed Virtqueues}. \end{description} \drivernormative{\section}{Reserved Feature Bits}{Reserved Feature Bits} @@ -5241,6 +5261,8 @@ passed to the device into physical addresses in memory. If VIRTIO_F_IOMMU_PLATFORM is not offered, then a driver MUST pass only physical addresses to the device. +A driver SHOULD accept VIRTIO_F_RING_PACKED if it is offered. + \devicenormative{\section}{Reserved Feature Bits}{Reserved Feature Bits} A device MUST offer VIRTIO_F_VERSION_1. A device MAY fail to operate further |