From nobody Sat Jul 25 07:59:52 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; 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 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=reject dis=none) header.from=linux.ibm.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1784746510691182.13113261013643; Wed, 22 Jul 2026 11:55:10 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 7698441BAA; Wed, 22 Jul 2026 14:55:09 -0400 (EDT) Received: from [172.19.199.10] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 547843F849; Wed, 22 Jul 2026 14:52:42 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 2BDA74187F; Wed, 22 Jul 2026 14:52:23 -0400 (EDT) Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (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 AECBD419D2 for ; Wed, 22 Jul 2026 14:52:21 -0400 (EDT) Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MIBibS712843 for ; Wed, 22 Jul 2026 18:52:21 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fg7ahbbeg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 22 Jul 2026 18:52:20 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 66MIna9q025141 for ; Wed, 22 Jul 2026 18:52:20 GMT Received: from smtprelay03.dal12v.mail.ibm.com ([172.16.1.5]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fgnah8nva-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 22 Jul 2026 18:52:20 +0000 (GMT) Received: from smtpav02.wdc07v.mail.ibm.com (smtpav02.wdc07v.mail.ibm.com [10.39.53.229]) by smtprelay03.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 66MIqIt432899620 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Jul 2026 18:52:18 GMT Received: from smtpav02.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6F26A58067; Wed, 22 Jul 2026 18:52:18 +0000 (GMT) Received: from smtpav02.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0D25B5805D; Wed, 22 Jul 2026 18:52:18 +0000 (GMT) Received: from IBM-GLTZVH3.atx-us.ibm.com (unknown [9.16.36.179]) by smtpav02.wdc07v.mail.ibm.com (Postfix) with ESMTP; Wed, 22 Jul 2026 18:52:17 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.2 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=0kNf2Qw4LfJY0A41N Bp0S4Re7y6TT0HHtSyesCk40Io=; b=Qbh5BU3xQzp0GoSgfPK5NANYwvyutU1zH 29HS3Ha1SLI5i/Lh2OApF39dU1my4gToxuwRcVXeG8AzGFcxgZ6IyDe9rzBvmZmY xnhzRlCn8K6Zf7cIHs1BhrV2B8qZ88D5lba8L3AoEu5Jy33Lq9m9P4WpoplGSPrk 9VBaQdUnZ8pT/vUyI4RYdwVJPGK1kXzm1JZASCTwf6X/IckgbVKNIEqbXOIHvU0q ilst4UEOY8ojn0AcY9heY9aXoU/bid4N7I40vF5rg+kCW4przIR3XB1nR8VJHheo X0uVLOJmGKktcMz46SB8HGmgBTghPOBsyPEpskzmShhk3anSbKocA== From: Jaehoon Kim To: devel@lists.libvirt.org Subject: [PATCH 1/6] conf: add iothread poll-weight XML support Date: Wed, 22 Jul 2026 13:52:10 -0500 Message-ID: <20260722185215.743245-2-jhkim@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260722185215.743245-1-jhkim@linux.ibm.com> References: <20260722185215.743245-1-jhkim@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: Qwi6bZMwzkKVNULjjYWAECdOdNpLiaz6 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDE4NCBTYWx0ZWRfXyTuXftvEDBRN 4xxXJWXDbGhwJRPmcm9D2qmQDqYA7Lrx9oL1WC4D8tVi8hxZXpi/RwnqgNW1VanjAvRHB/GAJJq wjESC2IY8nwgU8p3aCGFi3ujUTPv3sIIu/rVZTU/weGGmGogSxN7bJmzW8B/0vXT5OBVac3xQiC qOVDdreGK6wUzAgPFO8gsId6jYMLlRnAVkj3E9S7Vroqjbp9Zl4ufkk3AeA02gwXeAl4wWyhgNo rafhYlhX+4F61gC0YsMpH2jYKedR7pQ968p8fRDA2SDyrVZPE4GpZoXDQh+pqszJoaYAYdxl2Mc A3JHXZy3NpybaccGhpkVaDY/b1Z5SaD7sHKSzyDAuXsya2wjgvMczZcDI9Z/X8g9y7xB4wZDq3c JEOR9WN+xfOBan3t3mQoawS1LUjrTPG9e1hTaYNkAf29CRqPszBRKJeTUtsgMbKdN4g9qLOcJXf Cut95/TuqSYV/MdcaTw== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDE4NCBTYWx0ZWRfX2oNVsynHFevU FwFRXdSfM5Aw97kUU2agHXDVe3UK1lIaZTW50HgOsY8SCK3XaUhVrueE+DraUl1v2USCaNaaan8 nIfvfagOFg5VB7K/fHScUHW/JNtqoqU= X-Proofpoint-GUID: Qwi6bZMwzkKVNULjjYWAECdOdNpLiaz6 X-Authority-Analysis: v=2.4 cv=SM5ykuvH c=1 sm=1 tr=0 ts=6a611164 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=ZxNuJSH-JvQX4jTvl6gA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_05,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 lowpriorityscore=0 bulkscore=0 suspectscore=0 adultscore=0 spamscore=0 malwarescore=0 priorityscore=1501 phishscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220184 Message-ID-Hash: J257ERFA537KC6U4QULCTMXFV3WEJNQ5 X-Message-ID-Hash: J257ERFA537KC6U4QULCTMXFV3WEJNQ5 X-MailFrom: jhkim@linux.ibm.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 CC: fiuczy@linux.ibm.com, shalini@linux.ibm.com, Jaehoon Kim 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: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1784746511558158501 Content-Type: text/plain; charset="utf-8" Add support for the iothread poll-weight XML attribute. Store the value in the internal iothread definition, parse it from the element, and format it back into domain XML. Also extend the schema to accept the new attribute and validate the accepted range of [0, 63]. Signed-off-by: Jaehoon Kim --- src/conf/domain_conf.c | 14 +++++++++++++- src/conf/domain_conf.h | 2 ++ src/conf/schemas/domaincommon.rng | 7 +++++++ tests/genericxml2xmlindata/iothreadids.xml | 2 +- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 17c4a57cd8..f69317c36f 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -16984,7 +16984,9 @@ virDomainDefParseBootXML(xmlXPathContextPtr ctxt, * * 4 * - * + * + * + * * * * @@ -17032,6 +17034,12 @@ virDomainIOThreadIDDefParseXML(xmlNodePtr node) return NULL; =20 iothrid->set_poll_shrink =3D rc =3D=3D 1; + + if ((rc =3D virXMLPropUInt(pollNode, "weight", 10, VIR_XML_PROP_NO= NE, + &iothrid->poll_weight)) < 0) + return NULL; + + iothrid->set_poll_weight =3D rc =3D=3D 1; } =20 return g_steal_pointer(&iothrid); @@ -29011,6 +29019,7 @@ virDomainDefIothreadShouldFormat(const virDomainDef= *def) def->iothreadids[i]->set_poll_max_ns || def->iothreadids[i]->set_poll_grow || def->iothreadids[i]->set_poll_shrink || + def->iothreadids[i]->set_poll_weight || def->iothreadids[i]->thread_pool_min >=3D 0 || def->iothreadids[i]->thread_pool_max >=3D 0) return true; @@ -29084,6 +29093,9 @@ virDomainDefIOThreadsFormat(virBuffer *buf, if (iothread->set_poll_shrink) virBufferAsprintf(&pollAttrBuf, " shrink=3D'%llu'", iothre= ad->poll_shrink); =20 + if (iothread->set_poll_weight) + virBufferAsprintf(&pollAttrBuf, " weight=3D'%u'", iothread= ->poll_weight); + virXMLFormatElement(&iothreadChildBuf, "poll", &pollAttrBuf, N= ULL); =20 virXMLFormatElement(&childrenBuf, "iothread", &attrBuf, &iothr= eadChildBuf); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 0c6c79c413..eebe55a093 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2902,6 +2902,8 @@ struct _virDomainIOThreadIDDef { bool set_poll_grow; unsigned long long poll_shrink; bool set_poll_shrink; + unsigned int poll_weight; + bool set_poll_weight; =20 int thread_pool_min; int thread_pool_max; diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index 121e4e06a6..36743f81e4 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -990,6 +990,13 @@ + + + + 63 + + + diff --git a/tests/genericxml2xmlindata/iothreadids.xml b/tests/genericxml2= xmlindata/iothreadids.xml index 671a467295..e9814854eb 100644 --- a/tests/genericxml2xmlindata/iothreadids.xml +++ b/tests/genericxml2xmlindata/iothreadids.xml @@ -7,7 +7,7 @@ 1 - + --=20 2.54.0 From nobody Sat Jul 25 07:59:52 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; 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 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=reject dis=none) header.from=linux.ibm.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1784746608156211.29490041263716; Wed, 22 Jul 2026 11:56:48 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 8801A41DBC; Wed, 22 Jul 2026 14:56:46 -0400 (EDT) Received: from [172.19.199.10] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 2EDFA41CAA; Wed, 22 Jul 2026 14:52:50 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 3718E419D2; Wed, 22 Jul 2026 14:52:24 -0400 (EDT) Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (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 611024182F for ; Wed, 22 Jul 2026 14:52:23 -0400 (EDT) Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MIBnWF704737 for ; Wed, 22 Jul 2026 18:52:22 GMT Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fg7abkwe6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 22 Jul 2026 18:52:22 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 66MInaD0023288 for ; Wed, 22 Jul 2026 18:52:21 GMT Received: from smtprelay04.dal12v.mail.ibm.com ([172.16.1.6]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fgm6w8t35-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 22 Jul 2026 18:52:21 +0000 (GMT) Received: from smtpav02.wdc07v.mail.ibm.com (smtpav02.wdc07v.mail.ibm.com [10.39.53.229]) by smtprelay04.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 66MIqJKC3539502 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Jul 2026 18:52:19 GMT Received: from smtpav02.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 987E858067; Wed, 22 Jul 2026 18:52:19 +0000 (GMT) Received: from smtpav02.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 381295805C; Wed, 22 Jul 2026 18:52:19 +0000 (GMT) Received: from IBM-GLTZVH3.atx-us.ibm.com (unknown [9.16.36.179]) by smtpav02.wdc07v.mail.ibm.com (Postfix) with ESMTP; Wed, 22 Jul 2026 18:52:19 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.2 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=fZep+JkzOUH+VBJrs r5DUUccLHCshvYdAHkhGWQEH2g=; b=kK/yDYJjP3f0DNOBBRtwBauuDaoOl+HXf mCHzlu6PdJrYVB+X2QQjhd0uBxSDgxewKeA8mYk9Cxh01jNyiPSkCiDXMe+17EFG 1jyARapTuAZfUifV9MlAgI+1qqOOpDeirNk0Zq9L+w67o+P/JTYGqCp3AZjiv5vI dwORBaLBvBniI0kNdhFoqKSJTeSgOxGsyxiR+R5aKFsl4dFoSQE2qXJzuYwyvx7X DiD2wt1dUQyv4OClXks8JlwGQayjENWwH5NWgPLTbdGd354a8s7wkQBKI26tOa1L NrrXCC4XFNPW04H3fu4q35bhx7GiAQPowMlTbQqH9gjiJweeJzxYA== From: Jaehoon Kim To: devel@lists.libvirt.org Subject: [PATCH 2/6] qemu: capabilities: add capability for iothread poll-weight Date: Wed, 22 Jul 2026 13:52:11 -0500 Message-ID: <20260722185215.743245-3-jhkim@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260722185215.743245-1-jhkim@linux.ibm.com> References: <20260722185215.743245-1-jhkim@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDE4NCBTYWx0ZWRfX9vG7HVFhqIO5 DF09G/lXyK8mT0Qx89rFlLOmyg6bbB9Bg8lGrqf+R323vZFJob2pKelU2JAceidCM/qqp7pKu+i RiZIRXuFG+K2zLFH9zgj+ouSdhAr1um7jeq5YaY8UAa1NDgiLdLqd79xtqdxFWPeDoafnP56/Og 9QR5kA0+W0cTWJfFcGnPHp7s/azF1rXh2p9T6fo9pyCaFoIGAZV8VFzGFHvFca9lkyUxuxOAhYW GsgWH3Dqtb59BGEgVvlK0Hl2GZaMpIeSg7PZgGSE17dhaqx+hvZYC2x5tsxtaF5ZWJT6eNJ5u3q NugPxJ5GIUimuRgwg1vjGa1GT6fSAtEQnqSlFQHSX6GOtiSdIp3rHhspPCDkDAiWtAdThy2biCB EzX4oPVoiE/HKsvCQ8h/ZK3j88+Cn2M7EJZwq/+lpdnKSbsuJQO/dAu2LIvziIVip+nVSBbOYCC MitGOcBbnUhc3Erg0fA== X-Authority-Analysis: v=2.4 cv=F7ZnsKhN c=1 sm=1 tr=0 ts=6a611166 cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=G0atoXdAGNRzJAzzbwYA:9 X-Proofpoint-ORIG-GUID: 9iOqq8GYUcbS7wN0FLbgy_Dlo_iAobdO X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDE4NCBTYWx0ZWRfX/xwFYpqAjEfY aLJNe7u22cQpTBdNiw+jaFhEES8xzq8ed3mWgM4Zpg97qsKDEl7BD2MD3KwARUKYUohD81mbz4g 8RJs42qRnHEjT4BjDNldgv+DWS9cNfs= X-Proofpoint-GUID: 9iOqq8GYUcbS7wN0FLbgy_Dlo_iAobdO X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_05,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 bulkscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 lowpriorityscore=0 suspectscore=0 malwarescore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220184 Message-ID-Hash: 234EAVFGJKMQUGUBS6RMT4QI2OOLP5IN X-Message-ID-Hash: 234EAVFGJKMQUGUBS6RMT4QI2OOLP5IN X-MailFrom: jhkim@linux.ibm.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 CC: fiuczy@linux.ibm.com, shalini@linux.ibm.com, Jaehoon Kim 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: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1784746610142158500 Content-Type: text/plain; charset="utf-8" Add a capability flag for the iothread poll-weight property. Detect support for the property from the QMP schema so that libvirt can conditionally expose and use poll-weight only with QEMU binaries that support it. Signed-off-by: Jaehoon Kim --- src/qemu/qemu_capabilities.c | 2 ++ src/qemu/qemu_capabilities.h | 1 + tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_11.1.0_x86_64.xml | 1 + 4 files changed, 5 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index ebea050453..971663badc 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -768,6 +768,7 @@ VIR_ENUM_IMPL(virQEMUCaps, /* 495 */ "blockdev-mirror.target-is-zero", /* QEMU_CAPS_BLOCKDEV_MIRR= OR_TARGET_IS_ZERO */ "object-monitor-qmp", /* QEMU_CAPS_OBJECT_MONITOR_QMP */ + "iothread.poll-weight", /* QEMU_CAPS_IOTHREAD_POLL_WEIGHT */ ); =20 =20 @@ -1671,6 +1672,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsQMPSc= hemaQueries[] =3D { { "netdev_add/arg-type/+stream/reconnect-ms", QEMU_CAPS_NETDEV_STREAM_= RECONNECT_MILISECONDS }, { "object-add/arg-type/+sev-guest/kernel-hashes", QEMU_CAPS_SEV_GUEST_= KERNEL_HASHES }, { "object-add/arg-type/+iothread/thread-pool-max", QEMU_CAPS_IOTHREAD_= THREAD_POOL_MAX }, + { "object-add/arg-type/+iothread/poll-weight", QEMU_CAPS_IOTHREAD_POLL= _WEIGHT }, { "query-block/arg-type/flat", QEMU_CAPS_QUERY_BLOCK_FLAT }, { "query-display-options/ret-type/+egl-headless/rendernode", QEMU_CAPS= _EGL_HEADLESS_RENDERNODE }, { "query-display-options/ret-type/+sdl", QEMU_CAPS_SDL }, diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index daec874a59..8f83eb8acd 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -742,6 +742,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for = syntax-check */ /* 495 */ QEMU_CAPS_BLOCKDEV_MIRROR_TARGET_IS_ZERO, /* 'blockdev-mirror' support= s 'target-is-zero' */ QEMU_CAPS_OBJECT_MONITOR_QMP, /* 'monitor-qmp' -object */ + QEMU_CAPS_IOTHREAD_POLL_WEIGHT, /* -object iothread.poll-weight */ =20 QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml b/tests/qem= ucapabilitiesdata/caps_11.1.0_aarch64.xml index b45dd83889..6c5c1770ad 100644 --- a/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_11.1.0_aarch64.xml @@ -189,6 +189,7 @@ + 11000090 61700287 v11.1.0-rc0 diff --git a/tests/qemucapabilitiesdata/caps_11.1.0_x86_64.xml b/tests/qemu= capabilitiesdata/caps_11.1.0_x86_64.xml index 7a4396c82b..98a6a7e083 100644 --- a/tests/qemucapabilitiesdata/caps_11.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_11.1.0_x86_64.xml @@ -223,6 +223,7 @@ + 11000090 43100287 v11.1.0-rc0 --=20 2.54.0 From nobody Sat Jul 25 07:59:52 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; 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 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=reject dis=none) header.from=linux.ibm.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1784746870929982.3619800748012; Wed, 22 Jul 2026 12:01:10 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id B9F5B41835; Wed, 22 Jul 2026 15:01:09 -0400 (EDT) Received: from [172.19.199.10] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id D553743E01; Wed, 22 Jul 2026 14:52:59 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id E46A941B95; Wed, 22 Jul 2026 14:52:26 -0400 (EDT) Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (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 BC0C54187F for ; Wed, 22 Jul 2026 14:52:24 -0400 (EDT) Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66MICR303021359 for ; Wed, 22 Jul 2026 18:52:23 GMT Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fg77akuxp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 22 Jul 2026 18:52:23 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 66MIntSg023423 for ; Wed, 22 Jul 2026 18:52:22 GMT Received: from smtprelay05.dal12v.mail.ibm.com ([172.16.1.7]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fgm6w8t38-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 22 Jul 2026 18:52:22 +0000 (GMT) Received: from smtpav02.wdc07v.mail.ibm.com (smtpav02.wdc07v.mail.ibm.com [10.39.53.229]) by smtprelay05.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 66MIqKf832637440 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 22 Jul 2026 18:52:21 GMT Received: from smtpav02.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C737D5806A; Wed, 22 Jul 2026 18:52:20 +0000 (GMT) Received: from smtpav02.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5BD325805D; Wed, 22 Jul 2026 18:52:20 +0000 (GMT) Received: from IBM-GLTZVH3.atx-us.ibm.com (unknown [9.16.36.179]) by smtpav02.wdc07v.mail.ibm.com (Postfix) with ESMTP; Wed, 22 Jul 2026 18:52:20 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.2 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=kPy5i5KP/omYRjvEg 5FnjevhDs3w7CtugnsqCD1/8Nw=; b=OPILt02jpGAy/G6g+5QpjRWsSADm8AETQ BCB1G0ra+OZxqwHQoV2nAx99PVEIvDNl3SvXm1TFPyGz52eqAYdjNJx7dEJBlXFO nbvmQEgJ8M61edny959W9s0MS5EBzNefCBnEf9K5VYo+wbfUQBOJO5/R9wv1rDAD msrrZPqLJwxo5ApcRRjDnYdAtg0vXtD3XI7lu/pIy+OtxNgvyg7nsMddMM4dbATc g4xfrUvS5p88QyAknaoD33b2EmDQcfnT0+1yhN/WdHb9usIeTm26z4Ow05M64pQ4 IkoKff5UmeUTF/VmAQE1umUnAMo7/jFeTNoA5fz65bA2zzbTO5JPg== From: Jaehoon Kim To: devel@lists.libvirt.org Subject: [PATCH 3/6] qemu: support iothread poll-weight Date: Wed, 22 Jul 2026 13:52:12 -0500 Message-ID: <20260722185215.743245-4-jhkim@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260722185215.743245-1-jhkim@linux.ibm.com> References: <20260722185215.743245-1-jhkim@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: LED2TEpQrUCLM4MqqaVvHP4uqlMe9JJX X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDE4NCBTYWx0ZWRfXw4towOGGsyJ4 gAjFaCj/F4z2hMpMopfQrSw+a0maKDdjFAyhiWRsFcn/3KtebqDXTJbFdRhHcTIRaDFyETnXApJ Uku+LiUJdWcvQdTk5I3GdE5h5bFwcxU= X-Proofpoint-GUID: LED2TEpQrUCLM4MqqaVvHP4uqlMe9JJX X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDE4NCBTYWx0ZWRfX7xLGfjzAK9K/ k85hg9GjEIu1uVxk7q/FoxMA5aZYHLTQO3B4/XFGii0ga0zV80CLt/4Tn0pGRuDuy+W8Osew6zk 8BFB2gJtynyJKhiDhzEQ0opZfX3I61IEQg5J/NkTSw6uQkll2ilEmukL5l4Jl8kAxG0yEh0TAsM I2lylCtunv1SxOu06w5+L+kLMBKPB9uD/yUSqzLUfv42N8itKwLoLbSlhhWm7y3BldriyCRvKLn fuqnRNHMEgViAJtMsYU1x8yq0klkWAPWeYQDFhgvy/krvp2fSimknniAD24G/Wrn3r29nsW6+99 ZWqFEVrUl1Vm+ffEpOsnSK8xIFiP4isX1bV5gWv1Jaj0bz/iqAwYlAXiyWZNOwNd8R4CR5Y+T2D r3THkLDFNkaAjOfsa3LVxYG0gNbOeQs0WsxxfaTKdEoJ6ognRO8tEIUV/r66pKYLM0Nb2WgsNPV bjeVlJBO5nYhIASe+NQ== X-Authority-Analysis: v=2.4 cv=K7AS2SWI c=1 sm=1 tr=0 ts=6a611167 cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VnNF1IyMAAAA:8 a=rwZ39xYBmleNAV4O5MEA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_05,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 suspectscore=0 bulkscore=0 clxscore=1015 priorityscore=1501 spamscore=0 phishscore=0 malwarescore=0 adultscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220184 Message-ID-Hash: 2JYTIVM5HMJQTW67IJBAHVHOGR32H4IA X-Message-ID-Hash: 2JYTIVM5HMJQTW67IJBAHVHOGR32H4IA X-MailFrom: jhkim@linux.ibm.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 CC: fiuczy@linux.ibm.com, shalini@linux.ibm.com, Jaehoon Kim 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: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1784746871916158500 Content-Type: text/plain; charset="utf-8" Use the configured iothread poll-weight value when interacting with QEMU. This wires the new setting into command line generation, monitor data parsing, driver-side parameter handling, and capability-based validation. Remove the break from the iothread validation loop because the loop now also checks poll-weight on every iothread. Signed-off-by: Jaehoon Kim --- include/libvirt/libvirt-domain.h | 26 +++++++++ src/qemu/qemu_command.c | 18 +++++- src/qemu/qemu_driver.c | 38 ++++++++++++ src/qemu/qemu_monitor.h | 2 + src/qemu/qemu_monitor_json.c | 18 ++++++ src/qemu/qemu_validate.c | 10 +++- ...othreads-ids-poll-weight.x86_64-11.0.0.err | 1 + ...threads-ids-poll-weight.x86_64-latest.args | 40 +++++++++++++ ...othreads-ids-poll-weight.x86_64-latest.xml | 58 +++++++++++++++++++ .../iothreads-ids-poll-weight.xml | 58 +++++++++++++++++++ tests/qemuxmlconftest.c | 2 + 11 files changed, 267 insertions(+), 4 deletions(-) create mode 100644 tests/qemuxmlconfdata/iothreads-ids-poll-weight.x86_64-= 11.0.0.err create mode 100644 tests/qemuxmlconfdata/iothreads-ids-poll-weight.x86_64-= latest.args create mode 100644 tests/qemuxmlconfdata/iothreads-ids-poll-weight.x86_64-= latest.xml create mode 100644 tests/qemuxmlconfdata/iothreads-ids-poll-weight.xml diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-dom= ain.h index 5b67f8f897..f49aa1c136 100644 --- a/include/libvirt/libvirt-domain.h +++ b/include/libvirt/libvirt-domain.h @@ -2748,6 +2748,22 @@ int virDomainDelIOThread(virDomainP= tr domain, */ # define VIR_DOMAIN_IOTHREAD_POLL_SHRINK "poll_shrink" =20 +/** + * VIR_DOMAIN_IOTHREAD_POLL_WEIGHT: + * + * This provides a shift value for the adaptive polling algorithm to contr= ol + * how much the most recent event interval affects the next polling durati= on + * calculation. Larger values decrease the weight of the current interval, + * enabling more gradual adjustments. Valid range is [0, 63]. A value of 0 + * lets the hypervisor select a default weight (typically 3, meaning the + * current interval contributes approximately 1/8 to the weighted average). + * + * Accepted type is VIR_TYPED_PARAM_UINT. + * + * Since: 12.6.0 + */ +# define VIR_DOMAIN_IOTHREAD_POLL_WEIGHT "poll_weight" + /** * VIR_DOMAIN_IOTHREAD_THREAD_POOL_MIN: * @@ -4330,6 +4346,16 @@ struct _virDomainStatsRecord { */ # define VIR_DOMAIN_STATS_IOTHREAD_SUFFIX_POLL_SHRINK ".poll-shrink" =20 +/** + * VIR_DOMAIN_STATS_IOTHREAD_SUFFIX_POLL_WEIGHT: + * + * Polling weight factor as an unsigned int. This shift value controls how + * much the most recent event interval affects adaptive polling calculatio= ns. + * A 0 (zero) indicates the hypervisor's default weight is used. + * + * Since: 12.6.0 + */ +# define VIR_DOMAIN_STATS_IOTHREAD_SUFFIX_POLL_WEIGHT ".poll-weight" =20 /** * VIR_DOMAIN_STATS_MEMORY_BANDWIDTH_MONITOR_COUNT: diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 95e2ea9a6b..b351059fc1 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7659,7 +7659,8 @@ qemuBuildMemCommandLine(virCommand *cmd, =20 static int qemuBuildIOThreadCommandLine(virCommand *cmd, - const virDomainDef *def) + const virDomainDef *def, + virQEMUCaps *qemuCaps) { size_t i; =20 @@ -7694,6 +7695,19 @@ qemuBuildIOThreadCommandLine(virCommand *cmd, NULL) < 0) return -1; =20 + if (iothread->set_poll_weight) { + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_IOTHREAD_POLL_WEIGHT))= { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("poll-weight is not supported by this QEM= U binary")); + return -1; + } + + if (virJSONValueObjectAdd(&props, + "u:poll-weight", iothread->poll_weig= ht, + NULL) < 0) + return -1; + } + if (qemuBuildObjectCommandlineFromJSON(cmd, props) < 0) return -1; } @@ -10903,7 +10917,7 @@ qemuBuildCommandLine(virDomainObj *vm, if (qemuBuildSmpCommandLine(cmd, def, qemuCaps) < 0) return NULL; =20 - if (qemuBuildIOThreadCommandLine(cmd, def) < 0) + if (qemuBuildIOThreadCommandLine(cmd, def, qemuCaps) < 0) return NULL; =20 if (qemuBuildThrottleGroupCommandLine(cmd, def) < 0) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index bdc0cff66a..1afd6e83ba 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -5261,6 +5261,11 @@ qemuDomainHotplugModIOThreadIDDef(virDomainIOThreadI= DDef *def, def->set_poll_shrink =3D true; } =20 + if (mondef.set_poll_weight) { + def->poll_weight =3D mondef.poll_weight; + def->set_poll_weight =3D true; + } + if (mondef.set_thread_pool_min) def->thread_pool_min =3D mondef.thread_pool_min; =20 @@ -5353,6 +5358,11 @@ qemuDomainHotplugDelIOThread(virDomainObj *vm, * necessary. If a 0 (zero) value is provided, QEMU resets the polling * interval to 0 (zero) allowing the poll-grow to manipulate the time. * + * - "poll-weight" - weight shift value used by the adaptive polling algor= ithm + * to determine how much the most recent event interval influences the + * next interval calculation. Accepted range is [0, 63]. If a 0 (zero) + * value is provided, QEMU uses its default weight. + * * QEMU keeps track of the polling time elapsed and may grow or shrink the * its polling interval based upon its heuristic algorithm. It is possible * that calculations determine that it has found a "sweet spot" and no @@ -5388,6 +5398,20 @@ qemuDomainIOThreadParseParams(virTypedParameterPtr p= arams, if (rc =3D=3D 1) iothread->set_poll_shrink =3D true; =20 + if ((rc =3D virTypedParamsGetUInt(params, nparams, + VIR_DOMAIN_IOTHREAD_POLL_WEIGHT, + &iothread->poll_weight)) < 0) + return -1; + if (rc =3D=3D 1) { + if (iothread->poll_weight > 63) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("poll-weight value %1$u is out of range [0, 6= 3]"), + iothread->poll_weight); + return -1; + } + iothread->set_poll_weight =3D true; + } + if ((rc =3D virTypedParamsGetInt(params, nparams, VIR_DOMAIN_IOTHREAD_THREAD_POOL_MIN, &iothread->thread_pool_min)) < 0) @@ -5586,6 +5610,13 @@ qemuDomainChgIOThread(virQEMUDriver *driver, if (qemuDomainIOThreadValidate(iothreaddef, iothread, true) < = 0) goto endjob; =20 + if (iothread.set_poll_weight && + !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_IOTHREAD_POLL_WE= IGHT)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("poll-weight is not supported by this QEM= U binary")); + goto endjob; + } + if (qemuDomainHotplugModIOThread(vm, iothread) < 0) goto endjob; =20 @@ -5716,6 +5747,8 @@ qemuDomainSetIOThreadParams(virDomainPtr dom, VIR_TYPED_PARAM_UNSIGNED, VIR_DOMAIN_IOTHREAD_POLL_SHRINK, VIR_TYPED_PARAM_UNSIGNED, + VIR_DOMAIN_IOTHREAD_POLL_WEIGHT, + VIR_TYPED_PARAM_UINT, VIR_DOMAIN_IOTHREAD_THREAD_POOL_MIN, VIR_TYPED_PARAM_INT, VIR_DOMAIN_IOTHREAD_THREAD_POOL_MAX, @@ -18380,6 +18413,11 @@ qemuDomainGetStatsIOThread(virQEMUDriver *driver G= _GNUC_UNUSED, VIR_DOMAIN_STATS_IOTHREAD_PREFIX = "%u" VIR_DOMAIN_STATS_IOTHREAD_SUFFIX_POLL_SHRINK, iothreads[i]->iothread_id); } + if (iothreads[i]->set_poll_weight) { + virTypedParamListAddUInt(params, iothreads[i]->poll_weight, + VIR_DOMAIN_STATS_IOTHREAD_PREFIX "%u"= VIR_DOMAIN_STATS_IOTHREAD_SUFFIX_POLL_WEIGHT, + iothreads[i]->iothread_id); + } } =20 for (i =3D 0; i < niothreads; i++) diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index c2afb580e4..e73be4e263 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1583,11 +1583,13 @@ struct _qemuMonitorIOThreadInfo { unsigned long long poll_max_ns; unsigned long long poll_grow; unsigned long long poll_shrink; + unsigned int poll_weight; int thread_pool_min; int thread_pool_max; bool set_poll_max_ns; bool set_poll_grow; bool set_poll_shrink; + bool set_poll_weight; bool set_thread_pool_min; bool set_thread_pool_max; }; diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 21f4d613b7..c88f74c10b 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -7202,6 +7202,11 @@ qemuMonitorJSONGetIOThreads(qemuMonitor *mon, virJSONValueObjectGetNumberUlong(child, "poll-shrink", &info->poll_shrink) =3D=3D 0) info->poll_valid =3D true; + + /* poll-weight is optional, only present on newer QEMU */ + if (virJSONValueObjectGetNumberUint(child, "poll-weight", + &info->poll_weight) =3D=3D 0) + info->set_poll_weight =3D true; } =20 *niothreads =3D n; @@ -7243,6 +7248,19 @@ qemuMonitorJSONSetIOThread(qemuMonitor *mon, =20 #undef VIR_IOTHREAD_SET_PROP_UL =20 +#define VIR_IOTHREAD_SET_PROP_UINT(propName, propVal) \ + if (iothreadInfo->set_##propVal) { \ + memset(&prop, 0, sizeof(prop)); \ + prop.type =3D QEMU_MONITOR_OBJECT_PROPERTY_UINT; \ + prop.val.ui =3D iothreadInfo->propVal; \ + if (qemuMonitorJSONSetObjectProperty(mon, path, propName, &prop) <= 0) \ + return -1; \ + } + + VIR_IOTHREAD_SET_PROP_UINT("poll-weight", poll_weight); + +#undef VIR_IOTHREAD_SET_PROP_UINT + if (iothreadInfo->set_thread_pool_min && iothreadInfo->set_thread_pool_max) { int curr_max =3D -1; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 439d4b1916..5a770a800f 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -500,9 +500,15 @@ qemuValidateDomainDefIOThreads(const virDomainDef *def, for (i =3D 0; i < def->niothreadids; i++) { virDomainIOThreadIDDef *iothread =3D def->iothreadids[i]; =20 - if (iothread->thread_pool_min !=3D -1 || iothread->thread_pool_max= !=3D -1) { + if (iothread->thread_pool_min !=3D -1 || iothread->thread_pool_max= !=3D -1) needsThreadPoolCap =3D true; - break; + + /* poll-weight requires QEMU_CAPS_IOTHREAD_POLL_WEIGHT */ + if (iothread->set_poll_weight && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_IOTHREAD_POLL_WEIGHT)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("poll-weight is not supported by this QEMU bi= nary")); + return -1; } } =20 diff --git a/tests/qemuxmlconfdata/iothreads-ids-poll-weight.x86_64-11.0.0.= err b/tests/qemuxmlconfdata/iothreads-ids-poll-weight.x86_64-11.0.0.err new file mode 100644 index 0000000000..1cc4109f27 --- /dev/null +++ b/tests/qemuxmlconfdata/iothreads-ids-poll-weight.x86_64-11.0.0.err @@ -0,0 +1 @@ +unsupported configuration: poll-weight is not supported by this QEMU binary diff --git a/tests/qemuxmlconfdata/iothreads-ids-poll-weight.x86_64-latest.= args b/tests/qemuxmlconfdata/iothreads-ids-poll-weight.x86_64-latest.args new file mode 100644 index 0000000000..d73060ad46 --- /dev/null +++ b/tests/qemuxmlconfdata/iothreads-ids-poll-weight.x86_64-latest.args @@ -0,0 +1,40 @@ +LC_ALL=3DC \ +PATH=3D/bin \ +HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \ +USER=3Dtest \ +LOGNAME=3Dtest \ +XDG_DATA_HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=3DQEMUGuest1,debug-threads=3Don \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/va= r/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine q35,usb=3Doff,dump-guest-core=3Doff,memory-backend=3Dpc.ram,acpi= =3Doff \ +-accel tcg \ +-cpu qemu64 \ +-m size=3D219136k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}'= \ +-overcommit mem-lock=3Doff \ +-smp 4,sockets=3D4,cores=3D1,threads=3D1 \ +-object '{"qom-type":"iothread","id":"iothread1","poll-max-ns":123000,"pol= l-grow":456,"poll-shrink":789,"poll-weight":3}' \ +-object '{"qom-type":"iothread","id":"iothread2","poll-weight":0}' \ +-object '{"qom-type":"iothread","id":"iothread3","poll-max-ns":32000,"poll= -weight":63}' \ +-object '{"qom-type":"iothread","id":"iothread4","poll-max-ns":32000,"poll= -grow":2,"poll-shrink":2}' \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=3Dcharmonitor,fd=3D@mon-fd@,server=3Don,wait=3Doff \ +-object '{"qom-type":"monitor-qmp","id":"monitor","chardev":"charmonitor"}= ' \ +-rtc base=3Dutc \ +-no-shutdown \ +-boot strict=3Don \ +-device '{"driver":"pcie-root-port","port":8,"chassis":1,"id":"pci.1","bus= ":"pcie.0","multifunction":true,"addr":"0x1"}' \ +-device '{"driver":"pcie-root-port","port":9,"chassis":2,"id":"pci.2","bus= ":"pcie.0","addr":"0x1.0x1"}' \ +-device '{"driver":"qemu-xhci","id":"usb","bus":"pci.1","addr":"0x0"}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-global ICH9-LPC.noreboot=3Doff \ +-watchdog-action reset \ +-sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,resource= control=3Ddeny \ +-msg timestamp=3Don diff --git a/tests/qemuxmlconfdata/iothreads-ids-poll-weight.x86_64-latest.= xml b/tests/qemuxmlconfdata/iothreads-ids-poll-weight.x86_64-latest.xml new file mode 100644 index 0000000000..1134d9ffdd --- /dev/null +++ b/tests/qemuxmlconfdata/iothreads-ids-poll-weight.x86_64-latest.xml @@ -0,0 +1,58 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219136 + 219136 + 4 + 4 + + + + + + + + + + + + + + + + hvm + + + + qemu64 + + + destroy + restart + destroy + + /usr/bin/qemu-system-x86_64 + + + + +
+ + + + +
+ + +
+ + +
+ + + +