From nobody Sun Feb 8 18:57:19 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) client-ip=205.139.110.120; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1591813528; cv=none; d=zohomail.com; s=zohoarc; b=IYT/6N5IuMTDfalQQJZRKtx1T8B2tcuVrMGHiUoHh8sFIk5sMy6+RHQGsWxXHl5g/8K5v5RPDhnQsIngQ3/DpGX1XruzQi8AEf8/xbMR3dtJpJwvK4z6WdvUW0C8cLrv0pwY+1HYrpVUhvc/g61EiGQ85HosDx6KNa8lqU+ACOo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591813528; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=IWm8f9cxWFDboNfVwAb5m/MGCN4BNmsiY9xuKeMNroE=; b=CekAVJi2xbuPqoGniyv33yKiKvX6gyBE76vAisQsc/bDbDHMRnSrakhsj5A/cUCMhs80LzdIuo01iRHiB9q8ds24o5oCnWy2vcCe7SVJMOaoBqbcDB2ILrAYXp0C40O5J+8rf3xyfNF0tYcMz8YLrzMt2w1f8z7YF80QKZTmgFI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by mx.zohomail.com with SMTPS id 159181352895447.55289834889345; Wed, 10 Jun 2020 11:25:28 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-384-OCB5KcsSOxOJOt2H0AhEJg-1; Wed, 10 Jun 2020 14:25:24 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 896D8461; Wed, 10 Jun 2020 18:25:18 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4968C512FE; Wed, 10 Jun 2020 18:25:18 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id B08A8180954D; Wed, 10 Jun 2020 18:25:17 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 05AIPFhO022682 for ; Wed, 10 Jun 2020 14:25:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id AEC021002382; Wed, 10 Jun 2020 18:25:15 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.40.193.140]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 542B910016E8 for ; Wed, 10 Jun 2020 18:25:12 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id A5B762455C6; Wed, 10 Jun 2020 20:24:32 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1591813527; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=IWm8f9cxWFDboNfVwAb5m/MGCN4BNmsiY9xuKeMNroE=; b=IiDyVLgKiQfNC222p6K2YVQYXXEJVOGthGssMLIKxv34RK2rPahfke+BdOgN7o2pD1qjVD GB/9Zgy3vvpDgi+RZ6LR5kiBYe+ymlN6g2P7ZQEczI9KIyHro8pqWhhHW9wwARKQmlzsif laCLxAtD4kf+NxUluzsTIuadhHsqU1k= X-MC-Unique: OCB5KcsSOxOJOt2H0AhEJg-1 From: Jiri Denemark To: libvir-list@redhat.com Subject: [libvirt PATCH 2/5] qemu: Avoid deprecated migrate_set_speed QMP command Date: Wed, 10 Jun 2020 20:24:28 +0200 Message-Id: <09a23318040ecf245d8fa9e49712a5c954559ee8.1591813394.git.jdenemar@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" The same functionality can be achieved using migrate-set-parameters QMP command with max-bandwidth parameter. https://bugzilla.redhat.com/show_bug.cgi?id=3D1829545 Signed-off-by: Jiri Denemark --- src/qemu/qemu_driver.c | 18 ++++++++++--- src/qemu/qemu_migration.c | 53 ++++++++++++++++++++++++++++++------- tests/qemumonitorjsontest.c | 2 +- 3 files changed, 58 insertions(+), 15 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 88517ba6a7..779f28dbbb 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -14047,6 +14047,7 @@ qemuDomainMigrateSetMaxSpeed(virDomainPtr dom, qemuDomainObjPrivatePtr priv; bool postcopy =3D !!(flags & VIR_DOMAIN_MIGRATE_MAX_SPEED_POSTCOPY); g_autoptr(qemuMigrationParams) migParams =3D NULL; + bool bwParam; unsigned long long max; int ret =3D -1; =20 @@ -14085,12 +14086,20 @@ qemuDomainMigrateSetMaxSpeed(virDomainPtr dom, =20 VIR_DEBUG("Setting migration bandwidth to %luMbs", bandwidth); =20 - if (postcopy) { + bwParam =3D virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_PARAM_B= ANDWIDTH); + + if (postcopy || bwParam) { + qemuMigrationParam param; + if (!(migParams =3D qemuMigrationParamsNew())) goto endjob; =20 - if (qemuMigrationParamsSetULL(migParams, - QEMU_MIGRATION_PARAM_MAX_POSTCOPY_BA= NDWIDTH, + if (postcopy) + param =3D QEMU_MIGRATION_PARAM_MAX_POSTCOPY_BANDWIDTH; + else + param =3D QEMU_MIGRATION_PARAM_MAX_BANDWIDTH; + + if (qemuMigrationParamsSetULL(migParams, param, bandwidth * 1024 * 1024) < 0) goto endjob; =20 @@ -14104,9 +14113,10 @@ qemuDomainMigrateSetMaxSpeed(virDomainPtr dom, rc =3D qemuMonitorSetMigrationSpeed(priv->mon, bandwidth); if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) goto endjob; + } =20 + if (!postcopy) priv->migMaxBandwidth =3D bandwidth; - } =20 ret =3D 0; =20 diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 7ee5b5eda8..13427c1203 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -3495,6 +3495,7 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, unsigned int cookieFlags =3D 0; bool abort_on_error =3D !!(flags & VIR_MIGRATE_ABORT_ON_ERROR); bool events =3D virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVE= NT); + bool bwParam =3D virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_PA= RAM_BANDWIDTH); bool cancel =3D false; unsigned int waitFlags; virDomainDefPtr persistDef =3D NULL; @@ -3582,6 +3583,11 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, goto error; } =20 + if (bwParam && + qemuMigrationParamsSetULL(migParams, QEMU_MIGRATION_PARAM_MAX_BAND= WIDTH, + migrate_speed * 1024 * 1024) < 0) + goto error; + if (qemuMigrationParamsApply(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, migParams) < 0) goto error; @@ -3644,7 +3650,8 @@ qemuMigrationSrcRun(virQEMUDriverPtr driver, goto exit_monitor; } =20 - if (qemuMonitorSetMigrationSpeed(priv->mon, migrate_speed) < 0) + if (!bwParam && + qemuMonitorSetMigrationSpeed(priv->mon, migrate_speed) < 0) goto exit_monitor; =20 /* connect to the destination qemu if needed */ @@ -5299,24 +5306,41 @@ qemuMigrationSrcToFile(virQEMUDriverPtr driver, vir= DomainObjPtr vm, qemuDomainAsyncJob asyncJob) { qemuDomainObjPrivatePtr priv =3D vm->privateData; + bool bwParam =3D virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_PA= RAM_BANDWIDTH); int rc; int ret =3D -1; int pipeFD[2] =3D { -1, -1 }; unsigned long saveMigBandwidth =3D priv->migMaxBandwidth; char *errbuf =3D NULL; virErrorPtr orig_err =3D NULL; + g_autoptr(qemuMigrationParams) migParams =3D NULL; =20 if (qemuMigrationSetDBusVMState(driver, vm) < 0) return -1; =20 /* Increase migration bandwidth to unlimited since target is a file. * Failure to change migration speed is not fatal. */ - if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) =3D=3D 0) { - qemuMonitorSetMigrationSpeed(priv->mon, - QEMU_DOMAIN_MIG_BANDWIDTH_MAX); - priv->migMaxBandwidth =3D QEMU_DOMAIN_MIG_BANDWIDTH_MAX; - if (qemuDomainObjExitMonitor(driver, vm) < 0) + if (bwParam) { + if (!(migParams =3D qemuMigrationParamsNew())) + return -1; + + if (qemuMigrationParamsSetULL(migParams, + QEMU_MIGRATION_PARAM_MAX_BANDWIDTH, + QEMU_DOMAIN_MIG_BANDWIDTH_MAX * 1024= * 1024) < 0) + return -1; + + if (qemuMigrationParamsApply(driver, vm, asyncJob, migParams) < 0) return -1; + + priv->migMaxBandwidth =3D QEMU_DOMAIN_MIG_BANDWIDTH_MAX; + } else { + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) =3D=3D 0)= { + qemuMonitorSetMigrationSpeed(priv->mon, + QEMU_DOMAIN_MIG_BANDWIDTH_MAX); + priv->migMaxBandwidth =3D QEMU_DOMAIN_MIG_BANDWIDTH_MAX; + if (qemuDomainObjExitMonitor(driver, vm) < 0) + return -1; + } } =20 if (!virDomainObjIsActive(vm)) { @@ -5397,11 +5421,20 @@ qemuMigrationSrcToFile(virQEMUDriverPtr driver, vir= DomainObjPtr vm, virErrorPreserveLast(&orig_err); =20 /* Restore max migration bandwidth */ - if (virDomainObjIsActive(vm) && - qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) =3D=3D 0) { - qemuMonitorSetMigrationSpeed(priv->mon, saveMigBandwidth); + if (virDomainObjIsActive(vm)) { + if (bwParam) { + if (qemuMigrationParamsSetULL(migParams, + QEMU_MIGRATION_PARAM_MAX_BANDWID= TH, + saveMigBandwidth * 1024 * 1024) = =3D=3D 0) + ignore_value(qemuMigrationParamsApply(driver, vm, asyncJob, + migParams)); + } else { + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) =3D= =3D 0) { + qemuMonitorSetMigrationSpeed(priv->mon, saveMigBandwidth); + ignore_value(qemuDomainObjExitMonitor(driver, vm)); + } + } priv->migMaxBandwidth =3D saveMigBandwidth; - ignore_value(qemuDomainObjExitMonitor(driver, vm)); } =20 VIR_FORCE_CLOSE(pipeFD[0]); diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 6d5a1d5fe2..e8a0508c53 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -3220,7 +3220,7 @@ mymain(void) DO_TEST_GEN_DEPRECATED(qemuMonitorJSONChangeMedia, true); DO_TEST_GEN(qemuMonitorJSONSaveVirtualMemory); DO_TEST_GEN(qemuMonitorJSONSavePhysicalMemory); - DO_TEST_GEN_DEPRECATED(qemuMonitorJSONSetMigrationSpeed, false); + DO_TEST_GEN_DEPRECATED(qemuMonitorJSONSetMigrationSpeed, true); DO_TEST_GEN_DEPRECATED(qemuMonitorJSONSetMigrationDowntime, false); DO_TEST_GEN(qemuMonitorJSONMigrate); DO_TEST_GEN(qemuMonitorJSONDump); --=20 2.27.0