[PATCH v2 2/6] qemu_driver: Probe capability before calculating dirty page rate

huangy81@chinatelecom.cn posted 6 patches 4 years ago
There is a newer version of this series
[PATCH v2 2/6] qemu_driver: Probe capability before calculating dirty page rate
Posted by huangy81@chinatelecom.cn 4 years ago
From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>

Probing QEMU_CAPS_CALC_DIRTY_RATE capability in advance
in case of failure when calculating dirty page rate.

Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
---
 src/qemu/qemu_driver.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 0a1ba74..0e8e9b1 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -20647,10 +20647,22 @@ qemuDomainStartDirtyRateCalc(virDomainPtr dom,
     virQEMUDriver *driver = dom->conn->privateData;
     virDomainObj *vm = NULL;
     qemuDomainObjPrivate *priv;
+    g_autoptr(virQEMUCaps) qemucaps = NULL;
     int ret = -1;
 
     virCheckFlags(0, -1);
 
+    if (!(qemucaps = virQEMUCapsCacheLookupDefault(driver->qemuCapsCache,
+                                                   NULL, NULL, NULL, NULL,
+                                                   NULL, NULL, NULL)))
+        return -1;
+
+    if (!virQEMUCapsGet(qemucaps, QEMU_CAPS_CALC_DIRTY_RATE)) {
+        virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
+                       _("QEMU does not support calculating dirty page rate"));
+        return -1;
+    }
+
     if (seconds < MIN_DIRTYRATE_CALC_PERIOD ||
         seconds > MAX_DIRTYRATE_CALC_PERIOD) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-- 
1.8.3.1


Re: [PATCH v2 2/6] qemu_driver: Probe capability before calculating dirty page rate
Posted by Peter Krempa 4 years ago
On Thu, Jan 27, 2022 at 15:25:18 +0800, huangy81@chinatelecom.cn wrote:
> From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
> 
> Probing QEMU_CAPS_CALC_DIRTY_RATE capability in advance
> in case of failure when calculating dirty page rate.
> 
> Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
> ---
>  src/qemu/qemu_driver.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 0a1ba74..0e8e9b1 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -20647,10 +20647,22 @@ qemuDomainStartDirtyRateCalc(virDomainPtr dom,
>      virQEMUDriver *driver = dom->conn->privateData;
>      virDomainObj *vm = NULL;
>      qemuDomainObjPrivate *priv;
> +    g_autoptr(virQEMUCaps) qemucaps = NULL;
>      int ret = -1;
>  
>      virCheckFlags(0, -1);
>  
> +    if (!(qemucaps = virQEMUCapsCacheLookupDefault(driver->qemuCapsCache,
> +                                                   NULL, NULL, NULL, NULL,
> +                                                   NULL, NULL, NULL)))
> +        return -1;

This is not needed, qemuCaps for a running vm are stored in
'priv->qemuCaps'. In fact it's wrong to not use the stored capabilities.


> +
> +    if (!virQEMUCapsGet(qemucaps, QEMU_CAPS_CALC_DIRTY_RATE)) {
> +        virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
> +                       _("QEMU does not support calculating dirty page rate"));
> +        return -1;
> +    }

Obviously the code will need to be moved to a place where 'priv' is
already populated.

> +
>      if (seconds < MIN_DIRTYRATE_CALC_PERIOD ||
>          seconds > MAX_DIRTYRATE_CALC_PERIOD) {
>          virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> -- 
> 1.8.3.1
> 
> 

Re: [PATCH v2 2/6] qemu_driver: Probe capability before calculating dirty page rate
Posted by Hyman Huang 4 years ago

在 2022/1/27 16:23, Peter Krempa 写道:
> On Thu, Jan 27, 2022 at 15:25:18 +0800, huangy81@chinatelecom.cn wrote:
>> From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
>>
>> Probing QEMU_CAPS_CALC_DIRTY_RATE capability in advance
>> in case of failure when calculating dirty page rate.
>>
>> Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
>> ---
>>   src/qemu/qemu_driver.c | 12 ++++++++++++
>>   1 file changed, 12 insertions(+)
>>
>> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>> index 0a1ba74..0e8e9b1 100644
>> --- a/src/qemu/qemu_driver.c
>> +++ b/src/qemu/qemu_driver.c
>> @@ -20647,10 +20647,22 @@ qemuDomainStartDirtyRateCalc(virDomainPtr dom,
>>       virQEMUDriver *driver = dom->conn->privateData;
>>       virDomainObj *vm = NULL;
>>       qemuDomainObjPrivate *priv;
>> +    g_autoptr(virQEMUCaps) qemucaps = NULL;
>>       int ret = -1;
>>   
>>       virCheckFlags(0, -1);
>>   
>> +    if (!(qemucaps = virQEMUCapsCacheLookupDefault(driver->qemuCapsCache,
>> +                                                   NULL, NULL, NULL, NULL,
>> +                                                   NULL, NULL, NULL)))
>> +        return -1;
> 
> This is not needed, qemuCaps for a running vm are stored in
> 'priv->qemuCaps'. In fact it's wrong to not use the stored capabilities