From nobody Mon Feb 9 09:43:28 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=pass; 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1770450903; cv=none; d=zohomail.com; s=zohoarc; b=JKhG03AYUxaLBvaLa4TL3alyuP51zvovu9u9LNulo9S9cZG6aO5/vCfuU669eW5PwkEqzl2M/o9PqgWJHr2j5e9tfEh3thAK4bifTlrQeRX5JbMM96Xsa9F8ht9vwgw1q7OmvN3fFFQA+oAhpNiuynIbt7Qe6gzzZ5B8wH0lnXE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770450903; h=Content-Transfer-Encoding:Cc:Cc: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:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=yCi7srxjxP/q1ulSGcb4VdWmKhwpJ8Ou3TorRPJvpok=; b=XWP2BSQWr7rjDingsXbKB8e7hShuyAchcHhY47oYo2OldEMP8GmcNMrNgbWTRU7WSydLdggUhMkc0eps2sGoHNkFEQ6l8Q9Lucuxeo1bvYMd/Rjiu1GqGxrelC+unQO4QOPrXE60lUE2+zwoh/NeCewMOd9l5g8wKGvkMMbacJM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1770450903945935.5613815935704; Fri, 6 Feb 2026 23:55:03 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id F24CC3FA2E; Sat, 7 Feb 2026 02:55:02 -0500 (EST) Received: from [172.19.199.6] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 5594E41D9B; Sat, 7 Feb 2026 02:53:00 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 60612417D6; Sat, 7 Feb 2026 02:52:52 -0500 (EST) Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) (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 A44313F87A for ; Sat, 7 Feb 2026 02:52:50 -0500 (EST) Received: by mail-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-6581234d208so2400088a12.3 for ; Fri, 06 Feb 2026 23:52:50 -0800 (PST) Received: from tulp.my.domain (2001-1c02-1a15-3000-c218-03ff-feb5-6cc4.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:c218:3ff:feb5:6cc4]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8edacaffeesm153634466b.38.2026.02.06.23.52.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Feb 2026 23:52:47 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,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=gmail.com; s=20230601; t=1770450769; x=1771055569; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yCi7srxjxP/q1ulSGcb4VdWmKhwpJ8Ou3TorRPJvpok=; b=TjsNGVGfVl99Lu1X6zn+p7AzQi5AfB0VjSKFusvS4gV8sbaEPhSGBOyWbIp1pHsmzu b0Emnfl1OGQCzMvBdcp8BMIpA163gxr3ZsQ4BulZUKswXn6+REukx5cpSRQBeXEauSGY yBG78hwpAANMY9WT9p4F9lUj+9sJcBvRLBeIMKPFdNzv5tKHZfTlKm8OgbKrSW0rMiQJ pz8PnA5HAltsQ52SGoBeY3AMJQFQ98ig3AcxhExWtb4LaQw0viUV2VqCgvB5ZeK3zuQL WK4uOZiy6xn9vEEt3u2b78cuDwpO+Rw1YdjpW4jKEAMZkQW6qTTWosueWny4SSiX8DuB 1qaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770450769; x=1771055569; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=yCi7srxjxP/q1ulSGcb4VdWmKhwpJ8Ou3TorRPJvpok=; b=JUlnHoItkSkC6ASPqI+RDS21QUiCHSwb3qNxa5+Mb2FFhrtvqvgkkNei+QJMdmxzKY Jn543fbPdt5MYYMOLxLsAlR3NKnL1VqvGYZmJAsOea8WMasVygl43F1bvSNEd0wAG07B TMQreQP3dgUxPVQE8Oy2En2x4Oc9phvM4oiVsFZ2DIDLwKIWVY9IhnmHkDJUrpuDkFc+ VFtVE9fXX4sWmlBLcflFuTpDOdoKX1/ep3omlSh8kM1iU8PjwShTIxbLKXoMrQGIJQke YcAkIM9hnUs1pTdLHdB3xq6e7JdJs+vCc9bD1xgtTz2bY9eM9NWh1p9yf7sv14YgZPcb 70Fw== X-Gm-Message-State: AOJu0YyowKjNWN3hMRJ2qse3DMbUjuvHL/O/u8AVjfpHryuEVjQp6LEk NERRbKB+4SS2BOVfUh1Sl1QNJDpGlaD6E69dvWwtekVM7vZw59G3zdROWczehM19 X-Gm-Gg: AZuq6aI9if9VMTHfCgdmTcgoT7DLnFg3Aaqhq9H6VKQOq/QpRroCUjruNcL+feeD0Yl y8eA1bQTG2fJnBg/bi1mSrtoPBXJLKhSR8Ai0VlFk/a5kBKinin0Snjo9lXWBwpzv3ZkPIQlQcf kTzPnmJwa4AnOG37iRLhT41Va2rIi3KIhZtuGP9pxqjesoBSl2YqKHPDAWS6Nxzx/NiTtzsVEcL 6x5ZJrnQsQdMjAGEFTpGxc1M2ikKk1780ddAKQmCMt6BPLPB3SyEdufntuanCW3ZLde/CoBl/iM h7rPW20IfUED6JZi9GnxAXavS6kCcUTVDB02ck2kDA9/of1ilkKoQ8vwn2HKkrCCDjOeunIe/My J8UorzzuPmo2nLcZKOceShTeFxXpC47ymhH2CQFlbUc3GySjuyRiiy9fXJqua0cwNvNoNa/RPWs dtOUho6WBZC+7xSdBRd0Rvv8X1MJ1LghVYQgGe8tTwgXMIFXxTM9jUTMh6PcQhN8CiGHvEa5GAs INdDv8ABZlfoUZrpq/bz/nw X-Received: by 2002:a17:907:1c83:b0:b8d:f6f1:e27a with SMTP id a640c23a62f3a-b8edf404572mr269519066b.65.1770450768529; Fri, 06 Feb 2026 23:52:48 -0800 (PST) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 1/2] bhyve: support vcpu pinning Date: Sat, 7 Feb 2026 08:52:08 +0100 Message-ID: <20260207075209.18946-2-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260207075209.18946-1-bogorodskiy@gmail.com> References: <20260207075209.18946-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: FMCT6BBTYPQAX45HAZBJMKAI7WRFBSEU X-Message-ID-Hash: FMCT6BBTYPQAX45HAZBJMKAI7WRFBSEU X-MailFrom: bogorodskiy@gmail.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: Roman Bogorodskiy 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: pass (identity @gmail.com) X-ZM-MESSAGEID: 1770450906879158500 Content-Type: text/plain; charset="utf-8" Bhyve supports vcpu pinning using the `-p vcpu:hostcpu` argument. This argument can be specified multiple times for the same vcpu to pin it to multiple hostcpu's. Bhyve currently does not allow to change vcpu pinning configuration for the VM that is already running. Use this to support domain's vcpupin configuration such as: Signed-off-by: Roman Bogorodskiy --- docs/drvbhyve.rst | 20 ++++++++++++++ src/bhyve/bhyve_command.c | 15 +++++++++++ .../x86_64/bhyvexml2argv-vcpupin.args | 15 +++++++++++ .../x86_64/bhyvexml2argv-vcpupin.ldargs | 4 +++ .../x86_64/bhyvexml2argv-vcpupin.xml | 27 +++++++++++++++++++ tests/bhyvexml2argvtest.c | 1 + 6 files changed, 82 insertions(+) create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-vcpupin.ar= gs create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-vcpupin.ld= args create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-vcpupin.xml diff --git a/docs/drvbhyve.rst b/docs/drvbhyve.rst index 5a45e9056f..f4aec9ffad 100644 --- a/docs/drvbhyve.rst +++ b/docs/drvbhyve.rst @@ -737,6 +737,26 @@ Example: Please refer to ``cam(4)``, ``ctl(4)``, and ``ctld(8)`` manual pages for more details on CAM and CTL. =20 +vCPU pinning +~~~~~~~~~~~~ + +:since:`Since 12.1.0`, it is possible to pin domain vCPUs +to the specific host CPUs. + +Example: + +:: + + + ... + 2 + + + + + ... + + Guest-specific considerations ----------------------------- =20 diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index ff079da9ef..7a92966d39 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -940,6 +940,21 @@ virBhyveProcessBuildBhyveCmd(struct _bhyveConn *driver= , virDomainDef *def, virCommandAddArgFormat(cmd, "%d", nvcpus); } =20 + /* CPU tuning */ + for (i =3D 0; i < virDomainDefGetVcpusMax(def); i++) { + virDomainVcpuDef *vcpu =3D virDomainDefGetVcpu(def, i); + + if (vcpu->cpumask) { + ssize_t j =3D -1; + + while ((j =3D virBitmapNextSetBit(vcpu->cpumask, j)) >=3D 0) { + virCommandAddArg(cmd, "-p"); + virCommandAddArgFormat(cmd, "%zu:%zu", i, j); + } + + } + } + /* Memory */ virCommandAddArg(cmd, "-m"); virCommandAddArgFormat(cmd, "%llu", diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-vcpupin.args b/te= sts/bhyvexml2argvdata/x86_64/bhyvexml2argv-vcpupin.args new file mode 100644 index 0000000000..c873766220 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-vcpupin.args @@ -0,0 +1,15 @@ +bhyve \ +-c 2 \ +-p 0:1 \ +-p 0:3 \ +-p 0:4 \ +-p 1:0 \ +-p 1:4 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 2:0,ahci,hd:/tmp/freebsd.img \ +-s 3:0,virtio-net,faketapdev,mac=3D52:54:00:b9:94:02 \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-vcpupin.ldargs b/= tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-vcpupin.ldargs new file mode 100644 index 0000000000..5905f4b3e6 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-vcpupin.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-vcpupin.xml b/tes= ts/bhyvexml2argvdata/x86_64/bhyvexml2argv-vcpupin.xml new file mode 100644 index 0000000000..bfa13c7cab --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-vcpupin.xml @@ -0,0 +1,27 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 2 + + + + + + hvm + + + + + + +
+ + + + + +
+ + + diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index ae43445cde..423edaa428 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -278,6 +278,7 @@ mymain(void) DO_TEST("slirp-mac-addr"); DO_TEST_FAILURE("slirp-ip"); DO_TEST("virtio-scsi"); + DO_TEST("vcpupin"); =20 /* Address allocation tests */ DO_TEST("addr-single-sata-disk"); --=20 2.52.0