virtio-comment.lists.oasis-open.org archive mirror
 help / color / mirror / Atom feed
From: Heng Qi <hengqi@linux.alibaba.com>
To: "Michael S . Tsirkin" <mst@redhat.com>
Cc: Parav Pandit <parav@nvidia.com>,
	Yuri Benditovich <yuri.benditovich@daynix.com>,
	Xuan Zhuo <xuanzhuo@linux.alibaba.com>,
	"virtio-comment@lists.oasis-open.org"
	<virtio-comment@lists.oasis-open.org>,
	Jason Wang <jasowang@redhat.com>,
	Cornelia Huck <cohuck@redhat.com>
Subject: Re: [virtio-comment] [PATCH v3] virtio-net: support the RSS context
Date: Wed, 27 Sep 2023 08:56:05 +0800	[thread overview]
Message-ID: <301bd839-4dc7-4a57-9201-3b9ffb45bdaa@linux.alibaba.com> (raw)
In-Reply-To: <20230921123718.56605-1-hengqi@linux.alibaba.com>

Hi Michael!

在 2023/9/21 下午8:37, 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://lists.oasis-open.org/archives/virtio-comment/202308/msg00194.html).
>
> An RSS context consists of configurable parameters specified by receive-side scaling.
>
> Some use cases:
> 1. 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.
> 2. Traffic isolation. Used when users want the traffic of certain applications to occupy
>     several queues without being distubed.
>
> 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.

After this work was reviewed by Yuri and Parav, I pinged the mailing 
list twice over 4 weeks
and no one commented again. Since this work will be part of RFF[1] and a 
relatively mature
component, I hope to speed up its pace to facilitate collaboration with 
other work.

Please let me know if you have any comments, if not I'd like to start 
the voting phase.

[1] 
https://lists.oasis-open.org/archives/virtio-comment/202309/msg00293.html

Thanks

>
> Fixes: https://github.com/oasis-tcs/virtio-spec/issues/178
> Signed-off-by: Heng Qi <hengqi@linux.alibaba.com>
> Signed-off-by: Parav Pandit <parav@nvidia.com>
> ---
> v2->v3:
>      1. Add link to fix issue.
>      2. Optimize commit log.
>
> 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.
> +
>   \paragraph{Offloads State Configuration}\label{sec:Device Types / Network Device / Device Operation / Control Virtqueue / Offloads State Configuration}
>   
>   If the VIRTIO_NET_F_CTRL_GUEST_OFFLOADS feature is negotiated, the driver can
> diff --git a/device-types/net/device-conformance.tex b/device-types/net/device-conformance.tex
> index f88f48b..f517b00 100644
> --- a/device-types/net/device-conformance.tex
> +++ b/device-types/net/device-conformance.tex
> @@ -15,4 +15,5 @@
>   \item \ref{devicenormative:Device Types / Network Device / Device Operation / Control Virtqueue / Receive-side scaling (RSS) / RSS processing}
>   \item \ref{devicenormative:Device Types / Network Device / Device Operation / Control Virtqueue / Notifications Coalescing}
>   \item \ref{devicenormative:Device Types / Network Device / Device Operation / Control Virtqueue / Inner Header Hash}
> +\item \ref{devicenormative:Device Types / Network Device / Device Operation / Control Virtqueue / RSS Context}
>   \end{itemize}
> diff --git a/device-types/net/driver-conformance.tex b/device-types/net/driver-conformance.tex
> index 9d853d9..22ff5c3 100644
> --- a/device-types/net/driver-conformance.tex
> +++ b/device-types/net/driver-conformance.tex
> @@ -15,4 +15,5 @@
>   \item \ref{drivernormative:Device Types / Network Device / Device Operation / Control Virtqueue / Receive-side scaling (RSS) }
>   \item \ref{drivernormative:Device Types / Network Device / Device Operation / Control Virtqueue / Notifications Coalescing}
>   \item \ref{drivernormative:Device Types / Network Device / Device Operation / Control Virtqueue / Inner Header Hash}
> +\item \ref{drivernormative:Device Types / Network Device / Device Operation / Control Virtqueue / RSS Context}
>   \end{itemize}


This publicly archived list offers a means to provide input to the
OASIS Virtual I/O Device (VIRTIO) TC.

In order to verify user consent to the Feedback License terms and
to minimize spam in the list archive, subscription is required
before posting.

Subscribe: virtio-comment-subscribe@lists.oasis-open.org
Unsubscribe: virtio-comment-unsubscribe@lists.oasis-open.org
List help: virtio-comment-help@lists.oasis-open.org
List archive: https://lists.oasis-open.org/archives/virtio-comment/
Feedback License: https://www.oasis-open.org/who/ipr/feedback_license.pdf
List Guidelines: https://www.oasis-open.org/policies-guidelines/mailing-lists
Committee: https://www.oasis-open.org/committees/virtio/
Join OASIS: https://www.oasis-open.org/join/


      reply	other threads:[~2023-09-27  0:56 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-21 12:37 [virtio-comment] [PATCH v3] virtio-net: support the RSS context Heng Qi
2023-09-27  0:56 ` Heng Qi [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=301bd839-4dc7-4a57-9201-3b9ffb45bdaa@linux.alibaba.com \
    --to=hengqi@linux.alibaba.com \
    --cc=cohuck@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=mst@redhat.com \
    --cc=parav@nvidia.com \
    --cc=virtio-comment@lists.oasis-open.org \
    --cc=xuanzhuo@linux.alibaba.com \
    --cc=yuri.benditovich@daynix.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).