[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: RE: [virtio-dev] RE: [EXT] [virtio-dev] Re: [virtio-comment] [PATCH v2] virtio-net: support the RSS context
> -----Original Message----- > From: Heng Qi <hengqi@linux.alibaba.com> > Sent: Monday, October 9, 2023 7:15 PM > To: Satananda Burla <sburla@marvell.com>; 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: Re: [virtio-dev] RE: [EXT] [virtio-dev] Re: [virtio-comment] > [PATCH v2] virtio-net: support the RSS context > > Hi Satananda! > > å 2023/10/10 äå7:46, Satananda Burla åé: > > > >> -----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 RSS context cannot be deleted when it is referenced by a rule in > RFF. > The RSS context can then be deleted when all rules that referenced it > have been removed. > > Why is this not added to the requirement: > RSS context is not yet referenced by RFF (i.e. the destination of RFF is > a single rxq). This is because > we keep the RSS context and RFF orthogonal for the time being. So that > the RSS context does > not block the advancement of RFF. > > Also, RFF is not merged into mainline now. When the RSS context is > complete, we can update > the statement in the RFF requirements; or when the RFF is complete, we > can update the statement > in both the RFF and RSS context. Ok thanks. Acked by: Satananda Burla <sburla@marvell.com> > > Thanks! > > > the behavior? > > Otherwise looks good to me. > > > > Regards > > Satananda > >
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]