[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: RE: [EXT] [virtio-dev] Re: [virtio-comment] [PATCH v2] virtio-net: support the RSS context
> -----Original Message----- > From: virtio-dev@lists.oasis-open.org <virtio-dev@lists.oasis-open.org> > On Behalf Of Heng Qi > Sent: Tuesday, September 5, 2023 7:04 PM > To: virtio-comment@lists.oasis-open.org; virtio-dev@lists.oasis-open.org > Cc: Michael S . Tsirkin <mst@redhat.com>; Parav Pandit > <parav@nvidia.com>; Jason Wang <jasowang@redhat.com>; Xuan Zhuo > <xuanzhuo@linux.alibaba.com>; Yuri Benditovich > <yuri.benditovich@daynix.com> > Subject: [EXT] [virtio-dev] Re: [virtio-comment] [PATCH v2] virtio-net: > support the RSS context > > External Email > > ---------------------------------------------------------------------- > Hi all! > > Do you have any comments on this? > > Thanks! > > å 2023/9/1 äå5:34, Heng Qi åé: > > Commit 84a1d9c48200 ("net: ethtool: extend RXNFC API to support RSS > spreading of > > filter matches") adds support for RSS context as a destination for > receive flow filters > > (see WIP work: https://urldefense.proofpoint.com/v2/url?u=https- > 3A__lists.oasis-2Dopen.org_archives_virtio- > 2Dcomment_202308_msg00194.html&d=DwIDaQ&c=nKjWec2b6R0mOyPaz7xtfQ&r=NHDPs > fcAYlN2z- > NXHHG4WB09qqS0voo_nf6_kGS625A&m=4OCN2dGMPgHxDFGtU81zZGzzaFYjTALBtQsWL230 > DoinsHzHA- > RVOOoF4XqITQuy&s=8MdvZRKdXb3tdMZuldE3Ed6VGmaKPPxc8vGxVyRb_Qc&e= ). > > > > An RSS context consists of configurable parameters specified by > receive-side scaling. > > > > Use case: > > When users want some data flows to be steered to specific multiple > rxqs, they can set > > receive flow filter rules for these data flows to an RSS context with > desired rxqs. > > > > How to set/configure an RSS context: > > Assuming no RSS context has been created before. > > 1. ethtool -X eth0 context new start 5 equal 8 > > > > This command creates an RSS context with an id=1 for eth0, and fills > in the indirection > > table with rxq indexes 5-8 circularly. The hash key and hash types > reuse the default > > RSS configuration. > > > > Then, we can use 'ethtool -x eth0 context 1' to query the above > configuration. > > > > 2. ethtool -X eth0 context new start 6 equal 7 \ > > hkey 8f:bf:dd:11:23:58:d2:8a:00:31:d0:32:a3:b5:1f:\ > > > 1f:e4:d1:fe:47:7f:64:42:fd:d0:61:16:b8:b0:f9:71:e8:2d:36:7f:18:dd:4d:c8: > f3 > > > > This command creates an RSS context with an id=2 for eth0, and fills > in the indirection > > table with rxq indexes 6-7 circularly. The hash key is > 8f:bf:dd:11:23:58:d2:8a:00:31:d0\ > > > :32:a3:b5:1f:1f:e4:d1:fe:47:7f:64:42:fd:d0:61:16:b8:b0:f9:71:e8:2d:36:7f > :18:dd:4d:c8:f3. > > Hash types reuse the default RSS configuration. > > > > 3. ethtool -N eth0 rx-flow-hash tcp4 sdfn context 1 > > > > This command specifies the hash types for the RSS context whose id=1 > on eth0. > > Now this RSS context only has the hash key to reuse the default RSS > configuration. > > > > 4. ethtool -N eth0 flow-type udp4 src-ip 1.1.1.1 context 1 > > > > This command configures a receive flow filter rule for eth0, and the > data flow matching > > this rule will continue to select the final rxq according to the RSS > context configuration > > with id=1. > > > > Signed-off-by: Heng Qi <hengqi@linux.alibaba.com> > > Signed-off-by: Parav Pandit <parav@nvidia.com> > > --- > > v1->v2: > > 1. u8 to le16 for field rss_ctx_id. > > 2. Add normativation when device resetting. @Yuri Benditovich > > 3. Use ctrlq cmd to query rss context capability instead of > reading config space. @Parav Pandit > > > > device-types/net/description.tex | 85 > +++++++++++++++++++++++++ > > device-types/net/device-conformance.tex | 1 + > > device-types/net/driver-conformance.tex | 1 + > > 3 files changed, 87 insertions(+) > > > > diff --git a/device-types/net/description.tex b/device- > types/net/description.tex > > index 76585b0..55cd86d 100644 > > --- a/device-types/net/description.tex > > +++ b/device-types/net/description.tex > > @@ -88,6 +88,8 @@ \subsection{Feature bits}\label{sec:Device Types / > Network Device / Feature bits > > \item[VIRTIO_NET_F_CTRL_MAC_ADDR(23)] Set MAC address through > control > > channel. > > > > +\item[VIRTIO_NET_F_RSS_CONTEXT(50)] Device supports multiple RSS > contexts. > > + > > \item[VIRTIO_NET_F_HASH_TUNNEL(51)] Device supports inner header > hash for encapsulated packets. > > > > \item[VIRTIO_NET_F_VQ_NOTF_COAL(52)] Device supports virtqueue > notification coalescing. > > @@ -150,6 +152,7 @@ \subsubsection{Feature bit > requirements}\label{sec:Device Types / Network Device > > \item[VIRTIO_NET_F_RSS] Requires VIRTIO_NET_F_CTRL_VQ. > > \item[VIRTIO_NET_F_VQ_NOTF_COAL] Requires VIRTIO_NET_F_CTRL_VQ. > > \item[VIRTIO_NET_F_HASH_TUNNEL] Requires VIRTIO_NET_F_CTRL_VQ along > with VIRTIO_NET_F_RSS or VIRTIO_NET_F_HASH_REPORT. > > +\item[VIRTIO_NET_F_RSS_CONTEXT] Requires VIRTIO_NET_F_CTRL_VQ and > VIRTIO_NET_F_RSS. > > \end{description} > > > > \subsubsection{Legacy Interface: Feature bits}\label{sec:Device > Types / Network Device / Feature bits / Legacy Interface: Feature bits} > > @@ -1606,6 +1609,88 @@ \subsubsection{Control > Virtqueue}\label{sec:Device Types / Network Device / Devi > > \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} > > > > +\paragraph{RSS Context}\label{sec:Device Types / Network Device / > Device Operation / Control Virtqueue / RSS Context} > > + > > +An RSS context consists of configurable parameters specified by > \ref{sec:Device Types / Network Device > > +/ Device Operation / Control Virtqueue / Receive-side scaling (RSS)}. > > + > > +The RSS configuration supported by VIRTIO_NET_F_RSS is considered the > default RSS configuration. > > + > > +The device offers the feature VIRTIO_NET_F_RSS_CONTEXT if it supports > one or multiple RSS contexts > > +(excluding the default RSS configuration) and configurable > parameters. > > + > > +\subparagraph{Querying RSS Context Capability}\label{sec:Device Types > / Network Device / Device Operation / Control Virtqueue / RSS Context / > Querying RSS Context Capability} > > + > > +\begin{lstlisting} > > +#define VIRTNET_RSS_CTX_CTRL 8 > > + #define VIRTNET_RSS_CTX_CTRL_CAP_GET 0 > > + #define VIRTNET_RSS_CTX_CTRL_ADD 1 > > + #define VIRTNET_RSS_CTX_CTRL_MOD 2 > > + #define VIRTNET_RSS_CTX_CTRL_DEL 3 > > + > > +struct virtnet_rss_ctx_cap { > > + le16 max_rss_contexts; > > +} > > +\end{lstlisting} > > + > > +Field \field{max_rss_contexts} specifies the maximum number of RSS > contexts \ref{sec:Device Types / Network Device / > > +Device Operation / Control Virtqueue / RSS Context} supported by the > device. > > + > > +The driver queries the RSS context capability of the device by > sending the command VIRTNET_RSS_CTX_CTRL_CAP_GET > > +with the structure virtnet_rss_ctx_cap. > > + > > +For the command VIRTNET_RSS_CTX_CTRL_CAP_GET, the structure > virtnet_rss_ctx_cap is write-only for the device. > > + > > +\subparagraph{Setting RSS Context Parameters}\label{sec:Device Types > / Network Device / Device Operation / Control Virtqueue / RSS Context / > Setting RSS Context Parameters} > > + > > +\begin{lstlisting} > > +struct virtnet_rss_ctx_add_modify { > > + le16 rss_ctx_id; > > + le16 padding; > > + struct virtio_net_rss_config rss; > > +}; > > + > > +struct virtnet_rss_ctx_del { > > + le16 rss_ctx_id; > > +}; > > +\end{lstlisting} > > + > > +RSS context parameters: > > +\begin{itemize} > > +\item \field{rss_ctx_id}: ID of the specific RSS context. > > +\item \field{rss}: RSS context parameters of the specific RSS > context whose id is \field{rss_ctx_id}. > > +\end{itemize} > > + > > +\field{padding} is reserved and it is ignored by the device. > > + > > +If the feature VIRTIO_NET_F_RSS_CONTEXT has been negotiated, the > driver can send the following > > +VIRTNET_RSS_CTX_CTRL class commands: > > +\begin{enumerate} > > +\item VIRTNET_RSS_CTX_CTRL_ADD: use the structure > virtnet_rss_ctx_add_modify to > > + add an RSS context configured as \field{rss} and id as > \field{rss_ctx_id} for the device. > > +\item VIRTNET_RSS_CTX_CTRL_MOD: use the structure > virtnet_rss_ctx_add_modify to > > + configure parameters of the RSS context whose id is > \field{rss_ctx_id} as \field{rss} for the device. > > +\item VIRTNET_RSS_CTX_CTRL_DEL: use the structure virtnet_rss_ctx_del > to delete > > + the RSS context whose id is \field{rss_ctx_id} for the device. > > +\end{enumerate} > > + > > +For commands VIRTNET_RSS_CTX_CTRL_ADD and VIRTNET_RSS_CTX_CTRL_MOD, > the structure virtnet_rss_ctx_add_modify is read-only for the device. > > +For the command VIRTNET_RSS_CTX_CTRL_DEL, the structure > virtnet_rss_ctx_del is read-only for the device. > > + > > +\devicenormative{\subparagraph}{RSS Context}{Device Types / Network > Device / Device Operation / Control Virtqueue / RSS Context} > > + > > +The device MUST set \field{max_rss_contexts} to at least 1 if it > offers VIRTIO_NET_F_RSS_CONTEXT. > > + > > +Upon reset, the device MUST clear all previously configured RSS > contexts. > > + > > +\drivernormative{\subparagraph}{RSS Context}{Device Types / Network > Device / Device Operation / Control Virtqueue / RSS Context} > > + > > +The driver MUST have negotiated the VIRTIO_NET_F_RSS_CONTEXT feature > when issuing the VIRTNET_RSS_CTX_CTRL class commands. > > + > > +The driver MUST set \field{rss_ctx_id} to between 1 and > \field{max_rss_contexts} inclusive. > > + > > +The driver MUST NOT send the command VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET > when the device has successfully configured at least one RSS context. > > + What happens if a rss context with flow classification rules associated with it is deleted? Are the rules are also then deleted? Or is such a delete operation not allowed? Can we add a statement describing the behavior? Otherwise looks good to me. Regards Satananda
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]