On Thu, Jun 06, 2024 at 07:58:04 -0000, Chun Feng Wu wrote: > Thanks Peter for above comments! > > My original design goal is exact the same as what QEMU doc says at https://github.com/qemu/qemu/blob/master/docs/throttle.txt: > "In this example the individual drives have IOPS limits of 2000, 2500 > and 3000 respectively but the total combined I/O can never exceed 4000 > IOPS." > > I haven't thought about such case: "somebody would want to apply different throttling on a backing image", do we have such case design for other feature? Currently, we support configuring some specifics such as the qcow2 metadata cache, which can be configured per-image and not just per disk: https://www.libvirt.org/formatdomain.html#hard-drives-floppy-disks-cdroms look for 'metadata_cache'. While the patchet doesn't necessarily need to implement it for backing images at this point you need to do it so that future change will be available. > About configuring old throttling via the 'throttle' blockdev layer, it seems possible, however, this new design and implementation has dependency on QEMU6, the reason about this is that starting from QEMU6, "-object"(case to launching vm along with throttlegroup) supports json format value: e.g. -object '{"qom-type":"throttle-group","id":"limits0","limits":{"iops-total":200}}'), while for qemu4.2, non-stable API works: e.g. -object throttle-group,id=limits0,x-iops-total=200, current implementation follows json way: it calls "qemuBuildObjectCommandlineFromJSON" to create throttle-group object, within "qemuBuildObjectCommandlineFromJSON", I see check about QEMU_CAPS_OBJECT_JSON: virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_JSON) Okay, but I don't see any code in this series which would limit it to the appropriate qemu versions. In cases when this is not supported by all qemu releases libvirt supports (currently qemu-4.2 and later) you'll have to add a capability and interlock the new feature based on it. > > in addition, for "object-add"(case to hot attach disk with throttles), it seems QMP json format is different between QEMU 6 and QEMU 4.2 ("props" required) > Okay another case when you must stay compatible and/or reject new configs with old qemu. Note that adding support for experimental features (x-NAME) is not acceptable.