[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: [PATCH v5 7/7] transport-fabrics: introduce keyed eager buffers
The Virtio-oF device instance can expose keyed eager buffers, the Virtio-oF initiator can write device-readable virtqueue buffers and send VQ command in a single RTT on the fabric, this makes better performance. Signed-off-by: zhenwei pi <pizhenwei@bytedance.com> --- transport-fabrics.tex | 81 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/transport-fabrics.tex b/transport-fabrics.tex index 4e571be..8969f23 100644 --- a/transport-fabrics.tex +++ b/transport-fabrics.tex @@ -196,6 +196,8 @@ \subsubsection{Opcodes}\label{sec:Virtio Transport Options / Virtio Over Fabrics #define virtio_of_op_get_feature 0x0004 #define virtio_of_op_set_feature 0x0005 #define virtio_of_op_get_keyed_num_descs 0x0100 +#define virtio_of_op_get_keyed_eager_buf 0x0102 +#define virtio_of_op_vq_keyed_eager_buf 0x0ffe #define virtio_of_op_vq 0x0fff #define virtio_of_op_get_vendor_id 0x1000 #define virtio_of_op_get_device_id 0x1001 @@ -351,6 +353,9 @@ \subsubsection{Opcodes}\label{sec:Virtio Transport Options / Virtio Over Fabrics \begin{lstlisting} /* support virtio_of_op_get_keyed_num_descs to get the maximum number of keyed descriptors */ #define VIRTIO_OF_F_KEYED_NUM_DESCS 0 + +/* support virtio_of_op_get_keyed_eager_buf to get the eager buffers of the Virtio-oF virtqueues */ +#define VIRTIO_OF_F_KEYED_EAGER_BUF 1 \end{lstlisting} \paragraph{Set Feature Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Set Feature Command} @@ -409,6 +414,82 @@ \subsubsection{Opcodes}\label{sec:Virtio Transport Options / Virtio Over Fabrics }; \end{lstlisting} +\paragraph{Get Keyed Eager Buffers Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Get Keyed Eager Buffers Command} +A Virtio-oF virtqueue may expose 0 or more keyed buffers that allow the Virtio-oF initiator to write directly to the Virtio-oF device instance. +The Keyed Eager Buffers mechanism reduces round-trip time on the fabrics. +The Get Keyed Eager Buffers Command is used to get the eager buffers of a Virtio-oF virtqueue, +and it is executed on the Virtio-oF control queue. + +The structure of the Get Keyed Deager Buffers Command structure is as follows: +\begin{lstlisting} +struct virtio_of_command_get_keyed_eager_buf { + /* opcode is virtio_of_op_get_keyed_eager_buf */ + le16 opcode; + /* unique ID for all in-flight commands */ + le16 command_id; + /* the Virtio-oF virtqueue index */ + le16 vq_index; + /* the maximum number of eager buffer descriptors to obtain */ + u8 descs; + u8 reserved[9]; +}; +\end{lstlisting} + +The Get Keyed Eager Buffers Body is a contiguous memory of \texttt{descs} elements (virtio_of_keyed_desc type). + +The structure of the Get Keyed Eager Buffers Completion is as follows: +\begin{lstlisting} +struct virtio_of_completion_get_keyed_eager_buf { + le16 status; + le16 command_id; + /* the number of eager buffer descriptors */ + u8 descs; + u8 reserved[11]; +}; +\end{lstlisting} + +Note: multiple keyed eager buffers compose a logical memory range sequentially. +To locate a position within the range, use the offset and length values as follows: +\begin{lstlisting} + +-----------+-----------+ +-----------+ + |addr0, len0|addr1, len1| ... |addrN, lenN| + +-----------+-----------+ +-----------+ + | | + \---offset, length---/ +\end{lstlisting} + +\paragraph{VQ Keyed Eager Buffers Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / VQ Keyed Eager Buffers Command} +The Virtio-oF initiator must write device-readable virtqueue buffers into the Virtio-oF virtqueue eager buffers, +then issue The VQ Keyed Eager Buffers Command to transmit virtqueue buffers. +This command is executed on the Virtio-oF virtqueue only. + +The structure of the VQ Keyed Eager Buffers Command structure is as follows: +\begin{lstlisting} +struct virtio_of_command_vq_keyed_eager_buf { + /* opcode is virtio_of_op_vq_keyed_eager_buf */ + le16 opcode; + /* unique ID for all in-flight commands */ + le16 command_id; + /* the offset of Virtio-oF virtqueue eager buffers */ + le32 out_offset; + /* the length of device-readable virtqueue buffers */ + le32 out_length; + /* the length of device-writable virtqueue buffers */ + le32 in_length; +}; +\end{lstlisting} + +The structure of the VQ Keyed Eager Buffers Completion is as follows: +\begin{lstlisting} +struct virtio_of_completion_vq_keyed_eager_buf { + le16 status; + le16 command_id; + /* the length of virtqueue buffers from Virtio-oF target */ + le32 length; + u8 reserved[8]; +}; +\end{lstlisting} + \paragraph{VQ Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / VQ Command} The VQ Command is used to transmit virtqueue buffers for Virtio-oF virtqueue only. -- 2.25.1
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]