public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [PATCH manager v3] fix #4503: ui: qemu: add detect zeroes disk option
@ 2026-06-18 11:49 Lukas Sichert
  2026-06-19 11:01 ` David Riley
  0 siblings, 1 reply; 4+ messages in thread
From: Lukas Sichert @ 2026-06-18 11:49 UTC (permalink / raw)
  To: pve-devel; +Cc: Lukas Sichert

When discard is enabled, qemu-server defaults to 'detect-zeroes=unmap'.
This can have a significant performance impact for zero writes on some
setups, while users might still want to keep guest discard/TRIM support
enabled.

Allow configuring the option independently so 'discard' can stay enabled
while zero detection is disabled. Persist the checkbox state explicitly,
as the backend treats an absent value as default-enabled behavior,
resulting in 'detect-zeroes=unmap' when 'discard' is enabled.

Link: https://bugzilla.proxmox.com/show_bug.cgi?id=4503
Signed-off-by: Lukas Sichert <l.sichert@proxmox.com>
---

Notes:
    changes from v2 to v3 (thanks @Fabian):
    - add a comment explaining why this property is handled differently from
      the others
    
    changes from v1 to v2:
    - added bug-numer to commit header
    - appended bug-link to commit body

 www/manager6/qemu/HDEdit.js | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/www/manager6/qemu/HDEdit.js b/www/manager6/qemu/HDEdit.js
index 1bb2bfda..2708d452 100644
--- a/www/manager6/qemu/HDEdit.js
+++ b/www/manager6/qemu/HDEdit.js
@@ -96,6 +96,9 @@ Ext.define('PVE.qemu.HDInputPanel', {
         PVE.Utils.propertyStringSet(me.drive, values.readOnly, 'ro', 'on');
         PVE.Utils.propertyStringSet(me.drive, values.cache, 'cache');
         PVE.Utils.propertyStringSet(me.drive, values.aio, 'aio');
+        // persist an explicit false value, since the backend defaults to enabled
+        // when the option is omitted.
+        me.drive.detect_zeroes = values.detect_zeroes ? 1 : 0;
 
         ['mbps_rd', 'mbps_wr', 'iops_rd', 'iops_wr'].forEach((name) => {
             let burst_name = `${name}_max`;
@@ -152,6 +155,7 @@ Ext.define('PVE.qemu.HDInputPanel', {
         values.diskformat = drive.format || 'raw';
         values.cache = drive.cache || '__default__';
         values.discard = drive.discard === 'on';
+        values.detect_zeroes = PVE.Parser.parseBoolean(drive.detect_zeroes, 1);
         values.ssd = PVE.Parser.parseBoolean(drive.ssd);
         values.iothread = PVE.Parser.parseBoolean(drive.iothread);
         values.readOnly = PVE.Parser.parseBoolean(drive.ro);
@@ -317,6 +321,12 @@ Ext.define('PVE.qemu.HDInputPanel', {
                 reference: 'discard',
                 name: 'discard',
             },
+            {
+                xtype: 'proxmoxcheckbox',
+                fieldLabel: gettext('Detect zeroes'),
+                reference: 'detect_zeroes',
+                name: 'detect_zeroes',
+            },
             {
                 xtype: 'proxmoxcheckbox',
                 name: 'iothread',
-- 
2.47.3





^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH manager v3] fix #4503: ui: qemu: add detect zeroes disk option
  2026-06-18 11:49 [PATCH manager v3] fix #4503: ui: qemu: add detect zeroes disk option Lukas Sichert
@ 2026-06-19 11:01 ` David Riley
  2026-06-22  8:51   ` Daniel Kral
  0 siblings, 1 reply; 4+ messages in thread
From: David Riley @ 2026-06-19 11:01 UTC (permalink / raw)
  To: Lukas Sichert, pve-devel

On 6/18/26 1:49 PM, Lukas Sichert wrote:
> When discard is enabled, qemu-server defaults to 'detect-zeroes=unmap'.
> This can have a significant performance impact for zero writes on some
> setups, while users might still want to keep guest discard/TRIM support
> enabled.
>
> Allow configuring the option independently so 'discard' can stay enabled
> while zero detection is disabled. Persist the checkbox state explicitly,
> as the backend treats an absent value as default-enabled behavior,
> resulting in 'detect-zeroes=unmap' when 'discard' is enabled.

Thanks for submitting this patch.

While it clearly addresses the performance issues reported in #4503
[0], I was reading through the Bugzilla thread and noticed a request
to support the third QEMU state for detect_zeroes [1]. Currently, the
underlying parameter supports off, on, and unmap [2].

Since we are already modifying this configuration in the UI, it might
make sense to fully expose all three options to the user rather than
just a binary toggle as there is a difference between "on" and
"unmap".

[0] https://bugzilla.proxmox.com/show_bug.cgi?id=4503
[1] https://bugzilla.proxmox.com/show_bug.cgi?id=4503#c8
[2] https://www.qemu.org/docs/master/interop/qemu-storage-daemon-qmp-ref.html#enum-QSD-block-core.BlockdevDetectZeroesOptions

> Link: https://bugzilla.proxmox.com/show_bug.cgi?id=4503
> Signed-off-by: Lukas Sichert <l.sichert@proxmox.com>
> ---
>
> Notes:
>      changes from v2 to v3 (thanks @Fabian):
>      - add a comment explaining why this property is handled differently from
>        the others
>      
>      changes from v1 to v2:
>      - added bug-numer to commit header
>      - appended bug-link to commit body
>
>   www/manager6/qemu/HDEdit.js | 10 ++++++++++
>   1 file changed, 10 insertions(+)
>
> [...]
>




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH manager v3] fix #4503: ui: qemu: add detect zeroes disk option
  2026-06-19 11:01 ` David Riley
@ 2026-06-22  8:51   ` Daniel Kral
  2026-06-23 14:06     ` Lukas Sichert
  0 siblings, 1 reply; 4+ messages in thread
From: Daniel Kral @ 2026-06-22  8:51 UTC (permalink / raw)
  To: David Riley, Lukas Sichert, pve-devel

On Fri Jun 19, 2026 at 1:01 PM CEST, David Riley wrote:
> On 6/18/26 1:49 PM, Lukas Sichert wrote:
>> When discard is enabled, qemu-server defaults to 'detect-zeroes=unmap'.
>> This can have a significant performance impact for zero writes on some
>> setups, while users might still want to keep guest discard/TRIM support
>> enabled.
>>
>> Allow configuring the option independently so 'discard' can stay enabled
>> while zero detection is disabled. Persist the checkbox state explicitly,
>> as the backend treats an absent value as default-enabled behavior,
>> resulting in 'detect-zeroes=unmap' when 'discard' is enabled.
>
> Thanks for submitting this patch.
>
> While it clearly addresses the performance issues reported in #4503
> [0], I was reading through the Bugzilla thread and noticed a request
> to support the third QEMU state for detect_zeroes [1]. Currently, the
> underlying parameter supports off, on, and unmap [2].
>
> Since we are already modifying this configuration in the UI, it might
> make sense to fully expose all three options to the user rather than
> just a binary toggle as there is a difference between "on" and
> "unmap".

This would need adapting the detect_zeroes option and parsing logic
(it's only boolean right now) so it can take any of the 3 valid values
by QEMU and be backwards compatible to the old values in our config.

This should probably also check the constraint that detect-zeroes=unmap
can only be set if discard=unmap, but the error message seems already be
quite clear for that [0].

[0] https://gitlab.com/qemu-project/qemu/-/blob/master/block.c?ref_type=heads#L1120

>
> [0] https://bugzilla.proxmox.com/show_bug.cgi?id=4503
> [1] https://bugzilla.proxmox.com/show_bug.cgi?id=4503#c8
> [2] https://www.qemu.org/docs/master/interop/qemu-storage-daemon-qmp-ref.html#enum-QSD-block-core.BlockdevDetectZeroesOptions
>
>> Link: https://bugzilla.proxmox.com/show_bug.cgi?id=4503
>> Signed-off-by: Lukas Sichert <l.sichert@proxmox.com>
>> ---
>>
>> Notes:
>>      changes from v2 to v3 (thanks @Fabian):
>>      - add a comment explaining why this property is handled differently from
>>        the others
>>      
>>      changes from v1 to v2:
>>      - added bug-numer to commit header
>>      - appended bug-link to commit body
>>
>>   www/manager6/qemu/HDEdit.js | 10 ++++++++++
>>   1 file changed, 10 insertions(+)
>>
>> [...]
>>






^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH manager v3] fix #4503: ui: qemu: add detect zeroes disk option
  2026-06-22  8:51   ` Daniel Kral
@ 2026-06-23 14:06     ` Lukas Sichert
  0 siblings, 0 replies; 4+ messages in thread
From: Lukas Sichert @ 2026-06-23 14:06 UTC (permalink / raw)
  To: Daniel Kral, David Riley, pve-devel

On 2026-06-22 10:51, Daniel Kral <d.kral@proxmox.com> wrote:

> On Fri Jun 19, 2026 at 1:01 PM CEST, David Riley wrote:
>> On 6/18/26 1:49 PM, Lukas Sichert wrote:
>>> When discard is enabled, qemu-server defaults to 'detect-zeroes=unmap'.
>>> This can have a significant performance impact for zero writes on some
>>> setups, while users might still want to keep guest discard/TRIM support
>>> enabled.
>>>
>>> Allow configuring the option independently so 'discard' can stay enabled
>>> while zero detection is disabled. Persist the checkbox state explicitly,
>>> as the backend treats an absent value as default-enabled behavior,
>>> resulting in 'detect-zeroes=unmap' when 'discard' is enabled.
>>
>> Thanks for submitting this patch.
>>
>> While it clearly addresses the performance issues reported in #4503
>> [0], I was reading through the Bugzilla thread and noticed a request
>> to support the third QEMU state for detect_zeroes [1]. Currently, the
>> underlying parameter supports off, on, and unmap [2].
>>
>> Since we are already modifying this configuration in the UI, it might
>> make sense to fully expose all three options to the user rather than
>> just a binary toggle as there is a difference between "on" and
>> "unmap".
>
> This would need adapting the detect_zeroes option and parsing logic
> (it's only boolean right now) so it can take any of the 3 valid values
> by QEMU and be backwards compatible to the old values in our config.
>
> This should probably also check the constraint that detect-zeroes=unmap
> can only be set if discard=unmap, but the error message seems already be
> quite clear for that [0].

Already in src/PVE/QemuServer/Drive.pm in the qemu-server repo, this is
checked and set accordingly.

Since detect-zeroes=unmap is essentially an extension of
detect-zeroes=on [1], and detect-zeroes=unmap is currently the default
when discard is enabled, I would keep this patch as is to preserve
backward compatibility.

[1]: https://www.qemu.org/docs/master/interop/qemu-storage-daemon-qmp-ref.html#enum-QSD-block-core.BlockdevDetectZeroesOptions

> [0] https://gitlab.com/qemu-project/qemu/-/blob/master/block.c?ref_type=heads#L1120
>
>>
>> [0] https://bugzilla.proxmox.com/show_bug.cgi?id=4503
>> [1] https://bugzilla.proxmox.com/show_bug.cgi?id=4503#c8
>> [2] https://www.qemu.org/docs/master/interop/qemu-storage-daemon-qmp-ref.html#enum-QSD-block-core.BlockdevDetectZeroesOptions
>>
>>> Link: https://bugzilla.proxmox.com/show_bug.cgi?id=4503
>>> Signed-off-by: Lukas Sichert <l.sichert@proxmox.com>
>>> ---
>>>
>>> Notes:
>>>      changes from v2 to v3 (thanks @Fabian):
>>>      - add a comment explaining why this property is handled differently from
>>>        the others
>>>      
>>>      changes from v1 to v2:
>>>      - added bug-numer to commit header
>>>      - appended bug-link to commit body
>>>
>>>   www/manager6/qemu/HDEdit.js | 10 ++++++++++
>>>   1 file changed, 10 insertions(+)
>>>
>>> [...]
>>>





^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-06-23 14:06 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-18 11:49 [PATCH manager v3] fix #4503: ui: qemu: add detect zeroes disk option Lukas Sichert
2026-06-19 11:01 ` David Riley
2026-06-22  8:51   ` Daniel Kral
2026-06-23 14:06     ` Lukas Sichert

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal