Excellent, thank you for the command line.
Please, can you try 3 more commits from staging-7.2 queue, on top
of the regular current debian 7.2 qemu release, starting with
https://gitlab.com/mjt0k/qemu/-/commits/b3ad24485306e19d0cd08d96211ef033464eb97a
--
653217a501 virtio-net: Add only one queue pair when realizing
361da9bd09 virtio-net: Add queues before loading them
b3ad244853 virtio-net: Add queues for RSS during migration
these are back-ports of other fixes from the master branch which
were missing from 7.2.x, which are also required.
I haven't yet tested the result in any way (I'm on a train) -
basic virtio-net works, but I haven't tried migration. Will
try to test it when I'm back.
Unfortunately qemu-devel mailing list is down currently, so I
can't provide a link to the discussion. But I can quote part
of it here. As Akihiko Odaki writes:
==== cut ===
> Please note: this is stable-7.2 series, it is *not* master (I picked
> up this commit to 7.2.x). It'd be interesting to check if master is
> affected too. Unfortunately I never tried migration, and now I only
> have my notebook, so can only migrate between two qemu instances on
> the same box - which is probably okay too.
I think you need to backport commit 9379ea9db3c0 ("virtio-net: Add
queues before loading them") and adda0ad56bd2 ("virtio-net: Add queues
for RSS during migration"). Here is an explanation:
First, let me define two variables for conciseness:
N: the number of queue pairs
M: the maximum number of queue pairs, which is determined with
n->max_queue_pairs
The problem is that QEMU inconsistently chose N for virtio-net in the
past. Before commit 8c49756825da ("virtio-net: Add only one queue pair
when realizing"):
1) realize() chose M.
2) set_features() chose: 1 (when RSS and MQ are disabled)
M (otherwise)
This itself was a problem; both RSS and MQ were disabled when realize()
but N was M, which is inconsistent with 2) and this inconsistency was
guest-visible.
I wrote commit 8c49756825da ("virtio-net: Add only one queue pair when
realizing") to make QEMU implement the behavior in 2) also during
realization and fix the inconsistency, but it broke migration when the
migrated VM had enabled VIRTIO_NET_F_RSS and VIRTIO_NET_F_MQ because it
expected that N == M.
This is also why the backported commit also broke migration; it
accidentally fixed the inconsistency between the first reset state and
the state after set_features() and caused the same problem.
I wrote commit 9379ea9db3c0 ("virtio-net: Add queues before loading
them") to fix the issue and later complemented it with commit
adda0ad56bd2 ("virtio-net: Add queues for RSS during migration").
There are several relevant commits because I could not fix the
underlying problem at once, but hopefully this email clarifies how the
two commits fixed it in the end.
Regards,
Akihiko Odaki
==== cut ===
Thanks,
/mjt