[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: [PATCH v2 05/11] transport-fabrics: introduce Keyed Transmission
Keyed transmission is used for message oriented communication(Ex RDMA), also add virtio-blk read/write 8K example. Signed-off-by: zhenwei pi <pizhenwei@bytedance.com> --- transport-fabrics.tex | 178 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) diff --git a/transport-fabrics.tex b/transport-fabrics.tex index c02cf26..7711321 100644 --- a/transport-fabrics.tex +++ b/transport-fabrics.tex @@ -317,3 +317,181 @@ \subsubsection{Buffer Mapping Definition}\label{sec:Virtio Transport Options / V |......| +------+ -> 8193 \end{lstlisting} + +\paragraph{Keyed Transmission}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Transmission Protocol / Commands Definition / Keyed Transmission} +Command and Segment Descriptors are transmitted in a message within a +connection, and buffer is transmitted by remote memory access. The layout in message: + +\begin{lstlisting} +CMDx contains 0 descriptor, CMDy contains (n - m + 1) descriptors: + + +-----+ +-----++-----+ +-----+ + ... | CMDx| ... | CMDy||DESCm| ... |DESCn| ... + +-----+ +-----++-----+ +-----+ + +COMPx contains 0 descriptor, COMPy contains 0 descriptor: + + +-----+ +-----+ + ... |COMPx| ... |COMPy| ... + +-----+ +-----+ +\end{lstlisting} + +An example of a virtio-blk write 8K request(message size: sizeof(Command) + +4 * sizeof(Descriptor)): +\begin{lstlisting} + COMMAND +------+ + |opcode| -> virtio_of_op_vring + +------+ + |cmd id| -> 10 + +------+ + |length| -> 0 + +------+ + |ndesc | -> 4 + +------+ + |rsvd | + +------+ + + DESC0 +------+ + |addr | -> 0xffff012345670000 + +------+ + |length| -> 16 (virtio blk write command) + +------+ + |id | -> 0 + +------+ + |flags | -> VIRTIO_OF_DESC_F_KEYED + +------+ + |key | -> 0x1234 + +------+ + + DESC1 +------+ + |addr | -> 0xffff012345671000 + +------+ + |length| -> 4096 + +------+ + |id | -> 1 + +------+ + |flags | -> VIRTIO_OF_DESC_F_KEYED + +------+ + |key | -> 0x1236 + +------+ + + DESC2 +------+ + |addr | -> 0xffff012345673000 + +------+ + |length| -> 4096 + +------+ + |id | -> 2 + +------+ + |flags | -> VIRTIO_OF_DESC_F_KEYED + +------+ + |key | -> 0x1238 + +------+ + + DESC3 +------+ + |addr | -> 0xffff012345677000 + +------+ + |length| -> 1 + +------+ + |id | -> 3 + +------+ + |flags | -> VIRTIO_OF_DESC_F_KEYED | VIRTIO_OF_DESC_F_WRITE + +------+ + |key | -> 0x1239 + +------+ +\end{lstlisting} + +The target handles Command, reads the remote addresses of DESC0/DESC1/DESC2, +writes the remote address of DESC3, then responses Completion: +\begin{lstlisting} + COMPLETION +------+ + |status| -> VIRTIO_OF_SUCCESS + +------+ + |cmd id| -> 10 + +------+ + |ndesc | -> 0 + +------+ + |rsvd | + +------+ + |value | -> 1 (value.u32) + +------+ +\end{lstlisting} + +Another example of a virtio-blk read 8K request(message size: sizeof(Command) + +4 * sizeof(Descriptor)): +\begin{lstlisting} + COMMAND +------+ + |opcode| -> virtio_of_op_vring + +------+ + |cmd id| -> 10 + +------+ + |length| -> 0 + +------+ + |ndesc | -> 4 + +------+ + |rsvd | + +------+ + + DESC0 +------+ + |addr | -> 0xffff012345670000 + +------+ + |length| -> 16 (virtio blk write command) + +------+ + |id | -> 0 + +------+ + |flags | -> VIRTIO_OF_DESC_F_KEYED + +------+ + |key | -> 0x1234 + +------+ + + DESC1 +------+ + |addr | -> 0xffff012345671000 + +------+ + |length| -> 4096 + +------+ + |id | -> 1 + +------+ + |flags | -> VIRTIO_OF_DESC_F_KEYED | VIRTIO_OF_DESC_F_WRITE + +------+ + |key | -> 0x1236 + +------+ + + DESC2 +------+ + |addr | -> 0xffff012345673000 + +------+ + |length| -> 4096 + +------+ + |id | -> 2 + +------+ + |flags | -> VIRTIO_OF_DESC_F_KEYED | VIRTIO_OF_DESC_F_WRITE + +------+ + |key | -> 0x1238 + +------+ + + DESC3 +------+ + |addr | -> 0xffff012345677000 + +------+ + |length| -> 1 + +------+ + |id | -> 3 + +------+ + |flags | -> VIRTIO_OF_DESC_F_KEYED | VIRTIO_OF_DESC_F_WRITE + +------+ + |key | -> 0x1239 + +------+ +\end{lstlisting} + +The target handles Command, reads the remote address of DESC0, writes the remote +addresses of DESC1/DESC2/DESC3, then responses Completion: +\begin{lstlisting} + COMPLETION +------+ + |status| -> VIRTIO_OF_SUCCESS + +------+ + |cmd id| -> 10 + +------+ + |ndesc | -> 0 + +------+ + |rsvd | + +------+ + |value | -> 8193 (value.u32) + +------+ +\end{lstlisting} -- 2.25.1
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]