]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
migration/dirtyrate: Introduce virDomainStartDirtyRateCalc API
authorHao Wang <wanghao232@huawei.com>
Tue, 16 Mar 2021 12:32:45 +0000 (20:32 +0800)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 18 Mar 2021 07:50:25 +0000 (08:50 +0100)
Introduce virDomainStartDirtyRateCalc API for start calculation of
a domain's memory dirty rate with a specified time.

Signed-off-by: Hao Wang <wanghao232@huawei.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
include/libvirt/libvirt-domain.h
src/driver-hypervisor.h
src/libvirt-domain.c
src/libvirt_public.syms
src/remote/remote_driver.c
src/remote/remote_protocol.x
src/remote_protocol-structs

index 8011cf9fe1a683d9ee667d385f8a392e4b9e12ac..7aa5ef45431c0af5f6d4923b526be1232b48aea0 100644 (file)
@@ -5128,4 +5128,8 @@ int virDomainGetMessages(virDomainPtr domain,
                          char ***msgs,
                          unsigned int flags);
 
+int virDomainStartDirtyRateCalc(virDomainPtr domain,
+                                int seconds,
+                                unsigned int flags);
+
 #endif /* LIBVIRT_DOMAIN_H */
index 05d7dfb5c793fbe652b7766316cb90e3951794e0..2ec7b8b24a5fa73af6f91c40d5b638de8fec0d0c 100644 (file)
@@ -1405,6 +1405,11 @@ typedef int
                            char ***msgs,
                            unsigned int flags);
 
+typedef int
+(*virDrvDomainStartDirtyRateCalc)(virDomainPtr domain,
+                                  int seconds,
+                                  unsigned int flags);
+
 typedef struct _virHypervisorDriver virHypervisorDriver;
 typedef virHypervisorDriver *virHypervisorDriverPtr;
 
@@ -1671,4 +1676,5 @@ struct _virHypervisorDriver {
     virDrvDomainAuthorizedSSHKeysGet domainAuthorizedSSHKeysGet;
     virDrvDomainAuthorizedSSHKeysSet domainAuthorizedSSHKeysSet;
     virDrvDomainGetMessages domainGetMessages;
+    virDrvDomainStartDirtyRateCalc domainStartDirtyRateCalc;
 };
index e54d11e513414c398704b87ba1ceae3c580563e9..91001fc4ed8ef66f5dbf5f5580d8ccd47059d50a 100644 (file)
@@ -13158,3 +13158,47 @@ virDomainGetMessages(virDomainPtr domain,
     virDispatchError(conn);
     return -1;
 }
+
+
+/**
+ * virDomainStartDirtyRateCalc:
+ * @domain: a domain object
+ * @seconds: specified calculating time in seconds
+ * @flags: extra flags; not used yet, so callers should always pass 0
+ *
+ * Calculate the current domain's memory dirty rate in next @seconds.
+ * The calculated dirty rate information is available by calling
+ * virConnectGetAllDomainStats.
+ *
+ * Returns 0 in case of success, -1 otherwise.
+ */
+int
+virDomainStartDirtyRateCalc(virDomainPtr domain,
+                            int seconds,
+                            unsigned int flags)
+{
+    virConnectPtr conn;
+
+    VIR_DOMAIN_DEBUG(domain, "seconds=%d, flags=0x%x", seconds, flags);
+
+    virResetLastError();
+
+    virCheckDomainReturn(domain, -1);
+    conn = domain->conn;
+
+    virCheckReadOnlyGoto(conn->flags, error);
+
+    if (conn->driver->domainStartDirtyRateCalc) {
+        int ret;
+        ret = conn->driver->domainStartDirtyRateCalc(domain, seconds, flags);
+        if (ret < 0)
+            goto error;
+        return ret;
+    }
+
+    virReportUnsupportedError();
+
+ error:
+    virDispatchError(conn);
+    return -1;
+}
index d851333eb015ba9bdb5f4e4b6cf0c37d7e612248..51a3d7265a50e38a04f577429dcf6f66494ea8df 100644 (file)
@@ -884,4 +884,9 @@ LIBVIRT_7.1.0 {
         virDomainGetMessages;
 } LIBVIRT_6.10.0;
 
+LIBVIRT_7.2.0 {
+    global:
+        virDomainStartDirtyRateCalc;
+} LIBVIRT_7.1.0;
+
 # .... define new API here using predicted next version number ....
index 31868269b17fc491f03e1a9deb08fe090a1a0004..494f4b6dc5a68ae1d7570ce464a311ed0f0559d7 100644 (file)
@@ -8571,6 +8571,7 @@ static virHypervisorDriver hypervisor_driver = {
     .domainAuthorizedSSHKeysGet = remoteDomainAuthorizedSSHKeysGet, /* 6.10.0 */
     .domainAuthorizedSSHKeysSet = remoteDomainAuthorizedSSHKeysSet, /* 6.10.0 */
     .domainGetMessages = remoteDomainGetMessages, /* 7.1.0 */
+    .domainStartDirtyRateCalc = remoteDomainStartDirtyRateCalc, /* 7.2.0 */
 };
 
 static virNetworkDriver network_driver = {
index d3724bc3058cd03802b75b4774e24134d26bba95..7fdc65f02951dd22cd33f2d67f95ae816e9df634 100644 (file)
@@ -3811,6 +3811,12 @@ struct remote_domain_get_messages_ret {
     remote_nonnull_string msgs<REMOTE_DOMAIN_MESSAGES_MAX>;
 };
 
+struct remote_domain_start_dirty_rate_calc_args {
+    remote_nonnull_domain dom;
+    int seconds;
+    unsigned int flags;
+};
+
 
 /*----- Protocol. -----*/
 
@@ -6733,5 +6739,11 @@ enum remote_procedure {
      * @generate: none
      * @acl: domain:read
      */
-    REMOTE_PROC_DOMAIN_GET_MESSAGES = 426
+    REMOTE_PROC_DOMAIN_GET_MESSAGES = 426,
+
+    /**
+     * @generate: both
+     * @acl: domain:read
+     */
+    REMOTE_PROC_DOMAIN_START_DIRTY_RATE_CALC = 427
 };
index c0c034ac6ad6fcb6a51343c64843b8e8cb951d82..d13dc81a82ca44449b0cdfad11fdf6d487af77fa 100644 (file)
@@ -3172,6 +3172,11 @@ struct remote_domain_get_messages_ret {
                 remote_nonnull_string * msgs_val;
         } msgs;
 };
+struct remote_domain_start_dirty_rate_calc_args {
+        remote_nonnull_domain      dom;
+        int                        seconds;
+        u_int                      flags;
+};
 enum remote_procedure {
         REMOTE_PROC_CONNECT_OPEN = 1,
         REMOTE_PROC_CONNECT_CLOSE = 2,
@@ -3599,4 +3604,5 @@ enum remote_procedure {
         REMOTE_PROC_DOMAIN_AUTHORIZED_SSH_KEYS_GET = 424,
         REMOTE_PROC_DOMAIN_AUTHORIZED_SSH_KEYS_SET = 425,
         REMOTE_PROC_DOMAIN_GET_MESSAGES = 426,
+        REMOTE_PROC_DOMAIN_START_DIRTY_RATE_CALC = 427,
 };