From nobody Sun May 5 07:01:06 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612173386; cv=none; d=zohomail.com; s=zohoarc; b=CRI5CmUYiesXaCaXLyZL9Mm+YlzQD+UmmyGboye3htnxyS7W3eSM3AHb/6RD+xpwvYCIEXch6pywjroEA6X15GHDx5S+iQvxwc86zL6rugxnSnDZRef1TGDq5BB6nigERQuVdc0VDLzI2O6Z5uU2+GWBNAU+KFKQ+atno+a9VlM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612173386; 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=o09Hk5VoJYsg38GBjFevkovZ/b/KapmNbfGo5GrHVks=; b=c2jD8f4LaMtNC0G+znVm7k2F4/fH1Uk0cGXKYS1wyYahiEeyElMX5ZZMHKNVjtIgykLzjgLRWSvt/eS0fR078Lbs/yzROjmhL7csFBo7Xh/ncsMJyGwzuWOUPlQ4nbdS4LIoxJT02jmx4LtYSTJu8ZoPSze9tscMQwS9W2Ssb2g= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1612173386307649.2804300478125; Mon, 1 Feb 2021 01:56:26 -0800 (PST) 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-38-jvTp6bBSOMmaBnRbyHe5vw-1; Mon, 01 Feb 2021 04:56:23 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 44820803630; Mon, 1 Feb 2021 09:56:15 +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 0D0E060C68; Mon, 1 Feb 2021 09:56:15 +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 C95CF1809CA2; Mon, 1 Feb 2021 09:56:14 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 1119uA78021935 for ; Mon, 1 Feb 2021 04:56:10 -0500 Received: by smtp.corp.redhat.com (Postfix) id 633871004026; Mon, 1 Feb 2021 09:56:10 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast03.extmail.prod.ext.rdu2.redhat.com [10.11.55.19]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5EB15100402E for ; Mon, 1 Feb 2021 09:56:10 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4CA7E811E76 for ; Mon, 1 Feb 2021 09:56:10 +0000 (UTC) Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-451-OUSZ6lvEOf2uUBFHxM4gIg-1; Mon, 01 Feb 2021 04:55:57 -0500 Received: from DGGEMS404-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4DTjwC6qJqzjHQL; Mon, 1 Feb 2021 17:54:35 +0800 (CST) Received: from huawei.com (10.175.104.175) by DGGEMS404-HUB.china.huawei.com (10.3.19.204) with Microsoft SMTP Server id 14.3.498.0; Mon, 1 Feb 2021 17:55:44 +0800 X-MC-Unique: jvTp6bBSOMmaBnRbyHe5vw-1 X-MC-Unique: OUSZ6lvEOf2uUBFHxM4gIg-1 From: Hao Wang To: Subject: [PATCH v5 1/5] migration/dirtyrate: Introduce DomainGetDirtyRateInfo API Date: Mon, 1 Feb 2021 17:55:39 +0800 Message-ID: <20210201095543.936333-2-wanghao232@huawei.com> In-Reply-To: <20210201095543.936333-1-wanghao232@huawei.com> References: <20210201095543.936333-1-wanghao232@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.104.175] 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 2.78 on 10.11.54.3 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id 1119uA78021935 X-loop: libvir-list@redhat.com Cc: yubihong@huawei.com, zhengchuan@huawei.com, pkrempa@redhat.com, zhang.zhanghailiang@huawei.com, mprivozn@redhat.com, danielhb413@gmail.com, xiexiangyou@huawei.com, alex.chen@huawei.com, hhan@redhat.com, wanghao232@huawei.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.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Introduce DomainGetDirtyRateInfo API to get domain's memory dirty rate info which may be expected by user in order to decide whether it's proper to be migrated out or not. Using flags to control the action of the API: If the VIR_DOMAIN_DIRTYRATE_CALC flag is set, this will calculate domain's memory dirty rate within specific time. If the VIR_DOMAIN_DIRTYRATE_QUERY flag is set, this will query the dirty rate info calculated last time. The VIR_DOMAIN_DIRTYRATE_DEFAULT flag is equal to both VIR_DOMAIN_DIRTYRATE_CALC and VIR_DOMAIN_DIRTYRATE_QUERY. Signed-off-by: Hao Wang Signed-off-by: Zhou Yimin Reviewed-by: Chuan Zheng --- include/libvirt/libvirt-domain.h | 59 ++++++++++++++++++++++++++++++++ src/driver-hypervisor.h | 7 ++++ src/libvirt-domain.c | 56 ++++++++++++++++++++++++++++++ src/libvirt_public.syms | 5 +++ src/remote/remote_driver.c | 1 + src/remote/remote_protocol.x | 21 +++++++++++- 6 files changed, 148 insertions(+), 1 deletion(-) diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-dom= ain.h index de2456812c..77b46c2018 100644 --- a/include/libvirt/libvirt-domain.h +++ b/include/libvirt/libvirt-domain.h @@ -5119,4 +5119,63 @@ int virDomainAuthorizedSSHKeysSet(virDomainPtr domai= n, unsigned int nkeys, unsigned int flags); =20 +/** + * virDomainDirtyRateStatus: + * + * Details on the cause of a dirty rate calculation status. + */ +typedef enum { + VIR_DOMAIN_DIRTYRATE_UNSTARTED =3D 0, /* the dirtyrate calculation has + not been started */ + VIR_DOMAIN_DIRTYRATE_MEASURING =3D 1, /* the dirtyrate calculation is + measuring */ + VIR_DOMAIN_DIRTYRATE_MEASURED =3D 2, /* the dirtyrate calculation is + completed */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_DIRTYRATE_LAST +# endif +} virDomainDirtyRateStatus; + +/** + * virDomainDirtyRateInfo: + * + * a virDomainDirtyRateInfo is a structure filled by virDomainGetDirtyRate= () + * and extracting dirty rate infomation for a given active Domain. + */ + +typedef struct _virDomainDirtyRateInfo virDomainDirtyRateInfo; +struct _virDomainDirtyRateInfo { + int status; /* the status of dirtyrate calculation, one of + virDomainDirtyRateStatus */ + long long dirtyRate; /* the dirtyrate in MB/s */ + long long startTime; /* the start time of dirtyrate calculation */ + int calcTime; /* the period of dirtyrate calculation */ +}; + +/** + * virDomainDirtyRateInfoPtr: + * + * a virDomainDirtyRateInfoPtr is a pointer to a virDomainDirtyRateInfo st= ructure. + */ + +typedef virDomainDirtyRateInfo *virDomainDirtyRateInfoPtr; + +/** + * virDomainDirtyRateFlags: + * + * Details on the flags used by getdirtyrate api. + */ +typedef enum { + VIR_DOMAIN_DIRTYRATE_DEFAULT =3D 0, /* default domdirtyrate behav= ior: + calculate and query */ + VIR_DOMAIN_DIRTYRATE_CALC =3D 1 << 0, /* calculate domain's dirtyra= te */ + VIR_DOMAIN_DIRTYRATE_QUERY =3D 1 << 1, /* query domain's dirtyrate */ +} virDomainDirtyRateFlags; + +int virDomainGetDirtyRateInfo(virDomainPtr domain, + virDomainDirtyRateInfoPtr info, + int sec, + unsigned int flags); + #endif /* LIBVIRT_DOMAIN_H */ diff --git a/src/driver-hypervisor.h b/src/driver-hypervisor.h index 9e8fe89921..5ad681997b 100644 --- a/src/driver-hypervisor.h +++ b/src/driver-hypervisor.h @@ -1400,6 +1400,12 @@ typedef int unsigned int nkeys, unsigned int flags); =20 +typedef int +(*virDrvDomainGetDirtyRateInfo)(virDomainPtr domain, + virDomainDirtyRateInfoPtr info, + int sec, + unsigned int flags); + typedef struct _virHypervisorDriver virHypervisorDriver; typedef virHypervisorDriver *virHypervisorDriverPtr; =20 @@ -1665,4 +1671,5 @@ struct _virHypervisorDriver { virDrvDomainBackupGetXMLDesc domainBackupGetXMLDesc; virDrvDomainAuthorizedSSHKeysGet domainAuthorizedSSHKeysGet; virDrvDomainAuthorizedSSHKeysSet domainAuthorizedSSHKeysSet; + virDrvDomainGetDirtyRateInfo domainGetDirtyRateInfo; }; diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index c9f8ffdb56..777028c499 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -13102,3 +13102,59 @@ virDomainAuthorizedSSHKeysSet(virDomainPtr domain, virDispatchError(conn); return -1; } + + +/** + * virDomainGetDirtyRateInfo: + * @domain: a domain object + * @info: pointer to current domain's memory dirty rate info + * @sec: show dirty rate within specified seconds + * @flags: extra flags; binary-OR of virDomainGetDirtyRateInfoFlags + * + * Get the current domain's memory dirty rate info. + * + * If the VIR_DOMAIN_DIRTYRATE_CALC flag is set, this will calculate + * domain's memory dirty rate within specific time (sec). + * + * If the VIR_DOMAIN_DIRTYRATE_QUERY flag is set, this will query the + * dirty rate info calculated last time and stored in 'info'. + * + * The VIR_DOMAIN_DIRTYRATE_DEFAULT flag is equal to both + * VIR_DOMAIN_DIRTYRATE_CALC and VIR_DOMAIN_DIRTYRATE_QUERY. + * + * Returns 0 in case of success, -1 otherwise. + */ +int +virDomainGetDirtyRateInfo(virDomainPtr domain, + virDomainDirtyRateInfoPtr info, + int sec, + unsigned int flags) +{ + virConnectPtr conn; + + VIR_DOMAIN_DEBUG(domain, "info=3D%p, sec=3D%d, flags=3D0x%x", + info, sec, flags); + + virResetLastError(); + + virCheckDomainReturn(domain, -1); + conn =3D domain->conn; + + virCheckNonNullArgGoto(info, error); + memset(info, 0, sizeof(*info)); + + virCheckReadOnlyGoto(conn->flags, error); + + if (conn->driver->domainGetDirtyRateInfo) { + int ret; + ret =3D conn->driver->domainGetDirtyRateInfo(domain, info, sec, fl= ags); + if (ret < 0) + goto error; + return ret; + } + + virReportUnsupportedError(); + error: + virDispatchError(conn); + return -1; +} diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms index cf31f937d5..155b75713b 100644 --- a/src/libvirt_public.syms +++ b/src/libvirt_public.syms @@ -879,4 +879,9 @@ LIBVIRT_6.10.0 { virDomainAuthorizedSSHKeysSet; } LIBVIRT_6.0.0; =20 +LIBVIRT_7.1.0 { + global: + virDomainGetDirtyRateInfo; +} LIBVIRT_6.10.0; + # .... define new API here using predicted next version number .... diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 1b784e61c7..4460d2c7ce 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -8531,6 +8531,7 @@ static virHypervisorDriver hypervisor_driver =3D { .domainBackupGetXMLDesc =3D remoteDomainBackupGetXMLDesc, /* 6.0.0 */ .domainAuthorizedSSHKeysGet =3D remoteDomainAuthorizedSSHKeysGet, /* 6= .10.0 */ .domainAuthorizedSSHKeysSet =3D remoteDomainAuthorizedSSHKeysSet, /* 6= .10.0 */ + .domainGetDirtyRateInfo =3D remoteDomainGetDirtyRateInfo, /* 7.1.0 */ }; =20 static virNetworkDriver network_driver =3D { diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x index 2df38cef77..965d05f68f 100644 --- a/src/remote/remote_protocol.x +++ b/src/remote/remote_protocol.x @@ -3799,6 +3799,19 @@ struct remote_domain_authorized_ssh_keys_set_args { unsigned int flags; }; =20 +struct remote_domain_get_dirty_rate_info_args { + remote_nonnull_domain dom; + int sec; + unsigned int flags; +}; + +struct remote_domain_get_dirty_rate_info_ret { /* insert@1 */ + int status; + hyper dirtyRate; + hyper startTime; + int calcTime; +}; + /*----- Protocol. -----*/ =20 /* Define the program number, protocol version and procedure numbers here.= */ @@ -6714,5 +6727,11 @@ enum remote_procedure { * @generate: none * @acl: domain:write */ - REMOTE_PROC_DOMAIN_AUTHORIZED_SSH_KEYS_SET =3D 425 + REMOTE_PROC_DOMAIN_AUTHORIZED_SSH_KEYS_SET =3D 425, + + /** + * @generate: both + * @acl: domain:read + */ + REMOTE_PROC_DOMAIN_GET_DIRTY_RATE_INFO =3D 426 }; --=20 2.23.0 From nobody Sun May 5 07:01:06 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612173382; cv=none; d=zohomail.com; s=zohoarc; b=K8WvWGQnoc2PTROigfZ8El9QHgdKUf54yakya3AjPul4j924FzbnbsA8X4VaU/xLbyqoBzNsdwmfy7zlabqUjiYVOnSkA1PuWKbVFjkWkVp2/G2MShfo/oJs1/0mTOaLXji0+HzGLl6YQkvullaurXubCfeJLIdG2kLlh1Fxn/c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612173382; 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=oUBxsQWLc3CVnxn7tNiTRySNz+dE6ZPbezfebX4AVPo=; b=BKMEDfVD2amQuEaV/U6CCgFJ/1UbdcUIXl0YtXs1kEOsg9L37YkpRnYBbo53cTS1GYPYoTY2Uy4OzXkK0iwWA3gs2XRPsMI3I8gMYTcWEq3RXhPk0Nhpt3qxL18/LGft8BBnyrY8c20cqUzT2ysreneoRvIsCudjNO85ndDlVsE= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1612173382049732.6196472418255; Mon, 1 Feb 2021 01:56:22 -0800 (PST) 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-104-obezJ4rvMMm6z6ujaSAj7A-1; Mon, 01 Feb 2021 04:56:17 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id EC8A9C7402; Mon, 1 Feb 2021 09:56:10 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CA05A60C5F; Mon, 1 Feb 2021 09:56:10 +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 9486E5003D; Mon, 1 Feb 2021 09:56:10 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 1119u4i8021888 for ; Mon, 1 Feb 2021 04:56:04 -0500 Received: by smtp.corp.redhat.com (Postfix) id 7FA891111A69; Mon, 1 Feb 2021 09:56:04 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast02.extmail.prod.ext.rdu2.redhat.com [10.11.55.18]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 7BDAD1111A6E for ; Mon, 1 Feb 2021 09:56:02 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 22574800B3B for ; Mon, 1 Feb 2021 09:56:02 +0000 (UTC) Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-521-ATYUdsg1Pu6URPQJ-Dw8EQ-1; Mon, 01 Feb 2021 04:55:57 -0500 Received: from DGGEMS404-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4DTjwC6WBgzjHNX; Mon, 1 Feb 2021 17:54:35 +0800 (CST) Received: from huawei.com (10.175.104.175) by DGGEMS404-HUB.china.huawei.com (10.3.19.204) with Microsoft SMTP Server id 14.3.498.0; Mon, 1 Feb 2021 17:55:44 +0800 X-MC-Unique: obezJ4rvMMm6z6ujaSAj7A-1 X-MC-Unique: ATYUdsg1Pu6URPQJ-Dw8EQ-1 From: Hao Wang To: Subject: [PATCH v5 2/5] migration/dirtyrate: Implement qemuDomainCalculateDirtyRate Date: Mon, 1 Feb 2021 17:55:40 +0800 Message-ID: <20210201095543.936333-3-wanghao232@huawei.com> In-Reply-To: <20210201095543.936333-1-wanghao232@huawei.com> References: <20210201095543.936333-1-wanghao232@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.104.175] 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 2.78 on 10.11.54.3 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id 1119u4i8021888 X-loop: libvir-list@redhat.com Cc: yubihong@huawei.com, zhengchuan@huawei.com, pkrempa@redhat.com, zhang.zhanghailiang@huawei.com, mprivozn@redhat.com, danielhb413@gmail.com, xiexiangyou@huawei.com, alex.chen@huawei.com, hhan@redhat.com, wanghao232@huawei.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.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Implement qemuDomainCalculateDirtyRate which calculates domain's memory dirty rate calling qmp "calc-dirty-rate". Signed-off-by: Hao Wang Signed-off-by: Zhou Yimin Reviewed-by: Chuan Zheng --- src/qemu/qemu_migration.c | 25 +++++++++++++++++++++++++ src/qemu/qemu_migration.h | 5 +++++ src/qemu/qemu_monitor.c | 12 ++++++++++++ src/qemu/qemu_monitor.h | 4 ++++ src/qemu/qemu_monitor_json.c | 22 ++++++++++++++++++++++ src/qemu/qemu_monitor_json.h | 4 ++++ 6 files changed, 72 insertions(+) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 0adfdb9351..226fe5395e 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -5891,3 +5891,28 @@ qemuMigrationSrcFetchMirrorStats(virQEMUDriverPtr dr= iver, virHashFree(blockinfo); return 0; } + + +int +qemuDomainCalculateDirtyRate(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int sec) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + int ret; + + VIR_DEBUG("Calculate dirty rate during %d seconds", sec); + + if (!virDomainObjIsActive(vm)) { + virReportError(VIR_ERR_OPERATION_INVALID, + "%s", _("domain is not running")); + return -1; + } + + qemuDomainObjEnterMonitor(driver, vm); + ret =3D qemuMonitorCalculateDirtyRate(priv->mon, sec); + if (qemuDomainObjExitMonitor(driver, vm) < 0) + ret =3D -1; + + return ret; +} diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index fd9eb7cab0..6b1f4a8eea 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -258,3 +258,8 @@ qemuMigrationSrcFetchMirrorStats(virQEMUDriverPtr drive= r, virDomainObjPtr vm, qemuDomainAsyncJob asyncJob, qemuDomainJobInfoPtr jobInfo); + +int +qemuDomainCalculateDirtyRate(virQEMUDriverPtr driver, + virDomainObjPtr vm, + int sec); diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 09b8617097..51bc9182f3 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -4713,3 +4713,15 @@ qemuMonitorTransactionBackup(virJSONValuePtr actions, return qemuMonitorJSONTransactionBackup(actions, device, jobname, targ= et, bitmap, syncmode); } + + +int +qemuMonitorCalculateDirtyRate(qemuMonitorPtr mon, + int sec) +{ + VIR_DEBUG("seconds=3D%d", sec); + + QEMU_CHECK_MONITOR(mon); + + return qemuMonitorJSONCalculateDirtyRate(mon, sec); +} diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index a07617ec28..a11a5dc21c 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1516,3 +1516,7 @@ qemuMonitorTransactionBackup(virJSONValuePtr actions, const char *target, const char *bitmap, qemuMonitorTransactionBackupSyncMode syncmode= ); + +int +qemuMonitorCalculateDirtyRate(qemuMonitorPtr mon, + int sec); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 8a75a2734e..bb85513aa6 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -9452,3 +9452,25 @@ qemuMonitorJSONGetCPUMigratable(qemuMonitorPtr mon, return virJSONValueGetBoolean(virJSONValueObjectGet(reply, "return"), migratable); } + + +int +qemuMonitorJSONCalculateDirtyRate(qemuMonitorPtr mon, + int sec) +{ + g_autoptr(virJSONValue) cmd =3D NULL; + g_autoptr(virJSONValue) reply =3D NULL; + + if (!(cmd =3D qemuMonitorJSONMakeCommand("calc-dirty-rate", + "I:calc-time", sec, + NULL))) + return -1; + + if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) + return -1; + + if (qemuMonitorJSONCheckError(cmd, reply) < 0) + return -1; + + return 0; +} diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index ba1531fee8..cc59d2c078 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -705,3 +705,7 @@ int qemuMonitorJSONSetDBusVMStateIdList(qemuMonitorPtr = mon, int qemuMonitorJSONGetCPUMigratable(qemuMonitorPtr mon, bool *migratable); + +int +qemuMonitorJSONCalculateDirtyRate(qemuMonitorPtr mon, + int sec); --=20 2.23.0 From nobody Sun May 5 07:01:06 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612173374; cv=none; d=zohomail.com; s=zohoarc; b=CJ4l9KmWw1rXHtlVdNdC18oQsMny4Dq+MkkfsF1J53AtmINbkPdb5r0rMGVUPG6dsikeunECJ/owf62gVyMgyNvfB2L+tuFdXItYbQoBq6Vlx5Rhi7wtjg4QyNYw8KiIgBdwtP5qoH+uGPN2NT/gLUk2+6AkfqovByefGGHn4Qg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612173374; 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=o4rlyNF61bwVdWxyo13GW4OiZ5wUWaHyp5qmdYc07Ps=; b=bKM0sdOYqxOAlsW4vI7AGNZRpac9G9z0PmHtgbfRlwcXULaRCA74z9hfxIkV39VzU0eV+QHBUVH5nLof9+PFJzilnDGOf0B2jdjBaLSuvT1VTnScksGjiOUADmtpFlpAjAzsvDduLUZxLKDeZjmZVQxIf+eEQ7KhuXnSLEdWWuU= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1612173374527648.7100103758397; Mon, 1 Feb 2021 01:56:14 -0800 (PST) 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-368-4yOE21CMOyiy--qMWH_RLg-1; Mon, 01 Feb 2021 04:56:11 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E7802107ACE3; Mon, 1 Feb 2021 09:56:05 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BA3F85DA2D; Mon, 1 Feb 2021 09:56:05 +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 7208450038; Mon, 1 Feb 2021 09:56:05 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 1119u4YI021875 for ; Mon, 1 Feb 2021 04:56:04 -0500 Received: by smtp.corp.redhat.com (Postfix) id 07B012026D38; Mon, 1 Feb 2021 09:56:04 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast06.extmail.prod.ext.rdu2.redhat.com [10.11.55.22]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 018742026D37 for ; Mon, 1 Feb 2021 09:56:00 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 9BE50187504E for ; Mon, 1 Feb 2021 09:56:00 +0000 (UTC) Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-564-HkhlmtAIPGWUa8q5Rc6nFg-1; Mon, 01 Feb 2021 04:55:57 -0500 Received: from DGGEMS404-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4DTjwD0Bc9zjHQT; Mon, 1 Feb 2021 17:54:36 +0800 (CST) Received: from huawei.com (10.175.104.175) by DGGEMS404-HUB.china.huawei.com (10.3.19.204) with Microsoft SMTP Server id 14.3.498.0; Mon, 1 Feb 2021 17:55:45 +0800 X-MC-Unique: 4yOE21CMOyiy--qMWH_RLg-1 X-MC-Unique: HkhlmtAIPGWUa8q5Rc6nFg-1 From: Hao Wang To: Subject: [PATCH v5 3/5] migration/dirtyrate: Implement qemuDomainQueryDirtyRate Date: Mon, 1 Feb 2021 17:55:41 +0800 Message-ID: <20210201095543.936333-4-wanghao232@huawei.com> In-Reply-To: <20210201095543.936333-1-wanghao232@huawei.com> References: <20210201095543.936333-1-wanghao232@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.104.175] 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 2.78 on 10.11.54.4 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id 1119u4YI021875 X-loop: libvir-list@redhat.com Cc: yubihong@huawei.com, zhengchuan@huawei.com, pkrempa@redhat.com, zhang.zhanghailiang@huawei.com, mprivozn@redhat.com, danielhb413@gmail.com, xiexiangyou@huawei.com, alex.chen@huawei.com, hhan@redhat.com, wanghao232@huawei.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.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Implement qemuDomainQueryDirtyRate which query domain's memory dirty rate calling qmp "query-dirty-rate". Signed-off-by: Hao Wang Signed-off-by: Zhou Yimin Reviewed-by: Chuan Zheng --- src/qemu/qemu_migration.c | 23 +++++++++++ src/qemu/qemu_migration.h | 5 +++ src/qemu/qemu_monitor.c | 12 ++++++ src/qemu/qemu_monitor.h | 4 ++ src/qemu/qemu_monitor_json.c | 77 ++++++++++++++++++++++++++++++++++++ src/qemu/qemu_monitor_json.h | 4 ++ 6 files changed, 125 insertions(+) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 226fe5395e..373896e408 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -5916,3 +5916,26 @@ qemuDomainCalculateDirtyRate(virQEMUDriverPtr driver, =20 return ret; } + + +int +qemuDomainQueryDirtyRate(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virDomainDirtyRateInfoPtr info) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + int ret; + + if (!virDomainObjIsActive(vm)) { + virReportError(VIR_ERR_OPERATION_INVALID, + "%s", _("domain is not running")); + return -1; + } + + qemuDomainObjEnterMonitor(driver, vm); + ret =3D qemuMonitorQueryDirtyRate(priv->mon, info); + if (qemuDomainObjExitMonitor(driver, vm) < 0) + ret =3D -1; + + return ret; +} diff --git a/src/qemu/qemu_migration.h b/src/qemu/qemu_migration.h index 6b1f4a8eea..a894c3c527 100644 --- a/src/qemu/qemu_migration.h +++ b/src/qemu/qemu_migration.h @@ -263,3 +263,8 @@ int qemuDomainCalculateDirtyRate(virQEMUDriverPtr driver, virDomainObjPtr vm, int sec); + +int +qemuDomainQueryDirtyRate(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virDomainDirtyRateInfoPtr info); diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 51bc9182f3..b8c428fca8 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -4725,3 +4725,15 @@ qemuMonitorCalculateDirtyRate(qemuMonitorPtr mon, =20 return qemuMonitorJSONCalculateDirtyRate(mon, sec); } + + +int +qemuMonitorQueryDirtyRate(qemuMonitorPtr mon, + virDomainDirtyRateInfoPtr info) +{ + VIR_DEBUG("info=3D%p", info); + + QEMU_CHECK_MONITOR(mon); + + return qemuMonitorJSONQueryDirtyRate(mon, info); +} diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index a11a5dc21c..9814fe0218 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1520,3 +1520,7 @@ qemuMonitorTransactionBackup(virJSONValuePtr actions, int qemuMonitorCalculateDirtyRate(qemuMonitorPtr mon, int sec); + +int +qemuMonitorQueryDirtyRate(qemuMonitorPtr mon, + virDomainDirtyRateInfoPtr info); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index bb85513aa6..ba301029b0 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -9474,3 +9474,80 @@ qemuMonitorJSONCalculateDirtyRate(qemuMonitorPtr mon, =20 return 0; } + + +VIR_ENUM_DECL(qemuDomainDirtyRateStatus); +VIR_ENUM_IMPL(qemuDomainDirtyRateStatus, + VIR_DOMAIN_DIRTYRATE_LAST, + "unstarted", + "measuring", + "measured"); + +static int +qemuMonitorJSONExtractDirtyRateInfo(virJSONValuePtr data, + virDomainDirtyRateInfoPtr info) +{ + const char *status; + int statusID; + + if (!(status =3D virJSONValueObjectGetString(data, "status"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("query-dirty-rate reply was missing 'status' data= ")); + return -1; + } + + if ((statusID =3D qemuDomainDirtyRateStatusTypeFromString(status)) < 0= ) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unknown dirty rate status: %s"), status); + return -1; + } + info->status =3D statusID; + + if ((info->status =3D=3D VIR_DOMAIN_DIRTYRATE_MEASURED) && + (virJSONValueObjectGetNumberLong(data, "dirty-rate", &info->dirtyR= ate) < 0)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("query-dirty-rate reply was missing 'dirty-rate' = data")); + return -1; + } + + if (virJSONValueObjectGetNumberLong(data, "start-time", &info->startTi= me) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("query-dirty-rate reply was missing 'start-time' = data")); + return -1; + } + + if (virJSONValueObjectGetNumberInt(data, "calc-time", &info->calcTime)= < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("query-dirty-rate reply was missing 'calc-time' d= ata")); + return -1; + } + + return 0; +} + + +int +qemuMonitorJSONQueryDirtyRate(qemuMonitorPtr mon, + virDomainDirtyRateInfoPtr info) +{ + g_autoptr(virJSONValue) cmd =3D NULL; + g_autoptr(virJSONValue) reply =3D NULL; + virJSONValuePtr data =3D NULL; + + if (!(cmd =3D qemuMonitorJSONMakeCommand("query-dirty-rate", NULL))) + return -1; + + if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) + return -1; + + if (qemuMonitorJSONCheckError(cmd, reply) < 0) + return -1; + + if (!(data =3D virJSONValueObjectGetObject(reply, "return"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("query-dirty-rate reply was missing 'return' data= ")); + return -1; + } + + return qemuMonitorJSONExtractDirtyRateInfo(data, info); +} diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index cc59d2c078..27ced5cd5e 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -709,3 +709,7 @@ qemuMonitorJSONGetCPUMigratable(qemuMonitorPtr mon, int qemuMonitorJSONCalculateDirtyRate(qemuMonitorPtr mon, int sec); + +int +qemuMonitorJSONQueryDirtyRate(qemuMonitorPtr mon, + virDomainDirtyRateInfoPtr info); --=20 2.23.0 From nobody Sun May 5 07:01:06 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612173374; cv=none; d=zohomail.com; s=zohoarc; b=ZnIBHLExP+xb4Xr6VZD1xbWG6JebUuCk8826OjVBzvRELL/upjwOPHajFA4n1sTbLc1It2lXO3KITB6FxKqKozRQCJ6h2uCaarFIFl7u9BIsrAUiqALC+ueHfjD+7tYNga08gTJIGttR6IYUW0i4zFbuhHtgu5J5Uid9wVQPvhE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612173374; 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=8OvJnBDWxaq3W/q2hI0W6w1alCdSvT8m8slmIDsg++A=; b=ipkd523ugRCn+i3/XHFRUfNWH36Nz07Ny+pQfZihD5o8KaHPmu/Phzhb9WbrSP1lkP1yxQ6xw4Mn3lCTxoKuO3NzRUj0kAMovWU/Z55QexdWrDcvrUbr2F0NWJBXAkMTdSN7J0xAMhxOSPYDbrzR6KNhdn1mwDLfUTAT+Dg8ohE= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 161217337473272.2908377951776; Mon, 1 Feb 2021 01:56:14 -0800 (PST) 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-386-O9B09Q7XPMaCLmVPyqzMoQ-1; Mon, 01 Feb 2021 04:56:11 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 1A52FC7400; Mon, 1 Feb 2021 09:56:06 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E76ED709AB; Mon, 1 Feb 2021 09:56:05 +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 AEBA250039; Mon, 1 Feb 2021 09:56:05 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 1119u4Xh021874 for ; Mon, 1 Feb 2021 04:56:04 -0500 Received: by smtp.corp.redhat.com (Postfix) id E7A282026D14; Mon, 1 Feb 2021 09:56:03 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast06.extmail.prod.ext.rdu2.redhat.com [10.11.55.22]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E2FE72026D12 for ; Mon, 1 Feb 2021 09:56:02 +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-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 16CCE1875040 for ; Mon, 1 Feb 2021 09:56:02 +0000 (UTC) Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-562--09c822COg2cig2_0ZOg7g-1; Mon, 01 Feb 2021 04:55:57 -0500 Received: from DGGEMS404-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4DTjwD0R3yzjHQV; Mon, 1 Feb 2021 17:54:36 +0800 (CST) Received: from huawei.com (10.175.104.175) by DGGEMS404-HUB.china.huawei.com (10.3.19.204) with Microsoft SMTP Server id 14.3.498.0; Mon, 1 Feb 2021 17:55:46 +0800 X-MC-Unique: O9B09Q7XPMaCLmVPyqzMoQ-1 X-MC-Unique: -09c822COg2cig2_0ZOg7g-1 From: Hao Wang To: Subject: [PATCH v5 4/5] migration/dirtyrate: Implement qemuDomainGetDirtyRateInfo Date: Mon, 1 Feb 2021 17:55:42 +0800 Message-ID: <20210201095543.936333-5-wanghao232@huawei.com> In-Reply-To: <20210201095543.936333-1-wanghao232@huawei.com> References: <20210201095543.936333-1-wanghao232@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.104.175] 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 2.78 on 10.11.54.4 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id 1119u4Xh021874 X-loop: libvir-list@redhat.com Cc: yubihong@huawei.com, zhengchuan@huawei.com, pkrempa@redhat.com, zhang.zhanghailiang@huawei.com, mprivozn@redhat.com, danielhb413@gmail.com, xiexiangyou@huawei.com, alex.chen@huawei.com, hhan@redhat.com, wanghao232@huawei.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.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Implement qemuDomainGetDirtyRateInfo: using flags to control behaviors -- calculate and/or query dirtyrate. Default flag is both calculate and query. Signed-off-by: Hao Wang Reviewed-by: Chuan Zheng --- src/qemu/qemu_driver.c | 67 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ed840a5c8d..2b9ce1c386 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -20289,6 +20289,72 @@ qemuDomainAuthorizedSSHKeysSet(virDomainPtr dom, } =20 =20 +#define MIN_DIRTYRATE_CALCULATION_PERIOD 1 /* supported min dirtyrate cal= c time: 1s */ +#define MAX_DIRTYRATE_CALCULATION_PERIOD 60 /* supported max dirtyrate cal= c time: 60s */ + +static int +qemuDomainGetDirtyRateInfo(virDomainPtr dom, + virDomainDirtyRateInfoPtr info, + int sec, + unsigned int flags) +{ + virQEMUDriverPtr driver =3D dom->conn->privateData; + virDomainObjPtr vm =3D NULL; + int ret =3D -1; + + if (!(vm =3D qemuDomainObjFromDomain(dom))) + return -1; + + if (virDomainGetDirtyRateInfoEnsureACL(dom->conn, vm->def) < 0) + goto cleanup; + + if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY) < 0) + goto cleanup; + + /* flags is default to both calculate and query */ + if (flags =3D=3D VIR_DOMAIN_DIRTYRATE_DEFAULT) + flags |=3D VIR_DOMAIN_DIRTYRATE_CALC | VIR_DOMAIN_DIRTYRATE_QUERY; + + /* calculating */ + if (flags & VIR_DOMAIN_DIRTYRATE_CALC) { + if (sec < MIN_DIRTYRATE_CALCULATION_PERIOD || + sec > MAX_DIRTYRATE_CALCULATION_PERIOD) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("seconds=3D%d is invalid, please choose value= within [%d, %d]."), + sec, + MIN_DIRTYRATE_CALCULATION_PERIOD, + MAX_DIRTYRATE_CALCULATION_PERIOD); + goto endjob; + } + + if (qemuDomainCalculateDirtyRate(driver, vm, sec) < 0) + goto endjob; + } + + /* querying */ + if (flags & VIR_DOMAIN_DIRTYRATE_QUERY) { + /* wait sec and extra 50ms to let last calculation finish */ + if (flags & VIR_DOMAIN_DIRTYRATE_CALC) { + virObjectUnlock(vm); + g_usleep((sec * 1000 + 50) * 1000); + virObjectLock(vm); + } + + if (qemuDomainQueryDirtyRate(driver, vm, info) < 0) + goto endjob; + } + + ret =3D 0; + + endjob: + qemuDomainObjEndJob(driver, vm); + + cleanup: + virDomainObjEndAPI(&vm); + return ret; +} + + static virHypervisorDriver qemuHypervisorDriver =3D { .name =3D QEMU_DRIVER_NAME, .connectURIProbe =3D qemuConnectURIProbe, @@ -20530,6 +20596,7 @@ static virHypervisorDriver qemuHypervisorDriver =3D= { .domainBackupGetXMLDesc =3D qemuDomainBackupGetXMLDesc, /* 6.0.0 */ .domainAuthorizedSSHKeysGet =3D qemuDomainAuthorizedSSHKeysGet, /* 6.1= 0.0 */ .domainAuthorizedSSHKeysSet =3D qemuDomainAuthorizedSSHKeysSet, /* 6.1= 0.0 */ + .domainGetDirtyRateInfo =3D qemuDomainGetDirtyRateInfo, /* 7.1.0 */ }; =20 =20 --=20 2.23.0 From nobody Sun May 5 07:01:06 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612173384; cv=none; d=zohomail.com; s=zohoarc; b=hOQWnYdDFjMy5HUtQCInQp7EKyU0JnFtfrkKvmDrNEs3gLO9xlXcGhG0ZDYKUiE8M8gy9MZw+mqQZYqHlfgCYDO2ccQsO6USc0hES/QjDjK0+V6QB0ayqR6gdi2O6ODZIgGrtOjISD5YauM/PB91tA3rjH8h1SzuRCLqWEO/Nxw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612173384; 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=vwCwL2gQkhoV04aXMjwjYFIYsOWwFMa7e43v9FsXtNc=; b=lD2aWGkX5ZmO49YZh3krWQ+ySgO5HKrb45boo8xKQQyaHcHORYvYtHl0sFObmfsCbcgZ6GB+gd0HRpQviYrk+DvqP+234pvtAHG7748XhVvsl+v/Fw2LaC6UWMc7BaC0Bt6BaVV9Ee3cYAEm0z7jpjCIFffO8FpOmIkr83Lrk8Q= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1612173384391218.93279524904813; Mon, 1 Feb 2021 01:56:24 -0800 (PST) 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-134-HaWM99uGOpuCLnaNnA-W0g-1; Mon, 01 Feb 2021 04:56:21 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C8CE9190D345; Mon, 1 Feb 2021 09:56:13 +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 861E827C5F; Mon, 1 Feb 2021 09:56:13 +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 4542D1809CA0; Mon, 1 Feb 2021 09:56:13 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 1119u9g8021924 for ; Mon, 1 Feb 2021 04:56:09 -0500 Received: by smtp.corp.redhat.com (Postfix) id 72BB7621BE; Mon, 1 Feb 2021 09:56:09 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast05.extmail.prod.ext.rdu2.redhat.com [10.11.55.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6D8305D22E for ; Mon, 1 Feb 2021 09:56:07 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id E885188CC41 for ; Mon, 1 Feb 2021 09:56:06 +0000 (UTC) Received: from szxga07-in.huawei.com (szxga07-in.huawei.com [45.249.212.35]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-581-VOB92z3MNteMsTiCSqmLhg-1; Mon, 01 Feb 2021 04:56:02 -0500 Received: from DGGEMS404-HUB.china.huawei.com (unknown [172.30.72.58]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4DTjwK2w2kz7f02; Mon, 1 Feb 2021 17:54:41 +0800 (CST) Received: from huawei.com (10.175.104.175) by DGGEMS404-HUB.china.huawei.com (10.3.19.204) with Microsoft SMTP Server id 14.3.498.0; Mon, 1 Feb 2021 17:55:46 +0800 X-MC-Unique: HaWM99uGOpuCLnaNnA-W0g-1 X-MC-Unique: VOB92z3MNteMsTiCSqmLhg-1 From: Hao Wang To: Subject: [PATCH v5 5/5] migration/dirtyrate: Introduce domdirtyrate virsh api Date: Mon, 1 Feb 2021 17:55:43 +0800 Message-ID: <20210201095543.936333-6-wanghao232@huawei.com> In-Reply-To: <20210201095543.936333-1-wanghao232@huawei.com> References: <20210201095543.936333-1-wanghao232@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.104.175] 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 2.79 on 10.11.54.5 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id 1119u9g8021924 X-loop: libvir-list@redhat.com Cc: yubihong@huawei.com, zhengchuan@huawei.com, pkrempa@redhat.com, zhang.zhanghailiang@huawei.com, mprivozn@redhat.com, danielhb413@gmail.com, xiexiangyou@huawei.com, alex.chen@huawei.com, hhan@redhat.com, wanghao232@huawei.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.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The new virsh command are: domdirtyrate [--calculate] [--query] [--seconds ] Signed-off-by: Hao Wang Reviewed-by: Chuan Zheng --- docs/manpages/virsh.rst | 17 ++++++ tools/virsh-domain.c | 127 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 144 insertions(+) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index e3afa48f7b..c7cff8a647 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -1704,6 +1704,23 @@ states other than "ok" or "error" the command also p= rints number of seconds elapsed since the control interface entered its current state. =20 =20 +domdirtyrate +------------ + +**Syntax:** + +:: + + domdirtyrate [--calculate] [--query] [--seconds ] + +Calculate and/or query an active domain's memory dirty rate which may be +expected by user in order to decide whether it's proper to be migrated out +or not. Either or both *--calculate* and *--query* flags are expected, and +it would be default to both if no flags is specified. And the ``seconds`` +parameter can be used to calculate dirty rate in a specific time which all= ows +60s at most now and would be default to 1s if missing. + + domdisplay ---------- =20 diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 2bb136333f..2cdd26b3b6 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -14416,6 +14416,127 @@ cmdSetUserSSHKeys(vshControl *ctl, const vshCmd *= cmd) } =20 =20 +/* + * "domdirtyrate" command + */ +static const vshCmdInfo info_domdirtyrate[] =3D { + {.name =3D "help", + .data =3D N_("Get a vm's memory dirty rate") + }, + {.name =3D "desc", + .data =3D N_("Get memory dirty rate of a domain in order to decide" + " whether it's proper to be migrated out or not.") + }, + {.name =3D NULL} +}; + +static const vshCmdOptDef opts_domdirtyrate[] =3D { + VIRSH_COMMON_OPT_DOMAIN_FULL(0), + {.name =3D "seconds", + .type =3D VSH_OT_INT, + .help =3D N_("calculate memory dirty rate within specified seconds," + " the supported value range is [1, 60], default to 1s.") + }, + {.name =3D "calculate", + .type =3D VSH_OT_BOOL, + .help =3D N_("calculate dirty rate only, can be used together with --= query," + " either or both is expected, otherwise would default to b= oth.") + }, + {.name =3D "query", + .type =3D VSH_OT_BOOL, + .help =3D N_("query dirty rate only, can be used together with --calc= ulate," + " either or both is expected, otherwise would default to b= oth.") + }, + {.name =3D NULL} +}; + +static bool +cmdDomDirtyRateInfo(vshControl *ctl, const vshCmd *cmd) +{ + virDomainPtr dom =3D NULL; + virDomainDirtyRateInfo info; + const char *status =3D NULL; + unsigned int flags =3D VIR_DOMAIN_DIRTYRATE_DEFAULT; + int sec; + int rc; + vshTablePtr table =3D NULL; + g_autofree char *startTimeStr =3D NULL; + g_autofree char *calcTimeStr =3D NULL; + g_autofree char *dirtyRateStr =3D NULL; + bool ret =3D false; + bool calc =3D vshCommandOptBool(cmd, "calculate"); + bool query =3D vshCommandOptBool(cmd, "query"); + + if (calc) + flags |=3D VIR_DOMAIN_DIRTYRATE_CALC; + + if (query) + flags |=3D VIR_DOMAIN_DIRTYRATE_QUERY; + + if (!(dom =3D virshCommandOptDomain(ctl, cmd, NULL))) + return false; + + rc =3D vshCommandOptInt(ctl, cmd, "seconds", &sec); + if (rc < 0) + goto cleanup; + + /* if no inputted seconds, default to 1s */ + if (!rc) + sec =3D 1; + + if (virDomainGetDirtyRateInfo(dom, &info, sec, flags) < 0) + goto cleanup; + + if (flags =3D=3D VIR_DOMAIN_DIRTYRATE_DEFAULT || + flags & VIR_DOMAIN_DIRTYRATE_QUERY) { + table =3D vshTableNew(_("Item"), _("Value"), NULL); + if (!table) + goto cleanup; + + switch (info.status) { + case VIR_DOMAIN_DIRTYRATE_UNSTARTED: + status =3D _("unstarted"); + break; + case VIR_DOMAIN_DIRTYRATE_MEASURING: + status =3D _("measuring"); + break; + case VIR_DOMAIN_DIRTYRATE_MEASURED: + status =3D _("measured"); + dirtyRateStr =3D g_strdup_printf("%lld MB/s", info.dirtyRate); + break; + default: + status =3D _("unknown"); + } + + if (vshTableRowAppend(table, _("Status:"), status, NULL) < 0) + goto cleanup; + + startTimeStr =3D g_strdup_printf("%lld", info.startTime); + if (vshTableRowAppend(table, _("Start time:"), startTimeStr, NULL)= < 0) + goto cleanup; + + calcTimeStr =3D g_strdup_printf("%d s", info.calcTime); + if (vshTableRowAppend(table, _("Calculate time:"), calcTimeStr, NU= LL) < 0) + goto cleanup; + + if (info.status =3D=3D VIR_DOMAIN_DIRTYRATE_MEASURED && + vshTableRowAppend(table, _("Dirty rate:"), dirtyRateStr, NULL)= < 0) + goto cleanup; + + vshTablePrintToStdout(table, ctl); + } else { + vshPrint(ctl, _("Memory dirty rate is calculating, use --query opt= ion to display results.\n")); + } + + ret =3D true; + + cleanup: + vshTableFree(table); + virshDomainFree(dom); + return ret; +} + + const vshCmdDef domManagementCmds[] =3D { {.name =3D "attach-device", .handler =3D cmdAttachDevice, @@ -15055,5 +15176,11 @@ const vshCmdDef domManagementCmds[] =3D { .info =3D info_guestinfo, .flags =3D 0 }, + {.name =3D "domdirtyrate", + .handler =3D cmdDomDirtyRateInfo, + .opts =3D opts_domdirtyrate, + .info =3D info_domdirtyrate, + .flags =3D 0 + }, {.name =3D NULL} }; --=20 2.23.0