From: Parav Pandit <parav@nvidia.com>
To: <virtio-comment@lists.oasis-open.org>
Cc: <shahafs@nvidia.com>, <hengqi@linux.alibaba.com>,
<virtio@lists.oasis-open.org>, Parav Pandit <parav@nvidia.com>
Subject: [virtio-comment] [PATCH requirements 5/7] net-features: Add n-tuple receive flow filters requirements
Date: Mon, 24 Jul 2023 06:34:19 +0300 [thread overview]
Message-ID: <20230724033421.249893-6-parav@nvidia.com> (raw)
In-Reply-To: <20230724033421.249893-1-parav@nvidia.com>
Add virtio net device requirements for receive flow filters.
Signed-off-by: Parav Pandit <parav@nvidia.com>
---
changelog:
v1->v2:
- split setup and operations requirements
- added design goal
- worded requirements more precisely
v0->v1:
- fixed comments from Heng Li
- renamed receive flow steering to receive flow filters
- clarified byte offset in match criteria
---
net-workstream/features-1.4.md | 105 +++++++++++++++++++++++++++++++++
1 file changed, 105 insertions(+)
diff --git a/net-workstream/features-1.4.md b/net-workstream/features-1.4.md
index 27a7886..d228462 100644
--- a/net-workstream/features-1.4.md
+++ b/net-workstream/features-1.4.md
@@ -9,6 +9,7 @@ together is desired while updating the virtio net interface.
1. Device counters visible to the driver
2. Low latency tx and rx virtqueues for PCI transport
3. Virtqueue notification coalescing re-arming support
+4 Virtqueue receive flow filters (RFF)
# 3. Requirements
## 3.1 Device counters
@@ -175,3 +176,107 @@ struct vnet_rx_completion {
notifications until the driver rearms the notifications of the virtqueue.
2. When the driver rearms the notification of the virtqueue, the device
to notify again if notification coalescing conditions are met.
+
+## 3.4 Virtqueue receive flow filters (RFF)
+0. Design goal:
+ To filter and/or to steer packet based on specific pattern match to a
+ specific context to support application/networking stack driven receive
+ processing.
+1. Two use cases are: to support Linux netdev set_rxnfc() for ETHTOOL_SRXCLSRLINS
+ and to support netdev feature NETIF_F_NTUPLE aka ARFS.
+
+### 3.4.1 control path
+1. The number of flow filter operations/sec can range from 100k/sec to 1M/sec
+ or even more. Hence flow filter operations must be done over a queueing
+ interface using one or more queues.
+2. The device should be able to expose one or more supported flow filter queue
+ count and its start vq index to the driver.
+3. As each device may be operating for different performance characteristic,
+ start vq index and count may be different for each device. Secondly, it is
+ inefficient for device to provide flow filters capabilities via a config space
+ region. Hence, the device should be able to share these attributes using
+ dma interface, instead of transport registers.
+4. Since flow filters are enabled much later in the driver life cycle, driver
+ will likely create these queues when flow filters are enabled.
+5. Flow filter operations are often accelerated by device in a hardware. Ability
+ to handle them on a queue other than control vq is desired. This achieves near
+ zero modifications to existing implementations to add new operations on new
+ purpose built queues (similar to transmit and receive queue).
+6. The filter masks are optional; the device should be able to expose if it
+ support filter masks.
+7. The driver may want to have priority among group of flow entries; to facilitate
+ the device support grouping flow filter entries by a notion of a group. Each
+ group defines priority in processing flow.
+8. The driver and group owner driver should be able to query supported device
+ limits for the flow filter entries.
+
+### 3.4.2 flow operations path
+1. The driver should be able to define a receive packet match criteria, an
+ action and a destination for a packet. For example, an ipv4 packet with a
+ multicast address to be steered to the receive vq 0. The second example is
+ ipv4, tcp packet matching a specified IP address and tcp port tuple to
+ be steered to receive vq 10.
+2. The match criteria should include exact tuple fields well-defined such as mac
+ address, IP addresses, tcp/udp ports, etc.
+3. The match criteria should also optionally include the field mask.
+4. The match criteria may optionally also include specific packet byte offset
+ pattern, match length, mask instead of RFC defined fields.
+ length, and matching pattern, which may not be defined in the standard RFC.
+5. Action includes (a) dropping or (b) forwarding the packet.
+6. Destination is a receive virtqueue index.
+7. The device should process packet receive filters programmed via control vq
+ commands first in the processing chain.
+7. The device should process RFF entries before RSS configuration, i.e.,
+ when there is a miss on the RFF entry, RSS configuration applies if it exists.
+8. To summarize the processing chain on a rx packet is:
+ {mac,vlan,promisc rx filters} -> {receive flow filters} -> {rss/hash config}.
+9. If multiple entries are programmed which has overlapping attributes for a
+ received packet, the driver to define the location/priority of the entry.
+10. The filter entries are usually short in size of few tens of bytes,
+ for example IPv6 + TCP tuple would be 36 bytes, and ops/sec rate is
+ high, hence supplying fields inside the queue descriptor is preferred for
+ up to a certain fixed size, say 56 bytes.
+11. A flow filter entry consists of (a) match criteria, (b) action,
+ (c) destination and (d) a unique 32 bit flow id, all supplied by the
+ driver.
+12. The driver should be able to query and delete flow filter entry by the
+ the device by the flow id.
+
+### 3.4.3 interface example
+
+Flow filter capabilities to query using a DMA interface:
+
+```
+struct flow_filter_capabilities {
+ u8 flow_groups;
+ u16 num_flow_filter_vqs;
+ u16 start_vq_index;
+ u32 max_flow_filters_per_group;
+ u32 max_flow_filters;
+ u64 supported_packet_field_mask_bmap[4];
+};
+
+
+```
+
+1. Flow filter entry add/modify, delete:
+
+struct virtio_net_rff_add_modify {
+ u8 flow_op;
+ u8 group_id;
+ u8 padding[2];
+ le32 flow_id;
+ struct match_criteria mc;
+ struct destination dest;
+ struct action action;
+
+ struct match_criteria mask; /* optional */
+};
+
+2. Flow filter entry delete:
+struct virtio_net_rff_delete {
+ u8 flow_op;
+ u8 group_id;
+ u8 padding[2];
+ le32 flow_id;
+};
--
2.26.2
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/
next prev parent reply other threads:[~2023-07-24 3:35 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-24 3:34 [virtio-comment] [PATCH requirements 0/7] virtio net new features requirements Parav Pandit
2023-07-24 3:34 ` [virtio-comment] [PATCH requirements 1/7] net-features: Add requirements document for release 1.4 Parav Pandit
2023-08-08 8:16 ` David Edmondson
2023-08-14 5:17 ` Parav Pandit
2023-08-14 11:53 ` David Edmondson
2023-08-14 11:56 ` David Edmondson
2023-07-24 3:34 ` [virtio-comment] [PATCH requirements 2/7] net-features: Add low latency transmit queue requirements Parav Pandit
2023-08-08 8:24 ` David Edmondson
2023-08-10 19:05 ` [virtio-comment] RE: [EXT] [virtio] " Satananda Burla
2023-08-15 5:51 ` Parav Pandit
2023-08-14 11:55 ` [virtio-comment] " David Edmondson
2023-07-24 3:34 ` [virtio-comment] [PATCH requirements 3/7] net-features: Add low latency receive " Parav Pandit
2023-08-08 8:32 ` David Edmondson
2023-08-14 11:54 ` David Edmondson
2023-08-15 4:45 ` Parav Pandit
2023-07-24 3:34 ` [virtio-comment] [PATCH requirements 4/7] net-features: Add notification coalescing requirements Parav Pandit
2023-08-14 11:57 ` David Edmondson
2023-07-24 3:34 ` Parav Pandit [this message]
2023-08-01 8:33 ` [virtio-comment] RE: [PATCH requirements 5/7] net-features: Add n-tuple receive flow filters requirements Parav Pandit
2023-08-02 6:44 ` Parav Pandit
2023-08-02 15:32 ` Heng Qi
2023-08-03 10:01 ` Parav Pandit
2023-08-03 13:11 ` [virtio-comment] Re: [virtio] " Heng Qi
2023-08-02 7:17 ` [virtio-comment] RE: [EXT] [virtio] " Satananda Burla
2023-08-02 8:14 ` Parav Pandit
2023-08-02 18:32 ` Satananda Burla
2023-08-04 7:32 ` Parav Pandit
2023-08-02 15:25 ` [virtio-comment] " Heng Qi
2023-08-03 9:59 ` [virtio-comment] " Parav Pandit
2023-08-03 13:07 ` [virtio-comment] " Heng Qi
2023-08-04 6:20 ` [virtio-comment] " Parav Pandit
2023-08-04 7:17 ` [virtio-comment] " Heng Qi
2023-08-04 7:30 ` [virtio-comment] " Parav Pandit
2023-08-04 7:51 ` [virtio-comment] Re: [virtio] " Heng Qi
2023-08-07 7:22 ` Heng Qi
2023-08-08 7:13 ` Parav Pandit
2023-08-08 8:18 ` [virtio-comment] Re: [virtio] " Heng Qi
2023-08-08 8:21 ` [virtio-comment] " Heng Qi
2023-08-14 5:15 ` [virtio-comment] " Parav Pandit
2023-08-14 6:18 ` [virtio-comment] " Heng Qi
2023-08-14 6:35 ` [virtio-comment] " Parav Pandit
2023-07-24 3:34 ` [virtio-comment] [PATCH requirements 6/7] net-features: Add packet timestamp requirements Parav Pandit
2023-08-09 8:35 ` [virtio-comment] Re: [virtio] " Xuan Zhuo
2023-08-10 6:56 ` Jason Wang
2023-08-15 6:13 ` Parav Pandit
[not found] ` <CAF=yD-+LMY3yE3qtd4vHc8CGOz6UAf4njM2QiZcajrQgL=KZRQ@mail.gmail.com>
2023-08-14 2:54 ` Jason Wang
2023-08-15 6:26 ` Parav Pandit
[not found] ` <CAF=yD-LXtrQeW0GnTR0BeDuExN5aBLC4dGEfdWbjtxmhNY2G6g@mail.gmail.com>
2023-08-16 4:10 ` Parav Pandit
2023-08-14 13:06 ` [virtio-comment] " Parav Pandit
2023-08-15 2:47 ` [virtio-comment] " Xuan Zhuo
2023-08-15 4:01 ` [virtio-comment] " Parav Pandit
2023-08-15 6:01 ` [virtio-comment] " Xuan Zhuo
2023-08-15 6:09 ` [virtio-comment] " Parav Pandit
2023-08-15 9:44 ` [virtio-comment] " Xuan Zhuo
2023-08-14 11:59 ` [virtio-comment] " David Edmondson
2023-07-24 3:34 ` [virtio-comment] [PATCH requirements 7/7] net-features: Add header data split requirements Parav Pandit
2023-08-10 19:19 ` [virtio-comment] RE: [EXT] [virtio] " Satananda Burla
2023-08-14 12:00 ` [virtio-comment] " David Edmondson
[not found] ` <CA+FuTSeguCKk4zxZ0=Ebr1phZhF9kssHeGPn2eZj6SRNv2ewsA@mail.gmail.com>
2023-08-14 13:09 ` [virtio-comment] Re: [virtio] " David Edmondson
2023-08-14 13:28 ` [virtio-comment] " Parav Pandit
2023-08-14 13:56 ` [virtio-comment] " David Edmondson
2023-08-15 4:41 ` [virtio-comment] " Parav Pandit
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=20230724033421.249893-6-parav@nvidia.com \
--to=parav@nvidia.com \
--cc=hengqi@linux.alibaba.com \
--cc=shahafs@nvidia.com \
--cc=virtio-comment@lists.oasis-open.org \
--cc=virtio@lists.oasis-open.org \
/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