[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [PATCH v2 7/7] virtio-net: Describe RSS using receive queue handle
On Tue, Mar 21, 2023 at 06:10:36AM +0200, Parav Pandit wrote: > The content of indirection table and unclassified_queue which are > based on math calculation historically. To better describe this, to > avoid intermixing array index with virtqueue index and to use virtqueue > number > > introduce a field rq_handle (receive queue handle) and refer them > to describe unclassified_queue and indirection_table fields. > > As part of it, have the example that uses non zero virtqueue > number which helps to have better mapping between receiveX > object with virtqueue number and the actual value in the > indirection table. > > Fixes: https://github.com/oasis-tcs/virtio-spec/issues/163 > Signed-off-by: Parav Pandit <parav@nvidia.com> > > --- > changelog: > v0->v1: > - new patch suggested by Michael Tsirkin > --- > device-types/net/description.tex | 24 +++++++++++++++++++----- > 1 file changed, 19 insertions(+), 5 deletions(-) > > diff --git a/device-types/net/description.tex b/device-types/net/description.tex > index 435c1fc..fa9b4c7 100644 > --- a/device-types/net/description.tex > +++ b/device-types/net/description.tex > @@ -1442,20 +1442,32 @@ \subsubsection{Control Virtqueue}\label{sec:Device Types / Network Device / Devi > \field{indirection_table} array. > Number of entries in \field{indirection_table} is (\field{indirection_table_mask} + 1). > > -Field \field{unclassified_queue} contains the 0-based index of > -the receive virtqueue to place unclassified packets in. Index 0 corresponds to receiveq1. > +Field \field{unclassified_queue} contains the receive queue > +handle \field{rq_handle} described below. > > -Field \field{indirection_table} contains an array of 0-based indices of receive virtqueues. Index 0 corresponds to receiveq1. > +Field \field{indirection_table} contains an array of receive > +queue handles described below in \field{rq_handle}. This is only used once, here. I understand that we need a name for this but it need not be so generic, I feel it's just confusing. I propose "indirection table entry". Thus: Field \field{indirection_table} contains an array of indirection table entries. Each indirection table entry consists of a vq number value divided by 2. Thus, an entry value of 3 maps to virtqueue number 6 which corresponds to receiveq4 > For example at > +array index 0, why mention array index here? > a value of 3 maps to virtqueue number 6 > +which corresponds to receiveq4. It's a good idea to first describe a concept then provide an example. > A driver sets \field{max_tx_vq} to inform a device how many transmit virtqueues it may use (transmitq1\ldots transmitq \field{max_tx_vq}). > > Fields \field{hash_key_length} and \field{hash_key_data} define the key to be used in hash calculation. > > +\begin{lstlisting} > +le16 rq_handle; > +\end{lstlisting} > + > +\field{rq_handle} is a receive virtqueue handle. It is calculated as > +virtqueue number divided by 2. For example a receive virtqueue handle > +value of 3 corresponds to virtqueue number 6 maps to receiveq4. > + it's a bit disconnected from the rest of the description. why not adjacent to it? > \drivernormative{\subparagraph}{Setting RSS parameters}{Device Types / Network Device / Device Operation / Control Virtqueue / Receive-side scaling (RSS) } > > A driver MUST NOT send the VIRTIO_NET_CTRL_MQ_RSS_CONFIG command if the feature VIRTIO_NET_F_RSS has not been negotiated. > > -A driver MUST fill the \field{indirection_table} array only with indices of enabled queues. Index 0 corresponds to receiveq1. > +A driver MUST fill the \field{indirection_table} array only with > +the \field{rq_handle} corresponding to the enabled receive virtqueues. > > The number of entries in \field{indirection_table} (\field{indirection_table_mask} + 1) MUST be a power of two. > > @@ -1468,7 +1480,9 @@ \subsubsection{Control Virtqueue}\label{sec:Device Types / Network Device / Devi > \begin{itemize} > \item Calculate the hash of the packet as defined in \ref{sec:Device Types / Network Device / Device Operation / Processing of Incoming Packets / Hash calculation for incoming packets}. > \item If the device did not calculate the hash for the specific packet, the device directs the packet to the receiveq specified by \field{unclassified_queue} of virtio_net_rss_config structure. > -\item Apply \field{indirection_table_mask} to the calculated hash and use the result as the index in the indirection table to get 0-based number of destination receiveq. > +\item Apply \field{indirection_table_mask} to the calculated hash > +and use the result as the index in the indirection table to get > +\field{rq_handle}. > \item If the destination receive queue is being reset (See \ref{sec:Basic Facilities of a Virtio Device / Virtqueues / Virtqueue Reset}), the device MUST drop the packet. > \end{itemize} > > -- > 2.26.2
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]