From nobody Mon Feb 9 00:07:20 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1770045465; cv=none; d=zohomail.com; s=zohoarc; b=lg+tbllKPLqQ5aNk5VPZbe/HeS1Lms3adoVkgQG/900ceuPJOZ14q/bJUj8FxPxoXccA4xW0s07mvBARJzqClvTRvpFQThJDQ+Ab1/bbuilzdNceJLtUI/tGrYQ4Zx9NSqV3JX88FVmoKruAWhTJmxYvGlbmSGOzE+q+vsWVCV8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770045465; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=ytJgmYhHfqgelHegBx9wemEyJQKSpbJ/9yQwYyZ1l1U=; b=SAGtAc/cLYR5fBgIDQ6WYaYekAKxI70TSOhKgbkBtQoUN2z0qhBfObXkNm5lsT/WER09FZJ8TGx3jIBlnMiZbPW/NPDC9ixO/S1DI2XqvGgxumCxqcyfxTezU4TpgBJhln3p9ZZ5vFIkecFVtpPEj2yLG2gg/RxxRIFrUCpSqhw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 177004546596636.14706367800659; Mon, 2 Feb 2026 07:17:45 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 7F14641B59; Mon, 2 Feb 2026 10:17:45 -0500 (EST) Received: from [172.19.199.6] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 8257943E59; Mon, 2 Feb 2026 10:09:55 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 0D28743F2C; Mon, 2 Feb 2026 10:09:51 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 53DE643F6E for ; Mon, 2 Feb 2026 10:07:03 -0500 (EST) Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-668-p3l2NhRLOHirhSc3tssjHg-1; Mon, 02 Feb 2026 10:07:00 -0500 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 3B2841956095 for ; Mon, 2 Feb 2026 15:06:59 +0000 (UTC) Received: from speedmetal.lan (unknown [10.45.242.3]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 858331801760 for ; Mon, 2 Feb 2026 15:06:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1770044823; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ytJgmYhHfqgelHegBx9wemEyJQKSpbJ/9yQwYyZ1l1U=; b=cTQff4g5AXjBoAQKGuFr2/CLp9xK+jr6/io2XtWLr8wvOXmG//tRvE2WxNWyYbpBCBP3DM 2IfGMGm5uaHFrJQbB7yWxQw4HvvsMU8wsgn0AIUj1HSywSDOXWmrKYpvHeQceT9yXMED3V OfAkguG8LocieZ9L2jFcpTIgnkiDqjA= X-MC-Unique: p3l2NhRLOHirhSc3tssjHg-1 X-Mimecast-MFC-AGG-ID: p3l2NhRLOHirhSc3tssjHg_1770044819 To: devel@lists.libvirt.org Subject: [PATCH 9/9] qemu: Setup disk latency histograms on startup/hotplug/update Date: Mon, 2 Feb 2026 16:06:46 +0100 Message-ID: <0700b662fcc3b4dd04a9d053a427d3df2e614225.1770044532.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: q8feqBNyfsdVUd2cljivaupixDaGtWa2_kzfPE_zAKI_1770044819 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 7MUKQGPFW2YJ4DEG23VR4DPGVIWFKHFB X-Message-ID-Hash: 7MUKQGPFW2YJ4DEG23VR4DPGVIWFKHFB X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1770045467753154100 Content-Type: text/plain; charset="utf-8" From: Peter Krempa Setup the histograms on startup and hotplug of devices via 'qemuProcessSetupDiskPropsRuntime' and facilitate update/reset/disable of histogram collection via 'qemuDomainChangeDiskLive'. The latter allows to use the update device API to either clear the bins or select new bin configuration or disable the histogram altogether without the need for a specific API. Signed-off-by: Peter Krempa --- src/qemu/qemu_domain.c | 17 +++++++++++++++++ src/qemu/qemu_domain.h | 3 +++ src/qemu/qemu_hotplug.c | 29 +++++++++++++++++++++++++++++ src/qemu/qemu_process.c | 10 ++++++++++ 4 files changed, 59 insertions(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 8e1ebe7799..bdab117e96 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -10463,6 +10463,23 @@ qemuDomainInitializePflashStorageSource(virDomainO= bj *vm, } +/** + * qemuDomainDiskHasLatencyHistogram: + * @disk: disk definition + * + * Returns whether @disk has any latency histogram settings configured. + */ +bool +qemuDomainDiskHasLatencyHistogram(virDomainDiskDef *disk) +{ + return disk->histogram_boundaries || + disk->histogram_boundaries_read || + disk->histogram_boundaries_write || + disk->histogram_boundaries_zone || + disk->histogram_boundaries_flush; +} + + /** * qemuDomainDiskBlockJobIsSupported: * diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 3361e97315..30ca67bf76 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -1078,6 +1078,9 @@ int qemuDomainInitializePflashStorageSource(virDomainObj *vm, virQEMUDriverConfig *cfg); +bool +qemuDomainDiskHasLatencyHistogram(virDomainDiskDef *disk); + bool qemuDomainDiskBlockJobIsSupported(virDomainDiskDef *disk); diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index ffd7795b66..df61f17723 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -7327,6 +7327,35 @@ qemuDomainChangeDiskLive(virDomainObj *vm, dev->data.disk->src =3D NULL; } + if (qemuDomainDiskHasLatencyHistogram(disk) || + qemuDomainDiskHasLatencyHistogram(orig_disk)) { + int rc; + + qemuDomainObjEnterMonitor(vm); + rc =3D qemuMonitorBlockLatencyHistogramSet(qemuDomainGetMonitor(vm= ), + QEMU_DOMAIN_DISK_PRIVATE(= orig_disk)->qomName, + disk->histogram_boundarie= s, + disk->histogram_boundarie= s_read, + disk->histogram_boundarie= s_write, + disk->histogram_boundarie= s_zone, + disk->histogram_boundarie= s_flush); + qemuDomainObjExitMonitor(vm); + + if (rc < 0) + return -1; + + g_clear_pointer(&orig_disk->histogram_boundaries, g_free); + g_clear_pointer(&orig_disk->histogram_boundaries_read, g_free); + g_clear_pointer(&orig_disk->histogram_boundaries_write, g_free); + g_clear_pointer(&orig_disk->histogram_boundaries_zone, g_free); + g_clear_pointer(&orig_disk->histogram_boundaries_flush, g_free); + orig_disk->histogram_boundaries =3D g_steal_pointer(&disk->histogr= am_boundaries); + orig_disk->histogram_boundaries_read =3D g_steal_pointer(&disk->hi= stogram_boundaries_read); + orig_disk->histogram_boundaries_write =3D g_steal_pointer(&disk->h= istogram_boundaries_write); + orig_disk->histogram_boundaries_zone =3D g_steal_pointer(&disk->hi= stogram_boundaries_zone); + orig_disk->histogram_boundaries_flush =3D g_steal_pointer(&disk->h= istogram_boundaries_flush); + } + /* in case when we aren't updating disk source we update startup polic= y here */ orig_disk->startupPolicy =3D dev->data.disk->startupPolicy; orig_disk->snapshot =3D dev->data.disk->snapshot; diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 411c5b3b88..3d9db188fc 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -7958,6 +7958,16 @@ qemuProcessSetupDiskPropsRuntime(qemuMonitor *mon, &disk->blkdeviotune) < 0) return -1; + if (qemuDomainDiskHasLatencyHistogram(disk) && + qemuMonitorBlockLatencyHistogramSet(mon, + QEMU_DOMAIN_DISK_PRIVATE(disk)= ->qomName, + disk->histogram_boundaries, + disk->histogram_boundaries_rea= d, + disk->histogram_boundaries_wri= te, + disk->histogram_boundaries_zon= e, + disk->histogram_boundaries_flu= sh) < 0) + return -1; + return 0; } --=20 2.52.0