OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

virtio-comment message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [virtio-comment] [PATCH] virtio-net: support the RSS context




å 2023/8/16 äå2:03, Yuri Benditovich åé:
Probably worth to clarify: what is the expected persistency of the RSS context:

Ok.

is it expected to survive device reset?

No, after device reset, rss contexts are cleared.

powerdown cycle?

Do you mean the host?

If yes, there is no rss context anymore because the host ram is reset.
If no, I think this is the same as the device reset.

Thanks.

If there is some level of persistency, how can external software know what contexts that the device contains?
Should the sub-commandÂbe defined to apply one of saved contexts?

Thanks,
Yuri


On Tue, Aug 15, 2023 at 3:36âPM Heng Qi <hengqi@linux.alibaba.com> wrote:

    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
    (pls see https://lists.oasis-open.
    org/archives/virtio-comment/202308/msg00194.html).

    An RSS context consists of configurable parameters specified by
    receive-side scaling.

    Usecase:
    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>
    ---
    Âdevice-types/net/description.tex    | 70
    +++++++++++++++++++++++++
    Âdevice-types/net/driver-conformance.tex |Â 1 +
    Â2 files changed, 71 insertions(+)

    diff --git a/device-types/net/description.tex
    b/device-types/net/description.tex
    index 76585b0..2deb060 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}
    @@ -179,6 +182,8 @@ \subsection{Device configuration
    layout}\label{sec:Device Types / Network Device
    Â Â Â Â Âle16 rss_max_indirection_table_length;
    Â Â Â Â Âle32 supported_hash_types;
    Â Â Â Â Âle32 supported_tunnel_types;
    +Â Â Â Â le16 max_rss_contexts;
    +Â Â Â Â le16 reserved;
    Â};
    Â\end{lstlisting}

    @@ -235,6 +240,12 @@ \subsection{Device configuration
    layout}\label{sec:Device Types / Network Device
    ÂEncapsulation types are defined in \ref{sec:Device Types /
    Network Device / Device Operation / Processing of Incoming Packets /
    ÂHash calculation for incoming packets / Encapsulation types
    supported/enabled for inner header hash}.

    +Field \field{max_rss_contexts} only exists if
    VIRTIO_NET_F_RSS_CONTEXT is set.
    +This field specifies the maximum number of RSS contexts
    \ref{sec:Device Types / Network Device /
    +Device Operation / Control Virtqueue / RSS Context} supported by
    the device.
    +
    +Field \field{reserved} contains zeroes and is reserved.
    +
    Â\devicenormative{\subsubsection}{Device configuration
    layout}{Device Types / Network Device / Device configuration layout}

    ÂThe device MUST set \field{max_virtqueue_pairs} to between 1 and
    0x8000 inclusive,
    @@ -285,6 +296,8 @@ \subsection{Device configuration
    layout}\label{sec:Device Types / Network Device
    ÂThe device SHOULD NOT offer VIRTIO_NET_F_CTRL_RX_EXTRA if it
    Âdoes not offer VIRTIO_NET_F_CTRL_VQ.

    +The device MUST set \field{max_rss_contexts} to at least 1 if it
    offers VIRTIO_NET_F_RSS_CONTEXT.
    +
    Â\drivernormative{\subsubsection}{Device configuration
    layout}{Device Types / Network Device / Device configuration layout}

    ÂThe driver MUST NOT write to any of the device configuration fields.
    @@ -1606,6 +1619,63 @@ \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 the VIRTIO_NET_F_RSS feature
    is implicitly considered the default RSS context.
    +
    +The device offers the feature VIRTIO_NET_F_RSS_CONTEXT if it
    supports one or more RSS contexts (excluding the default RSS context
    +supported by VIRTIO_NET_F_RSS) and configurable parameters.
    +
    +\begin{lstlisting}
    +struct virtnet_rss_ctx_add_modify {
    +Â Â u8 rss_ctx_id;
    +Â Â u8 padding[3];
    +Â Â struct virtio_net_rss_config rss;
    +};
    +
    +struct virtnet_rss_ctx_del {
    +Â Â u8 rss_ctx_id;
    +};
    +
    +#define VIRTNET_RSS_CTX_CTRL 8
    + #define VIRTNET_RSS_CTX_CTRL_ADDÂ 0
    + #define VIRTNET_RSS_CTX_CTRL_MODÂ 1
    + #define VIRTNET_RSS_CTX_CTRL_DELÂ 2
    +\end{lstlisting}
    +
    +RSS context parameters:
    +\begin{itemize}
    +\item \field{rss_ctx_id}: ID of the specific RSS context.
    +\item \field{rss}: Configure 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 to configure a specific RSS
    context:
    +\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 VIRTNET_RSS_CTX_CTRL_ADD and VIRTNET_RSS_CTX_CTRL_MOD
    commands, the structure virtnet_rss_ctx_add_modify is read-only
    for the device.
    +For the VIRTNET_RSS_CTX_CTRL_DEL command, the structure
    virtnet_rss_ctx_del is read-only for the device.
    +
    +\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 VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET
    command when the device has responded to the
    VIRTNET_RSS_CTX_CTRL_ADD command with VIRTIO_NET_OK.
    +
    Â\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/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}
-- 2.19.1.6.gb485710b


    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/




[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]