[PATCH qemu-server 05/13] blockdev: add support to qemu_block_set_io_throttle

Alexandre Derumier alexandre.derumier at groupe-cyllene.com
Tue Jun 3 09:55:45 CEST 2025


Signed-off-by: Alexandre Derumier <alexandre.derumier at groupe-cyllene.com>
---
 PVE/QemuServer.pm | 71 +++++++++++++++++++++++++++++++++--------------
 1 file changed, 50 insertions(+), 21 deletions(-)

diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index fa072fca..0af091aa 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -4592,27 +4592,56 @@ sub qemu_block_set_io_throttle {
 
     return if !check_running($vmid) ;
 
-    mon_cmd($vmid, "block_set_io_throttle", device => $deviceid,
-	bps => int($bps),
-	bps_rd => int($bps_rd),
-	bps_wr => int($bps_wr),
-	iops => int($iops),
-	iops_rd => int($iops_rd),
-	iops_wr => int($iops_wr),
-	bps_max => int($bps_max),
-	bps_rd_max => int($bps_rd_max),
-	bps_wr_max => int($bps_wr_max),
-	iops_max => int($iops_max),
-	iops_rd_max => int($iops_rd_max),
-	iops_wr_max => int($iops_wr_max),
-	bps_max_length => int($bps_max_length),
-	bps_rd_max_length => int($bps_rd_max_length),
-	bps_wr_max_length => int($bps_wr_max_length),
-	iops_max_length => int($iops_max_length),
-	iops_rd_max_length => int($iops_rd_max_length),
-	iops_wr_max_length => int($iops_wr_max_length),
-    );
-
+    my $machine_type = PVE::QemuServer::Machine::get_current_qemu_machine($vmid);
+    if (PVE::QemuServer::Machine::is_machine_version_at_least($machine_type, 10, 0)) {
+	mon_cmd(
+	    $vmid,
+	    'qom-set',
+	    path => "throttle-$deviceid",
+	    property => "limits",
+	    value => {
+		'bps-total' => int($bps),
+		'bps-read' => int($bps_rd),
+		'bps-write' => int($bps_wr),
+		'iops-total' => int($iops),
+		'iops-read' => int($iops_rd),
+		'iops-write' => int($iops_wr),
+		'bps-total-max' => int($bps_max),
+		'bps-read-max' => int($bps_rd_max),
+		'bps-write-max' => int($bps_wr_max),
+		'iops-total-max' => int($iops_max),
+		'iops-read-max' => int($iops_rd_max),
+		'iops-write-max' => int($iops_wr_max),
+		'bps-total-max-length' => int($bps_max_length),
+		'bps-read-max-length' => int($bps_rd_max_length),
+		'bps-write-max-length' => int($bps_wr_max_length),
+		'iops-total-max-length' => int($iops_max_length),
+		'iops-read-max-length' => int($iops_rd_max_length),
+		'iops-write-max-length' => int($iops_wr_max_length),
+	    }
+	);
+    } else {
+	mon_cmd($vmid, "block_set_io_throttle", device => $deviceid,
+	    bps => int($bps),
+	    bps_rd => int($bps_rd),
+	    bps_wr => int($bps_wr),
+	    iops => int($iops),
+	    iops_rd => int($iops_rd),
+	    iops_wr => int($iops_wr),
+	    bps_max => int($bps_max),
+	    bps_rd_max => int($bps_rd_max),
+	    bps_wr_max => int($bps_wr_max),
+	    iops_max => int($iops_max),
+	    iops_rd_max => int($iops_rd_max),
+	    iops_wr_max => int($iops_wr_max),
+	    bps_max_length => int($bps_max_length),
+	    bps_rd_max_length => int($bps_rd_max_length),
+	    bps_wr_max_length => int($bps_wr_max_length),
+	    iops_max_length => int($iops_max_length),
+	    iops_rd_max_length => int($iops_rd_max_length),
+	    iops_wr_max_length => int($iops_wr_max_length),
+	);
+    }
 }
 
 sub qemu_block_resize {
-- 
2.39.5




More information about the pve-devel mailing list