* Fri May 19 2023 Miroslav Rezanina <mrezanin@redhat.com> - 6.2.0-34
- kvm-migration-Handle-block-device-inactivation-failures-.patch [bz#2177957] - kvm-migration-Minor-control-flow-simplification.patch [bz#2177957] - kvm-migration-Attempt-disk-reactivation-in-more-failure-.patch [bz#2177957] - kvm-nbd-server-push-pending-frames-after-sending-reply.patch [bz#2035712] - kvm-nbd-server-Request-TCP_NODELAY.patch [bz#2035712] - Resolves: bz#2177957 (Qemu core dump if cut off nfs storage during migration) - Resolves: bz#2035712 ([qemu] Booting from Guest Image over NBD with TLS Is Slow)
This commit is contained in:
parent
c5c2aa1409
commit
0b6715de3c
111
kvm-migration-Attempt-disk-reactivation-in-more-failure-.patch
Normal file
111
kvm-migration-Attempt-disk-reactivation-in-more-failure-.patch
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
From a1f2a51d1a789c46e806adb332236ca16d538bf9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eric Blake <eblake@redhat.com>
|
||||||
|
Date: Tue, 2 May 2023 15:52:12 -0500
|
||||||
|
Subject: [PATCH 3/5] migration: Attempt disk reactivation in more failure
|
||||||
|
scenarios
|
||||||
|
|
||||||
|
RH-Author: Eric Blake <eblake@redhat.com>
|
||||||
|
RH-MergeRequest: 273: migration: prevent source core dump if NFS dies mid-migration
|
||||||
|
RH-Bugzilla: 2177957
|
||||||
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||||||
|
RH-Acked-by: quintela1 <quintela@redhat.com>
|
||||||
|
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
RH-Commit: [3/3] e84bf1e7233c0273ca3136ecaa6b2cfc9c0efacb (ebblake/qemu-kvm)
|
||||||
|
|
||||||
|
Commit fe904ea824 added a fail_inactivate label, which tries to
|
||||||
|
reactivate disks on the source after a failure while s->state ==
|
||||||
|
MIGRATION_STATUS_ACTIVE, but didn't actually use the label if
|
||||||
|
qemu_savevm_state_complete_precopy() failed. This failure to
|
||||||
|
reactivate is also present in commit 6039dd5b1c (also covering the new
|
||||||
|
s->state == MIGRATION_STATUS_DEVICE state) and 403d18ae (ensuring
|
||||||
|
s->block_inactive is set more reliably).
|
||||||
|
|
||||||
|
Consolidate the two labels back into one - no matter HOW migration is
|
||||||
|
failed, if there is any chance we can reach vm_start() after having
|
||||||
|
attempted inactivation, it is essential that we have tried to restart
|
||||||
|
disks before then. This also makes the cleanup more like
|
||||||
|
migrate_fd_cancel().
|
||||||
|
|
||||||
|
Suggested-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
Signed-off-by: Eric Blake <eblake@redhat.com>
|
||||||
|
Message-Id: <20230502205212.134680-1-eblake@redhat.com>
|
||||||
|
Acked-by: Peter Xu <peterx@redhat.com>
|
||||||
|
Reviewed-by: Juan Quintela <quintela@redhat.com>
|
||||||
|
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
(cherry picked from commit 6dab4c93ecfae48e2e67b984d1032c1e988d3005)
|
||||||
|
[eblake: downstream migrate_colo() => migrate_colo_enabled()]
|
||||||
|
Signed-off-by: Eric Blake <eblake@redhat.com>
|
||||||
|
---
|
||||||
|
migration/migration.c | 24 ++++++++++++++----------
|
||||||
|
1 file changed, 14 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/migration/migration.c b/migration/migration.c
|
||||||
|
index 6ba8eb0fdf..817170d52d 100644
|
||||||
|
--- a/migration/migration.c
|
||||||
|
+++ b/migration/migration.c
|
||||||
|
@@ -3255,6 +3255,11 @@ static void migration_completion(MigrationState *s)
|
||||||
|
MIGRATION_STATUS_DEVICE);
|
||||||
|
}
|
||||||
|
if (ret >= 0) {
|
||||||
|
+ /*
|
||||||
|
+ * Inactivate disks except in COLO, and track that we
|
||||||
|
+ * have done so in order to remember to reactivate
|
||||||
|
+ * them if migration fails or is cancelled.
|
||||||
|
+ */
|
||||||
|
s->block_inactive = !migrate_colo_enabled();
|
||||||
|
qemu_file_set_rate_limit(s->to_dst_file, INT64_MAX);
|
||||||
|
ret = qemu_savevm_state_complete_precopy(s->to_dst_file, false,
|
||||||
|
@@ -3290,13 +3295,13 @@ static void migration_completion(MigrationState *s)
|
||||||
|
rp_error = await_return_path_close_on_source(s);
|
||||||
|
trace_migration_return_path_end_after(rp_error);
|
||||||
|
if (rp_error) {
|
||||||
|
- goto fail_invalidate;
|
||||||
|
+ goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (qemu_file_get_error(s->to_dst_file)) {
|
||||||
|
trace_migration_completion_file_err();
|
||||||
|
- goto fail_invalidate;
|
||||||
|
+ goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!migrate_colo_enabled()) {
|
||||||
|
@@ -3306,26 +3311,25 @@ static void migration_completion(MigrationState *s)
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
-fail_invalidate:
|
||||||
|
- /* If not doing postcopy, vm_start() will be called: let's regain
|
||||||
|
- * control on images.
|
||||||
|
- */
|
||||||
|
- if (s->state == MIGRATION_STATUS_ACTIVE ||
|
||||||
|
- s->state == MIGRATION_STATUS_DEVICE) {
|
||||||
|
+fail:
|
||||||
|
+ if (s->block_inactive && (s->state == MIGRATION_STATUS_ACTIVE ||
|
||||||
|
+ s->state == MIGRATION_STATUS_DEVICE)) {
|
||||||
|
+ /*
|
||||||
|
+ * If not doing postcopy, vm_start() will be called: let's
|
||||||
|
+ * regain control on images.
|
||||||
|
+ */
|
||||||
|
Error *local_err = NULL;
|
||||||
|
|
||||||
|
qemu_mutex_lock_iothread();
|
||||||
|
bdrv_invalidate_cache_all(&local_err);
|
||||||
|
if (local_err) {
|
||||||
|
error_report_err(local_err);
|
||||||
|
- s->block_inactive = true;
|
||||||
|
} else {
|
||||||
|
s->block_inactive = false;
|
||||||
|
}
|
||||||
|
qemu_mutex_unlock_iothread();
|
||||||
|
}
|
||||||
|
|
||||||
|
-fail:
|
||||||
|
migrate_set_state(&s->state, current_active_state,
|
||||||
|
MIGRATION_STATUS_FAILED);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.39.1
|
||||||
|
|
117
kvm-migration-Handle-block-device-inactivation-failures-.patch
Normal file
117
kvm-migration-Handle-block-device-inactivation-failures-.patch
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
From 1b07c7663b6a5c19c9303088d63c39dba7e3bb36 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eric Blake <eblake@redhat.com>
|
||||||
|
Date: Fri, 14 Apr 2023 10:33:58 -0500
|
||||||
|
Subject: [PATCH 1/5] migration: Handle block device inactivation failures
|
||||||
|
better
|
||||||
|
|
||||||
|
RH-Author: Eric Blake <eblake@redhat.com>
|
||||||
|
RH-MergeRequest: 273: migration: prevent source core dump if NFS dies mid-migration
|
||||||
|
RH-Bugzilla: 2177957
|
||||||
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||||||
|
RH-Acked-by: quintela1 <quintela@redhat.com>
|
||||||
|
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
RH-Commit: [1/3] 5892c17ca0a21d824d176e7398d12f7cf991651d (ebblake/qemu-kvm)
|
||||||
|
|
||||||
|
Consider what happens when performing a migration between two host
|
||||||
|
machines connected to an NFS server serving multiple block devices to
|
||||||
|
the guest, when the NFS server becomes unavailable. The migration
|
||||||
|
attempts to inactivate all block devices on the source (a necessary
|
||||||
|
step before the destination can take over); but if the NFS server is
|
||||||
|
non-responsive, the attempt to inactivate can itself fail. When that
|
||||||
|
happens, the destination fails to get the migrated guest (good,
|
||||||
|
because the source wasn't able to flush everything properly):
|
||||||
|
|
||||||
|
(qemu) qemu-kvm: load of migration failed: Input/output error
|
||||||
|
|
||||||
|
at which point, our only hope for the guest is for the source to take
|
||||||
|
back control. With the current code base, the host outputs a message, but then appears to resume:
|
||||||
|
|
||||||
|
(qemu) qemu-kvm: qemu_savevm_state_complete_precopy_non_iterable: bdrv_inactivate_all() failed (-1)
|
||||||
|
|
||||||
|
(src qemu)info status
|
||||||
|
VM status: running
|
||||||
|
|
||||||
|
but a second migration attempt now asserts:
|
||||||
|
|
||||||
|
(src qemu) qemu-kvm: ../block.c:6738: int bdrv_inactivate_recurse(BlockDriverState *): Assertion `!(bs->open_flags & BDRV_O_INACTIVE)' failed.
|
||||||
|
|
||||||
|
Whether the guest is recoverable on the source after the first failure
|
||||||
|
is debatable, but what we do not want is to have qemu itself fail due
|
||||||
|
to an assertion. It looks like the problem is as follows:
|
||||||
|
|
||||||
|
In migration.c:migration_completion(), the source sets 'inactivate' to
|
||||||
|
true (since COLO is not enabled), then tries
|
||||||
|
savevm.c:qemu_savevm_state_complete_precopy() with a request to
|
||||||
|
inactivate block devices. In turn, this calls
|
||||||
|
block.c:bdrv_inactivate_all(), which fails when flushing runs up
|
||||||
|
against the non-responsive NFS server. With savevm failing, we are
|
||||||
|
now left in a state where some, but not all, of the block devices have
|
||||||
|
been inactivated; but migration_completion() then jumps to 'fail'
|
||||||
|
rather than 'fail_invalidate' and skips an attempt to reclaim those
|
||||||
|
those disks by calling bdrv_activate_all(). Even if we do attempt to
|
||||||
|
reclaim disks, we aren't taking note of failure there, either.
|
||||||
|
|
||||||
|
Thus, we have reached a state where the migration engine has forgotten
|
||||||
|
all state about whether a block device is inactive, because we did not
|
||||||
|
set s->block_inactive in enough places; so migration allows the source
|
||||||
|
to reach vm_start() and resume execution, violating the block layer
|
||||||
|
invariant that the guest CPUs should not be restarted while a device
|
||||||
|
is inactive. Note that the code in migration.c:migrate_fd_cancel()
|
||||||
|
will also try to reactivate all block devices if s->block_inactive was
|
||||||
|
set, but because we failed to set that flag after the first failure,
|
||||||
|
the source assumes it has reclaimed all devices, even though it still
|
||||||
|
has remaining inactivated devices and does not try again. Normally,
|
||||||
|
qmp_cont() will also try to reactivate all disks (or correctly fail if
|
||||||
|
the disks are not reclaimable because NFS is not yet back up), but the
|
||||||
|
auto-resumption of the source after a migration failure does not go
|
||||||
|
through qmp_cont(). And because we have left the block layer in an
|
||||||
|
inconsistent state with devices still inactivated, the later migration
|
||||||
|
attempt is hitting the assertion failure.
|
||||||
|
|
||||||
|
Since it is important to not resume the source with inactive disks,
|
||||||
|
this patch marks s->block_inactive before attempting inactivation,
|
||||||
|
rather than after succeeding, in order to prevent any vm_start() until
|
||||||
|
it has successfully reactivated all devices.
|
||||||
|
|
||||||
|
See also https://bugzilla.redhat.com/show_bug.cgi?id=2058982
|
||||||
|
|
||||||
|
Signed-off-by: Eric Blake <eblake@redhat.com>
|
||||||
|
Reviewed-by: Juan Quintela <quintela@redhat.com>
|
||||||
|
Acked-by: Lukas Straub <lukasstraub2@web.de>
|
||||||
|
Tested-by: Lukas Straub <lukasstraub2@web.de>
|
||||||
|
Signed-off-by: Juan Quintela <quintela@redhat.com>
|
||||||
|
(cherry picked from commit 403d18ae384239876764bbfa111d6cc5dcb673d1)
|
||||||
|
---
|
||||||
|
migration/migration.c | 5 ++---
|
||||||
|
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/migration/migration.c b/migration/migration.c
|
||||||
|
index 0885549de0..08e5e8f013 100644
|
||||||
|
--- a/migration/migration.c
|
||||||
|
+++ b/migration/migration.c
|
||||||
|
@@ -3256,13 +3256,11 @@ static void migration_completion(MigrationState *s)
|
||||||
|
MIGRATION_STATUS_DEVICE);
|
||||||
|
}
|
||||||
|
if (ret >= 0) {
|
||||||
|
+ s->block_inactive = inactivate;
|
||||||
|
qemu_file_set_rate_limit(s->to_dst_file, INT64_MAX);
|
||||||
|
ret = qemu_savevm_state_complete_precopy(s->to_dst_file, false,
|
||||||
|
inactivate);
|
||||||
|
}
|
||||||
|
- if (inactivate && ret >= 0) {
|
||||||
|
- s->block_inactive = true;
|
||||||
|
- }
|
||||||
|
}
|
||||||
|
qemu_mutex_unlock_iothread();
|
||||||
|
|
||||||
|
@@ -3321,6 +3319,7 @@ fail_invalidate:
|
||||||
|
bdrv_invalidate_cache_all(&local_err);
|
||||||
|
if (local_err) {
|
||||||
|
error_report_err(local_err);
|
||||||
|
+ s->block_inactive = true;
|
||||||
|
} else {
|
||||||
|
s->block_inactive = false;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.39.1
|
||||||
|
|
53
kvm-migration-Minor-control-flow-simplification.patch
Normal file
53
kvm-migration-Minor-control-flow-simplification.patch
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
From e79d0506184e861350d2a3e62dd986aa03d30aa8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eric Blake <eblake@redhat.com>
|
||||||
|
Date: Thu, 20 Apr 2023 09:35:51 -0500
|
||||||
|
Subject: [PATCH 2/5] migration: Minor control flow simplification
|
||||||
|
|
||||||
|
RH-Author: Eric Blake <eblake@redhat.com>
|
||||||
|
RH-MergeRequest: 273: migration: prevent source core dump if NFS dies mid-migration
|
||||||
|
RH-Bugzilla: 2177957
|
||||||
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||||||
|
RH-Acked-by: quintela1 <quintela@redhat.com>
|
||||||
|
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
RH-Commit: [2/3] f00b21b6ebd377af79af93ac18f103f8dc0309d6 (ebblake/qemu-kvm)
|
||||||
|
|
||||||
|
No need to declare a temporary variable.
|
||||||
|
|
||||||
|
Suggested-by: Juan Quintela <quintela@redhat.com>
|
||||||
|
Fixes: 1df36e8c6289 ("migration: Handle block device inactivation failures better")
|
||||||
|
Signed-off-by: Eric Blake <eblake@redhat.com>
|
||||||
|
Reviewed-by: Juan Quintela <quintela@redhat.com>
|
||||||
|
Signed-off-by: Juan Quintela <quintela@redhat.com>
|
||||||
|
(cherry picked from commit 5d39f44d7ac5c63f53d4d0900ceba9521bc27e49)
|
||||||
|
---
|
||||||
|
migration/migration.c | 5 ++---
|
||||||
|
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/migration/migration.c b/migration/migration.c
|
||||||
|
index 08e5e8f013..6ba8eb0fdf 100644
|
||||||
|
--- a/migration/migration.c
|
||||||
|
+++ b/migration/migration.c
|
||||||
|
@@ -3248,7 +3248,6 @@ static void migration_completion(MigrationState *s)
|
||||||
|
ret = global_state_store();
|
||||||
|
|
||||||
|
if (!ret) {
|
||||||
|
- bool inactivate = !migrate_colo_enabled();
|
||||||
|
ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
|
||||||
|
trace_migration_completion_vm_stop(ret);
|
||||||
|
if (ret >= 0) {
|
||||||
|
@@ -3256,10 +3255,10 @@ static void migration_completion(MigrationState *s)
|
||||||
|
MIGRATION_STATUS_DEVICE);
|
||||||
|
}
|
||||||
|
if (ret >= 0) {
|
||||||
|
- s->block_inactive = inactivate;
|
||||||
|
+ s->block_inactive = !migrate_colo_enabled();
|
||||||
|
qemu_file_set_rate_limit(s->to_dst_file, INT64_MAX);
|
||||||
|
ret = qemu_savevm_state_complete_precopy(s->to_dst_file, false,
|
||||||
|
- inactivate);
|
||||||
|
+ s->block_inactive);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qemu_mutex_unlock_iothread();
|
||||||
|
--
|
||||||
|
2.39.1
|
||||||
|
|
55
kvm-nbd-server-Request-TCP_NODELAY.patch
Normal file
55
kvm-nbd-server-Request-TCP_NODELAY.patch
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
From 17c5524ada3f2ca9a9c645f540bedc5575302059 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eric Blake <eblake@redhat.com>
|
||||||
|
Date: Mon, 3 Apr 2023 19:40:47 -0500
|
||||||
|
Subject: [PATCH 5/5] nbd/server: Request TCP_NODELAY
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
RH-Author: Eric Blake <eblake@redhat.com>
|
||||||
|
RH-MergeRequest: 274: nbd: improve TLS performance of NBD server
|
||||||
|
RH-Bugzilla: 2035712
|
||||||
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||||||
|
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
RH-Acked-by: Stefano Garzarella <sgarzare@redhat.com>
|
||||||
|
RH-Commit: [2/2] 092145077756cda2a4f849c5911031b0fc4a2134 (ebblake/qemu-kvm)
|
||||||
|
|
||||||
|
Nagle's algorithm adds latency in order to reduce network packet
|
||||||
|
overhead on small packets. But when we are already using corking to
|
||||||
|
merge smaller packets into transactional requests, the extra delay
|
||||||
|
from TCP defaults just gets in the way (see recent commit bd2cd4a4).
|
||||||
|
|
||||||
|
For reference, qemu as an NBD client already requests TCP_NODELAY (see
|
||||||
|
nbd_connect() in nbd/client-connection.c); as does libnbd as a client
|
||||||
|
[1], and nbdkit as a server [2]. Furthermore, the NBD spec recommends
|
||||||
|
the use of TCP_NODELAY [3].
|
||||||
|
|
||||||
|
[1] https://gitlab.com/nbdkit/libnbd/-/blob/a48a1142/generator/states-connect.c#L39
|
||||||
|
[2] https://gitlab.com/nbdkit/nbdkit/-/blob/45b72f5b/server/sockets.c#L430
|
||||||
|
[3] https://github.com/NetworkBlockDevice/nbd/blob/master/doc/proto.md#protocol-phases
|
||||||
|
|
||||||
|
CC: Florian Westphal <fw@strlen.de>
|
||||||
|
Signed-off-by: Eric Blake <eblake@redhat.com>
|
||||||
|
Message-Id: <20230404004047.142086-1-eblake@redhat.com>
|
||||||
|
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||||
|
(cherry picked from commit f1426881a827a6d3f31b65616c4a8db1e9e7c45e)
|
||||||
|
Signed-off-by: Eric Blake <eblake@redhat.com>
|
||||||
|
---
|
||||||
|
nbd/server.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/nbd/server.c b/nbd/server.c
|
||||||
|
index a5edc7f681..6db124cf53 100644
|
||||||
|
--- a/nbd/server.c
|
||||||
|
+++ b/nbd/server.c
|
||||||
|
@@ -2738,6 +2738,7 @@ void nbd_client_new(QIOChannelSocket *sioc,
|
||||||
|
}
|
||||||
|
client->tlsauthz = g_strdup(tlsauthz);
|
||||||
|
client->sioc = sioc;
|
||||||
|
+ qio_channel_set_delay(QIO_CHANNEL(sioc), false);
|
||||||
|
object_ref(OBJECT(client->sioc));
|
||||||
|
client->ioc = QIO_CHANNEL(sioc);
|
||||||
|
object_ref(OBJECT(client->ioc));
|
||||||
|
--
|
||||||
|
2.39.1
|
||||||
|
|
72
kvm-nbd-server-push-pending-frames-after-sending-reply.patch
Normal file
72
kvm-nbd-server-push-pending-frames-after-sending-reply.patch
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
From 170872370c6f3c916e741eb32d80431995d7a870 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Florian Westphal <fw@strlen.de>
|
||||||
|
Date: Fri, 24 Mar 2023 11:47:20 +0100
|
||||||
|
Subject: [PATCH 4/5] nbd/server: push pending frames after sending reply
|
||||||
|
|
||||||
|
RH-Author: Eric Blake <eblake@redhat.com>
|
||||||
|
RH-MergeRequest: 274: nbd: improve TLS performance of NBD server
|
||||||
|
RH-Bugzilla: 2035712
|
||||||
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||||||
|
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
RH-Acked-by: Stefano Garzarella <sgarzare@redhat.com>
|
||||||
|
RH-Commit: [1/2] ab92c06c48810aa40380de0433dcac4c6e4be9a5 (ebblake/qemu-kvm)
|
||||||
|
|
||||||
|
qemu-nbd doesn't set TCP_NODELAY on the tcp socket.
|
||||||
|
|
||||||
|
Kernel waits for more data and avoids transmission of small packets.
|
||||||
|
Without TLS this is barely noticeable, but with TLS this really shows.
|
||||||
|
|
||||||
|
Booting a VM via qemu-nbd on localhost (with tls) takes more than
|
||||||
|
2 minutes on my system. tcpdump shows frequent wait periods, where no
|
||||||
|
packets get sent for a 40ms period.
|
||||||
|
|
||||||
|
Add explicit (un)corking when processing (and responding to) requests.
|
||||||
|
"TCP_CORK, &zero" after earlier "CORK, &one" will flush pending data.
|
||||||
|
|
||||||
|
VM Boot time:
|
||||||
|
main: no tls: 23s, with tls: 2m45s
|
||||||
|
patched: no tls: 14s, with tls: 15s
|
||||||
|
|
||||||
|
VM Boot time, qemu-nbd via network (same lan):
|
||||||
|
main: no tls: 18s, with tls: 1m50s
|
||||||
|
patched: no tls: 17s, with tls: 18s
|
||||||
|
|
||||||
|
Future optimization: if we could detect if there is another pending
|
||||||
|
request we could defer the uncork operation because more data would be
|
||||||
|
appended.
|
||||||
|
|
||||||
|
Signed-off-by: Florian Westphal <fw@strlen.de>
|
||||||
|
Message-Id: <20230324104720.2498-1-fw@strlen.de>
|
||||||
|
Reviewed-by: Eric Blake <eblake@redhat.com>
|
||||||
|
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
||||||
|
(cherry picked from commit bd2cd4a441ded163b62371790876f28a9b834317)
|
||||||
|
Signed-off-by: Eric Blake <eblake@redhat.com>
|
||||||
|
---
|
||||||
|
nbd/server.c | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/nbd/server.c b/nbd/server.c
|
||||||
|
index 4630dd7322..a5edc7f681 100644
|
||||||
|
--- a/nbd/server.c
|
||||||
|
+++ b/nbd/server.c
|
||||||
|
@@ -2647,6 +2647,8 @@ static coroutine_fn void nbd_trip(void *opaque)
|
||||||
|
goto disconnect;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ qio_channel_set_cork(client->ioc, true);
|
||||||
|
+
|
||||||
|
if (ret < 0) {
|
||||||
|
/* It wans't -EIO, so, according to nbd_co_receive_request()
|
||||||
|
* semantics, we should return the error to the client. */
|
||||||
|
@@ -2672,6 +2674,7 @@ static coroutine_fn void nbd_trip(void *opaque)
|
||||||
|
goto disconnect;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ qio_channel_set_cork(client->ioc, false);
|
||||||
|
done:
|
||||||
|
nbd_request_put(req);
|
||||||
|
nbd_client_put(client);
|
||||||
|
--
|
||||||
|
2.39.1
|
||||||
|
|
@ -83,7 +83,7 @@ Obsoletes: %1-rhev <= %{epoch}:%{version}-%{release}
|
|||||||
Summary: QEMU is a machine emulator and virtualizer
|
Summary: QEMU is a machine emulator and virtualizer
|
||||||
Name: qemu-kvm
|
Name: qemu-kvm
|
||||||
Version: 6.2.0
|
Version: 6.2.0
|
||||||
Release: 33%{?rcrel}%{?dist}
|
Release: 34%{?rcrel}%{?dist}
|
||||||
# Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped
|
# Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped
|
||||||
Epoch: 15
|
Epoch: 15
|
||||||
License: GPLv2 and GPLv2+ and CC-BY
|
License: GPLv2 and GPLv2+ and CC-BY
|
||||||
@ -654,6 +654,16 @@ Patch256: kvm-dma-helpers-prevent-dma_blk_cb-vs-dma_aio_cancel-rac.patch
|
|||||||
Patch257: kvm-virtio-scsi-reset-SCSI-devices-from-main-loop-thread.patch
|
Patch257: kvm-virtio-scsi-reset-SCSI-devices-from-main-loop-thread.patch
|
||||||
# For bz#2187159 - RHEL8.8 - KVM - Secure Guest crashed during booting with 248 vcpus
|
# For bz#2187159 - RHEL8.8 - KVM - Secure Guest crashed during booting with 248 vcpus
|
||||||
Patch258: kvm-s390x-pv-Implement-a-CGS-check-helper.patch
|
Patch258: kvm-s390x-pv-Implement-a-CGS-check-helper.patch
|
||||||
|
# For bz#2177957 - Qemu core dump if cut off nfs storage during migration
|
||||||
|
Patch259: kvm-migration-Handle-block-device-inactivation-failures-.patch
|
||||||
|
# For bz#2177957 - Qemu core dump if cut off nfs storage during migration
|
||||||
|
Patch260: kvm-migration-Minor-control-flow-simplification.patch
|
||||||
|
# For bz#2177957 - Qemu core dump if cut off nfs storage during migration
|
||||||
|
Patch261: kvm-migration-Attempt-disk-reactivation-in-more-failure-.patch
|
||||||
|
# For bz#2035712 - [qemu] Booting from Guest Image over NBD with TLS Is Slow
|
||||||
|
Patch262: kvm-nbd-server-push-pending-frames-after-sending-reply.patch
|
||||||
|
# For bz#2035712 - [qemu] Booting from Guest Image over NBD with TLS Is Slow
|
||||||
|
Patch263: kvm-nbd-server-Request-TCP_NODELAY.patch
|
||||||
|
|
||||||
BuildRequires: wget
|
BuildRequires: wget
|
||||||
BuildRequires: rpm-build
|
BuildRequires: rpm-build
|
||||||
@ -1823,6 +1833,17 @@ sh %{_sysconfdir}/sysconfig/modules/kvm.modules &> /dev/null || :
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri May 19 2023 Miroslav Rezanina <mrezanin@redhat.com> - 6.2.0-34
|
||||||
|
- kvm-migration-Handle-block-device-inactivation-failures-.patch [bz#2177957]
|
||||||
|
- kvm-migration-Minor-control-flow-simplification.patch [bz#2177957]
|
||||||
|
- kvm-migration-Attempt-disk-reactivation-in-more-failure-.patch [bz#2177957]
|
||||||
|
- kvm-nbd-server-push-pending-frames-after-sending-reply.patch [bz#2035712]
|
||||||
|
- kvm-nbd-server-Request-TCP_NODELAY.patch [bz#2035712]
|
||||||
|
- Resolves: bz#2177957
|
||||||
|
(Qemu core dump if cut off nfs storage during migration)
|
||||||
|
- Resolves: bz#2035712
|
||||||
|
([qemu] Booting from Guest Image over NBD with TLS Is Slow)
|
||||||
|
|
||||||
* Tue Apr 25 2023 Miroslav Rezanina <mrezanin@redhat.com> - 6.2.0-33
|
* Tue Apr 25 2023 Miroslav Rezanina <mrezanin@redhat.com> - 6.2.0-33
|
||||||
- kvm-s390x-pv-Implement-a-CGS-check-helper.patch [bz#2187159]
|
- kvm-s390x-pv-Implement-a-CGS-check-helper.patch [bz#2187159]
|
||||||
- Resolves: bz#2187159
|
- Resolves: bz#2187159
|
||||||
|
Loading…
Reference in New Issue
Block a user