From nobody Fri Oct 18 06:20:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=quarantine dis=quarantine) header.from=huawei.com ARC-Seal: i=1; a=rsa-sha256; t=1678201433; cv=none; d=zohomail.com; s=zohoarc; b=ZwnPqHm2n3Oa/pFu59+mN1s4SlGN+xVjmNwP9LnLqof7ZC9W/or7INRWGTkUoyi2aY7vfBAAeAaLEH7phIx763EPfSHargFrllCUVZysisanTRohGt764xm7raQQ+Tb7LY4kRLdhIwvtNIRVABJ2tDxX5r1qsBO3ziYuaYrhS3s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1678201433; h=Content-Type:Content-Transfer-Encoding:Cc: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=LC4jXHSNv7oJSETUhvXg1bXXGg8oNKOsrLm5VH7AxRg=; b=VlMQNxh/75FpTL2F142W5r2i/LJJ8vNHWj6e2rrV8lJ5Q0t6s3TwFb8i5Uz1IJyTCoLG8uHeiyJQOZzPBVOlONT7qhyCQEMdB3fL+3MNnknNQKAeclEO6vl+pOm3+sTCLYobUYhH6dpPJJbq/PNW2mKncvOavzIBrJj5AICEK58= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=quarantine dis=quarantine) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1678201433458210.98514628339797; Tue, 7 Mar 2023 07:03:53 -0800 (PST) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-247-oswwuZr1NeSV6Tz-sgq0rQ-1; Tue, 07 Mar 2023 10:03:41 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A9155280AA2A; Tue, 7 Mar 2023 15:02:50 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 95DA21410DD9; Tue, 7 Mar 2023 15:02:50 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 7637C19465A3; Tue, 7 Mar 2023 15:02:45 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id DCDA51946594 for ; Tue, 7 Mar 2023 15:02:44 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id CF536C15BAD; Tue, 7 Mar 2023 15:02:44 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast07.extmail.prod.ext.rdu2.redhat.com [10.11.55.23]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C7BAAC15BA0 for ; Tue, 7 Mar 2023 15:02:44 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id ADE313C0F229 for ; Tue, 7 Mar 2023 15:02:44 +0000 (UTC) Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-248-8BNF8B_8MNuKU3yODsb5xg-1; Tue, 07 Mar 2023 10:02:39 -0500 Received: from dggpeml500022.china.huawei.com (unknown [172.30.72.53]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4PWJWf3v4Xz16P9w; Tue, 7 Mar 2023 22:59:42 +0800 (CST) Received: from localhost.localdomain (10.175.124.27) by dggpeml500022.china.huawei.com (7.185.36.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21; Tue, 7 Mar 2023 23:02:28 +0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1678201432; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc: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=LC4jXHSNv7oJSETUhvXg1bXXGg8oNKOsrLm5VH7AxRg=; b=b3rx1tp+SeSJM2+pg2Wprh86gc9bR5UtyqNHFMlu7MveTVQLumrtwgO1Qhem1GXff5FhSY Dl/cKVNTeM3JoEWAKP4MEq/v/VMXBkPtPrz/+eMjrql93LtEQKuIqKF6kxZEZ+d4gpBXBr nSgA1/diBF5NEEPIUJqXq/dQg3dNU6Q= X-MC-Unique: oswwuZr1NeSV6Tz-sgq0rQ-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: 8BNF8B_8MNuKU3yODsb5xg-1 From: Jiang Jiacheng To: Subject: [PATCH v2 2/8] migration/migration-pin: get migration pid for migration pin Date: Tue, 7 Mar 2023 22:52:14 +0800 Message-ID: <20230307145220.3767207-3-jiangjiacheng@huawei.com> In-Reply-To: <20230307145220.3767207-1-jiangjiacheng@huawei.com> References: <20230307145220.3767207-1-jiangjiacheng@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.124.27] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To dggpeml500022.china.huawei.com (7.185.36.66) X-CFilter-Loop: Reflected X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.1 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: yubihong@huawei.com, quintela@redhat.com, linyilu@huawei.com, jiangjiacheng@huawei.com, dgilbert@redhat.com, xiexiangyou@huawei.com, zhengchuan@huawei.com, caozhongwang1@huawei.com, wanghao232@huawei.com Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.7 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1678201457421100001 Content-Type: text/plain; charset="utf-8" Second, query migration thread information during migration process proactively. Migration should start after all thread be created, so querying the migration thread infomation before wating for completion and terminate the query in any abnormal situation. Signed-off-by: zhengchuan Signed-off-by: Jiang Jiacheng --- src/qemu/qemu_migration.c | 81 ++++++++++++++++++++++++++++++++ src/qemu/qemu_migration_params.c | 19 ++++++++ src/qemu/qemu_migration_params.h | 4 ++ 3 files changed, 104 insertions(+) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 2720f0b083..0cea055eec 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2003,6 +2003,81 @@ qemuMigrationAnyCompleted(virDomainObj *vm, return -1; } =20 +/* Returns 0 on get migration thread info success, + * -1 on unexpected failure + */ +static int +qemuMigrationSrcWaitForThreadInfo(virDomainObj *vm, + qemuMigrationParams *migParams, + unsigned long migflags, + virDomainAsyncJob asyncJob, + virConnectPtr dconn, + unsigned int flags) +{ + int ret =3D -1; + qemuDomainObjPrivate *priv =3D vm->privateData; + qemuMonitorMigThreadInfo **infolist =3D NULL; + qemuDomainMigThreadInfo **migthreads =3D NULL; + int nmigthreads =3D 0; + int rc; + size_t i; + + /* migrationThreadCount =3D live_migration + multifd channels */ + priv->migThreadCount =3D qemuMigrationParamsGetMigThreadCount(migParam= s, + migflags); + while ((rc =3D qemuMigrationAnyCompleted(vm, asyncJob, + dconn, flags)) !=3D 1) { + if (rc < 0) + return rc; + + if (qemuDomainObjEnterMonitorAsync(vm, asyncJob) < 0) + return ret; + rc =3D qemuMonitorGetMigThreadsInfo(priv->mon, &infolist, &nmigthr= eads); + qemuDomainObjExitMonitor(vm); + if (rc < 0) + goto cleanup; + + if (nmigthreads =3D=3D priv->migThreadCount) { + break; + } else if (nmigthreads > priv->migThreadCount) { + VIR_WARN("migration threads is more than expected"); + goto cleanup; + } else { + struct timespec ts =3D { .tv_sec =3D 0, .tv_nsec =3D 10 * 1000= * 1000ull }; + virObjectUnlock(vm); + nanosleep(&ts, NULL); + virObjectLock(vm); + } + } + + migthreads =3D g_new0(qemuDomainMigThreadInfo *, nmigthreads + 1); + + for (i =3D 0; i < nmigthreads; i++) { + qemuDomainMigThreadInfo *migthread; + migthread =3D g_new0(qemuDomainMigThreadInfo, nmigthreads + 1); + + migthread->thread_name =3D g_strdup(infolist[i]->thread_name); + migthread->thread_id =3D infolist[i]->thread_id; + + migthreads[i] =3D migthread; + } + + priv->migThreadsInfo =3D migthreads; + ret =3D 0; + + cleanup: + if (migthreads && (ret < 0)) { + qemuDomainMigThreadsInfoFree(migthreads, priv->migThreadCount); + priv->migThreadCount =3D 0; + } + + if (infolist) { + qemuMonitorMigThreadsInfoFree(infolist, nmigthreads); + } + + return ret; +} + =20 /* Returns 0 on success, -2 when migration needs to be cancelled, or -1 wh= en * QEMU reports failed migration. @@ -4917,6 +4992,12 @@ qemuMigrationSrcRun(virQEMUDriver *driver, if (flags & VIR_MIGRATE_POSTCOPY) waitFlags |=3D QEMU_MIGRATION_COMPLETED_POSTCOPY; =20 + rc =3D qemuMigrationSrcWaitForThreadInfo(vm, migParams, flags, + VIR_ASYNC_JOB_MIGRATION_OUT, + dconn, waitFlags); + if (rc =3D=3D -1) + goto error; + rc =3D qemuMigrationSrcWaitForCompletion(vm, VIR_ASYNC_JOB_MIGRATION_O= UT, dconn, waitFlags); if (rc =3D=3D -2) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index bd09dcfb23..43bed2e618 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -1540,3 +1540,22 @@ qemuMigrationParamsGetTLSHostname(qemuMigrationParam= s *migParams) =20 return migParams->params[QEMU_MIGRATION_PARAM_TLS_HOSTNAME].value.s; } + + +int +qemuMigrationParamsGetMigThreadCount(qemuMigrationParams *migParams, + unsigned long migflags) +{ + int nmigthreads =3D 1; /* live_migtion */ + + if (!(migflags & VIR_MIGRATE_PARALLEL)) { + return nmigthreads; + } else { + if (migParams->params[QEMU_MIGRATION_PARAM_MULTIFD_CHANNELS].set) + nmigthreads +=3D migParams->params[QEMU_MIGRATION_PARAM_MULTIF= D_CHANNELS].value.i; + else + nmigthreads +=3D 2; /* default multifd channel is 2 */ + } + + return nmigthreads; +} diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index e7c65f6a21..975b6691d4 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -166,3 +166,7 @@ qemuMigrationCapsGet(virDomainObj *vm, =20 const char * qemuMigrationParamsGetTLSHostname(qemuMigrationParams *migParams); + +int +qemuMigrationParamsGetMigThreadCount(qemuMigrationParams *migParams, + unsigned long migflags); --=20 2.33.0