* [PATCH v3 0/3] Vhost-vdpa Shadow Virtqueue RSS Support
@ 2023-08-29 9:11 Hawkins Jiawei
2023-08-29 9:11 ` [PATCH v3 1/3] vdpa: Add SetSteeringEBPF method for NetClientState Hawkins Jiawei
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Hawkins Jiawei @ 2023-08-29 9:11 UTC (permalink / raw)
To: jasowang, mst, eperezma; +Cc: qemu-devel, yin31149, 18801353760
This series enables shadowed CVQ to intercept RSS command
through shadowed CVQ, update the virtio NIC device model
so qemu send it in a migration, and the restore of that
RSS state in the destination.
Note that this patch should be based on
patch "Vhost-vdpa Shadow Virtqueue Hash calculation Support" at [1].
[1]. https://lore.kernel.org/all/cover.1693297766.git.yin31149@gmail.com/
TestStep
========
1. test the migration using vp-vdpa device
- For L0 guest, boot QEMU with two virtio-net-pci net device with
`in-qemu` RSS, command line like:
-netdev tap,vhost=off...
-device virtio-net-pci,disable-legacy=on,disable-modern=off,
iommu_platform=on,mq=on,ctrl_vq=on,hash=on,rss=on,guest_announce=off,
indirect_desc=off,queue_reset=off,...
- For L1 guest, apply the relative patch series and compile the
source code, start QEMU with two vdpa device with svq mode on,
enable the `ctrl_vq`, `mq`, `rss` features on, command line like:
-netdev type=vhost-vdpa,x-svq=true,...
-device virtio-net-pci,mq=on,guest_announce=off,ctrl_vq=on,
rss=on,...
- For L2 source guest, run the following bash command:
```bash
#!/bin/sh
ethtool -K eth0 rxhash on
```
- Execute the live migration in L2 source monitor
- Result
* with this series, L2 QEMU can execute without
triggering any error or warning. L0 QEMU echo
"Can't load eBPF RSS - fallback to software RSS".
ChangeLog
=========
v3:
- resolve conflict with updated patch
"Vhost-vdpa Shadow Virtqueue Hash calculation Support" in patch
"vdpa: Restore receive-side scaling state"
RFC v2: https://lore.kernel.org/all/cover.1691926415.git.yin31149@gmail.com/
- Correct the feature usage to VIRTIO_NET_F_HASH_REPORT when
loading the hash calculation state in
patch "vdpa: Restore receive-side scaling state"
RFC v1: https://lore.kernel.org/all/cover.1691766252.git.yin31149@gmail.com/
Hawkins Jiawei (3):
vdpa: Add SetSteeringEBPF method for NetClientState
vdpa: Restore receive-side scaling state
vdpa: Allow VIRTIO_NET_F_RSS in SVQ
net/vhost-vdpa.c | 63 ++++++++++++++++++++++++++++++++++--------------
1 file changed, 45 insertions(+), 18 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v3 1/3] vdpa: Add SetSteeringEBPF method for NetClientState
2023-08-29 9:11 [PATCH v3 0/3] Vhost-vdpa Shadow Virtqueue RSS Support Hawkins Jiawei
@ 2023-08-29 9:11 ` Hawkins Jiawei
2023-08-29 9:11 ` [PATCH v3 2/3] vdpa: Restore receive-side scaling state Hawkins Jiawei
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Hawkins Jiawei @ 2023-08-29 9:11 UTC (permalink / raw)
To: jasowang, mst, eperezma; +Cc: qemu-devel, yin31149, 18801353760
At present, to enable the VIRTIO_NET_F_RSS feature, eBPF must
be loaded for the vhost backend.
Given that vhost-vdpa is one of the vhost backend, we need to
implement the SetSteeringEBPF method to support RSS for vhost-vdpa,
even if vhost-vdpa calculates the rss hash in the hardware device
instead of in the kernel by eBPF.
Although this requires QEMU to be compiled with `--enable-bpf`
configuration even if the vdpa device does not use eBPF to
calculate the rss hash, this can avoid adding the specific
conditional statements for vDPA case to enable the VIRTIO_NET_F_RSS
feature, which reduces code maintainbility.
Suggested-by: Eugenio Pérez <eperezma@redhat.com>
Signed-off-by: Hawkins Jiawei <yin31149@gmail.com>
---
net/vhost-vdpa.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
index b29f84f54c..11f89e7032 100644
--- a/net/vhost-vdpa.c
+++ b/net/vhost-vdpa.c
@@ -238,6 +238,12 @@ static void vhost_vdpa_cleanup(NetClientState *nc)
}
}
+/** Dummy SetSteeringEBPF to support RSS for vhost-vdpa backend */
+static bool vhost_vdpa_set_steering_ebpf(NetClientState *nc, int prog_fd)
+{
+ return true;
+}
+
static bool vhost_vdpa_has_vnet_hdr(NetClientState *nc)
{
assert(nc->info->type == NET_CLIENT_DRIVER_VHOST_VDPA);
@@ -400,6 +406,7 @@ static NetClientInfo net_vhost_vdpa_info = {
.has_vnet_hdr = vhost_vdpa_has_vnet_hdr,
.has_ufo = vhost_vdpa_has_ufo,
.check_peer_type = vhost_vdpa_check_peer_type,
+ .set_steering_ebpf = vhost_vdpa_set_steering_ebpf,
};
static int64_t vhost_vdpa_get_vring_group(int device_fd, unsigned vq_index,
@@ -1241,6 +1248,7 @@ static NetClientInfo net_vhost_vdpa_cvq_info = {
.has_vnet_hdr = vhost_vdpa_has_vnet_hdr,
.has_ufo = vhost_vdpa_has_ufo,
.check_peer_type = vhost_vdpa_check_peer_type,
+ .set_steering_ebpf = vhost_vdpa_set_steering_ebpf,
};
/*
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3 2/3] vdpa: Restore receive-side scaling state
2023-08-29 9:11 [PATCH v3 0/3] Vhost-vdpa Shadow Virtqueue RSS Support Hawkins Jiawei
2023-08-29 9:11 ` [PATCH v3 1/3] vdpa: Add SetSteeringEBPF method for NetClientState Hawkins Jiawei
@ 2023-08-29 9:11 ` Hawkins Jiawei
2023-08-29 9:11 ` [PATCH v3 3/3] vdpa: Allow VIRTIO_NET_F_RSS in SVQ Hawkins Jiawei
2023-10-19 18:12 ` [PATCH v3 0/3] Vhost-vdpa Shadow Virtqueue RSS Support Michael S. Tsirkin
3 siblings, 0 replies; 5+ messages in thread
From: Hawkins Jiawei @ 2023-08-29 9:11 UTC (permalink / raw)
To: jasowang, mst, eperezma; +Cc: qemu-devel, yin31149, 18801353760
This patch reuses vhost_vdpa_net_load_rss() with some
refactorings to restore the receive-side scaling state
at device's startup.
Signed-off-by: Hawkins Jiawei <yin31149@gmail.com>
---
v3:
- resolve conflict with updated patch
"Vhost-vdpa Shadow Virtqueue Hash calculation Support"
v2: https://lore.kernel.org/all/af33aa80bc4ef0b2cec6c21b9448866c517fde80.1691926415.git.yin31149@gmail.com/
- Correct the feature usage to VIRTIO_NET_F_HASH_REPORT when
loading the hash calculation state
v1: https://lore.kernel.org/all/93d5d82f0a5df71df326830033e50358c8b6be7a.1691766252.git.yin31149@gmail.com/
net/vhost-vdpa.c | 54 ++++++++++++++++++++++++++++++++----------------
1 file changed, 36 insertions(+), 18 deletions(-)
diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
index 11f89e7032..85547b7bbb 100644
--- a/net/vhost-vdpa.c
+++ b/net/vhost-vdpa.c
@@ -839,17 +839,28 @@ static int vhost_vdpa_net_load_rss(VhostVDPAState *s, const VirtIONet *n,
cfg.hash_types = cpu_to_le32(n->rss_data.hash_types);
- /*
- * According to VirtIO standard, "Field reserved MUST contain zeroes.
- * It is defined to make the structure to match the layout of
- * virtio_net_rss_config structure, defined in 5.1.6.5.7.".
- *
- * Therefore, we need to zero the fields in struct virtio_net_rss_config,
- * which corresponds the `reserved` field in
- * struct virtio_net_hash_config.
- */
- memset(&cfg.indirection_table_mask, 0,
- sizeof_field(struct virtio_net_hash_config, reserved));
+ if (do_rss) {
+ /*
+ * According to VirtIO standard, "Number of entries in indirection_table
+ * is (indirection_table_mask + 1)".
+ */
+ cfg.indirection_table_mask = cpu_to_le16(n->rss_data.indirections_len -
+ 1);
+ cfg.unclassified_queue = cpu_to_le16(n->rss_data.default_queue);
+ cfg.max_tx_vq = cpu_to_le16(n->curr_queue_pairs);
+ } else {
+ /*
+ * According to VirtIO standard, "Field reserved MUST contain zeroes.
+ * It is defined to make the structure to match the layout of
+ * virtio_net_rss_config structure, defined in 5.1.6.5.7.".
+ *
+ * Therefore, we need to zero the fields in
+ * struct virtio_net_rss_config, which corresponds the `reserved` field
+ * in struct virtio_net_hash_config.
+ */
+ memset(&cfg.indirection_table_mask, 0,
+ sizeof_field(struct virtio_net_hash_config, reserved));
+ }
table = g_malloc_n(n->rss_data.indirections_len,
sizeof(n->rss_data.indirections_table[0]));
@@ -886,6 +897,7 @@ static int vhost_vdpa_net_load_rss(VhostVDPAState *s, const VirtIONet *n,
r = vhost_vdpa_net_load_cmd(s, out_cursor, in_cursor,
VIRTIO_NET_CTRL_MQ,
+ do_rss ? VIRTIO_NET_CTRL_MQ_RSS_CONFIG :
VIRTIO_NET_CTRL_MQ_HASH_CONFIG,
data, ARRAY_SIZE(data));
if (unlikely(r < 0)) {
@@ -920,13 +932,19 @@ static int vhost_vdpa_net_load_mq(VhostVDPAState *s,
return r;
}
- if (!virtio_vdev_has_feature(&n->parent_obj, VIRTIO_NET_F_HASH_REPORT)) {
- return 0;
- }
-
- r = vhost_vdpa_net_load_rss(s, n, out_cursor, in_cursor, false);
- if (unlikely(r < 0)) {
- return r;
+ if (virtio_vdev_has_feature(&n->parent_obj, VIRTIO_NET_F_RSS)) {
+ /* load the receive-side scaling state */
+ r = vhost_vdpa_net_load_rss(s, n, out_cursor, in_cursor, true);
+ if (unlikely(r < 0)) {
+ return r;
+ }
+ } else if (virtio_vdev_has_feature(&n->parent_obj,
+ VIRTIO_NET_F_HASH_REPORT)) {
+ /* load the hash calculation state */
+ r = vhost_vdpa_net_load_rss(s, n, out_cursor, in_cursor, false);
+ if (unlikely(r < 0)) {
+ return r;
+ }
}
return 0;
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3 3/3] vdpa: Allow VIRTIO_NET_F_RSS in SVQ
2023-08-29 9:11 [PATCH v3 0/3] Vhost-vdpa Shadow Virtqueue RSS Support Hawkins Jiawei
2023-08-29 9:11 ` [PATCH v3 1/3] vdpa: Add SetSteeringEBPF method for NetClientState Hawkins Jiawei
2023-08-29 9:11 ` [PATCH v3 2/3] vdpa: Restore receive-side scaling state Hawkins Jiawei
@ 2023-08-29 9:11 ` Hawkins Jiawei
2023-10-19 18:12 ` [PATCH v3 0/3] Vhost-vdpa Shadow Virtqueue RSS Support Michael S. Tsirkin
3 siblings, 0 replies; 5+ messages in thread
From: Hawkins Jiawei @ 2023-08-29 9:11 UTC (permalink / raw)
To: jasowang, mst, eperezma; +Cc: qemu-devel, yin31149, 18801353760
Enable SVQ with VIRTIO_NET_F_RSS feature.
Signed-off-by: Hawkins Jiawei <yin31149@gmail.com>
---
net/vhost-vdpa.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
index 85547b7bbb..13da60aeda 100644
--- a/net/vhost-vdpa.c
+++ b/net/vhost-vdpa.c
@@ -119,6 +119,7 @@ static const uint64_t vdpa_svq_device_features =
/* VHOST_F_LOG_ALL is exposed by SVQ */
BIT_ULL(VHOST_F_LOG_ALL) |
BIT_ULL(VIRTIO_NET_F_HASH_REPORT) |
+ BIT_ULL(VIRTIO_NET_F_RSS) |
BIT_ULL(VIRTIO_NET_F_RSC_EXT) |
BIT_ULL(VIRTIO_NET_F_STANDBY) |
BIT_ULL(VIRTIO_NET_F_SPEED_DUPLEX);
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v3 0/3] Vhost-vdpa Shadow Virtqueue RSS Support
2023-08-29 9:11 [PATCH v3 0/3] Vhost-vdpa Shadow Virtqueue RSS Support Hawkins Jiawei
` (2 preceding siblings ...)
2023-08-29 9:11 ` [PATCH v3 3/3] vdpa: Allow VIRTIO_NET_F_RSS in SVQ Hawkins Jiawei
@ 2023-10-19 18:12 ` Michael S. Tsirkin
3 siblings, 0 replies; 5+ messages in thread
From: Michael S. Tsirkin @ 2023-10-19 18:12 UTC (permalink / raw)
To: Hawkins Jiawei; +Cc: jasowang, eperezma, qemu-devel, 18801353760
On Tue, Aug 29, 2023 at 05:11:14PM +0800, Hawkins Jiawei wrote:
> This series enables shadowed CVQ to intercept RSS command
> through shadowed CVQ, update the virtio NIC device model
> so qemu send it in a migration, and the restore of that
> RSS state in the destination.
>
> Note that this patch should be based on
> patch "Vhost-vdpa Shadow Virtqueue Hash calculation Support" at [1].
>
> [1]. https://lore.kernel.org/all/cover.1693297766.git.yin31149@gmail.com/
dropped due to dependency.
> TestStep
> ========
> 1. test the migration using vp-vdpa device
> - For L0 guest, boot QEMU with two virtio-net-pci net device with
> `in-qemu` RSS, command line like:
> -netdev tap,vhost=off...
> -device virtio-net-pci,disable-legacy=on,disable-modern=off,
> iommu_platform=on,mq=on,ctrl_vq=on,hash=on,rss=on,guest_announce=off,
> indirect_desc=off,queue_reset=off,...
>
> - For L1 guest, apply the relative patch series and compile the
> source code, start QEMU with two vdpa device with svq mode on,
> enable the `ctrl_vq`, `mq`, `rss` features on, command line like:
> -netdev type=vhost-vdpa,x-svq=true,...
> -device virtio-net-pci,mq=on,guest_announce=off,ctrl_vq=on,
> rss=on,...
>
> - For L2 source guest, run the following bash command:
> ```bash
> #!/bin/sh
>
> ethtool -K eth0 rxhash on
> ```
>
> - Execute the live migration in L2 source monitor
>
> - Result
> * with this series, L2 QEMU can execute without
> triggering any error or warning. L0 QEMU echo
> "Can't load eBPF RSS - fallback to software RSS".
>
> ChangeLog
> =========
> v3:
> - resolve conflict with updated patch
> "Vhost-vdpa Shadow Virtqueue Hash calculation Support" in patch
> "vdpa: Restore receive-side scaling state"
>
> RFC v2: https://lore.kernel.org/all/cover.1691926415.git.yin31149@gmail.com/
> - Correct the feature usage to VIRTIO_NET_F_HASH_REPORT when
> loading the hash calculation state in
> patch "vdpa: Restore receive-side scaling state"
>
> RFC v1: https://lore.kernel.org/all/cover.1691766252.git.yin31149@gmail.com/
>
> Hawkins Jiawei (3):
> vdpa: Add SetSteeringEBPF method for NetClientState
> vdpa: Restore receive-side scaling state
> vdpa: Allow VIRTIO_NET_F_RSS in SVQ
>
> net/vhost-vdpa.c | 63 ++++++++++++++++++++++++++++++++++--------------
> 1 file changed, 45 insertions(+), 18 deletions(-)
>
> --
> 2.25.1
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-10-19 18:13 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-29 9:11 [PATCH v3 0/3] Vhost-vdpa Shadow Virtqueue RSS Support Hawkins Jiawei
2023-08-29 9:11 ` [PATCH v3 1/3] vdpa: Add SetSteeringEBPF method for NetClientState Hawkins Jiawei
2023-08-29 9:11 ` [PATCH v3 2/3] vdpa: Restore receive-side scaling state Hawkins Jiawei
2023-08-29 9:11 ` [PATCH v3 3/3] vdpa: Allow VIRTIO_NET_F_RSS in SVQ Hawkins Jiawei
2023-10-19 18:12 ` [PATCH v3 0/3] Vhost-vdpa Shadow Virtqueue RSS Support Michael S. Tsirkin
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.