From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id 581981FF0AD for ; Sun, 18 Oct 2026 14:48:03 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id D0E6B21736; Sun, 18 Oct 2026 14:46:48 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Lo0dAhdv7qlXoNlXGB77Tra29VMUlTn4KHoBgAY95IQguV7wM30ZoAs8PTMrReMH0+zk0p+mZpE8QPSikkG+JvgSizMBWjnaN1/BpSJNMv7zDHSpHKMePs0XX1N0uMJNoRzGp/gnEoCo1457XVmfb0xRd8qoR4EMKF944T/Vu2Ap/9zAYfmtxEjgrwEF06i6ulZObMGFLg3Li7mm3xgGK8f+dY3QBRdvRkB4Eitp4SkifdE0fcWkzB163BUP3lXmDuv083Rm483N/40i/9qz1RRS4WeBdhzp5hnRIajyjpuodT4X7Etcz1ga5nfFEPW+RawPJKhFO8Qvztjjd6eeog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=fnyl5/luWb5eV5CVxBwt6yCEN322OlmunA4iG2DIpqs=; b=y7XS2vJIh+k1gVXcO9+WhbaWtfdWsfp2ZQdqO10M1r03pq80eArZ5dNJLtN0UYCXamqZiHemYqC/32AFrQqU2mbFCWwj/70i/KG3XnvO6PDCTYshOa1Ws2sbaa/uPXi66xWZKhbk7Stu8enth8qKlAnSanQj1HujM+jUFZCcVMq72d6hJaZBnPgFk0JY8nq+BL5NlaixcDYN6mKJiwoSMytVoNtemYB8GP0XdZ5e3CCvZnexPaOEW/YAghbZW30e3KW6zHKXvMl1XPwtQyBNvlqD5ZDqpvpiDcgy65r2xVKIJ54FkjGCGUozjloaLtlAOfE2c6CxQzzbyVC9FEM6GA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ryomherold.dk; dmarc=pass action=none header.from=ryomherold.dk; dkim=pass header.d=ryomherold.dk; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=RyomHerold.dk; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fnyl5/luWb5eV5CVxBwt6yCEN322OlmunA4iG2DIpqs=; b=N743cg37HMk+TVtxziVnZFgf8ck/V65halK3AX/OwVkMgVOwxwfVmOvNuhDu9wWl9oG8xaZGpnThgIcpfgI/bNK8GoGQdy1bMVrMmgQoMQSgHRvCEFF0YujoChzVep8rRLhNhbxOq1BTkrAqhZHqQKlW06rz9VZ4FrYvM5Wz15OZBBNuyynweJL28WB3rwngVZ1NyhXKV4qrxXQmgIAzXvCE+N8sXB69irdGNTeg8TOeplDqWaslP6CNdRUvuSBvjVidNQVCUHOSEsHPvUb/fkfy6E8mSqCCtX6S7iIFSOoGKS/fcmyiCR4CiwIZkD6LvsdemAIpeZnH5jOOxU9FaQ== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=RyomHerold.dk; From: Michael Ryom To: pve-devel@lists.proxmox.com Subject: [PATCH cluster v2 01/14] datacenter config: add HA auto-rebalance margin mode and cooldown Date: Sun, 18 Oct 2026 14:45:45 +0200 Message-ID: <20261018124559.24305-2-Michael@RyomHerold.dk> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20261018124559.24305-1-Michael@RyomHerold.dk> References: <20261018124559.24305-1-Michael@RyomHerold.dk> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: MM0P280CA0046.SWEP280.PROD.OUTLOOK.COM (2603:10a6:190:b::20) To AS8PR10MB7231.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:619::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR10MB7231:EE_|PA4PR10MB5706:EE_ X-MS-Office365-Filtering-Correlation-Id: b768712a-5471-410f-a75c-08df2d15cb91 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|23010399003|22082099003|10067099003|18002099003|261009223027099003|261009221227099003|56012099006; X-Microsoft-Antispam-Message-Info: T5OpXZqbx2D0XnIP/t9Ne1OQxz/8LkjEyMX3h+W8ROmcr2niHC5A8CGwhwkOB16xilg6bD3KLoxUoKBC1WDY9Vc2eKJQGFNG8RvKvGAkQPmD2SdJDvhaKyypt5N9X/UOsGZq0NXH2UqM8KHwamgOmEm4sGpV0rfr0PvLLXXPDP47I0UtGyeEANs9kt6qLUFj2esvNosx7XSb26QuO/vrDvSYdwKziWiWyMjgSP9KTAPecn1JfKmVxDl2I3/oVgX1F7StJj6jy9Kx9qpYcED+WobzuLmqR/GErzal7rc5jt5lzXvPiKXptJa11fbEtUqhM+MB64njPY1GXGGjR5qB40DHnPZ6KULsDFXg1R/hzu214MCHfcV2qBMooHYyu1wMFHpZEgJhN6hCIIMJlsT1ak54zDXMjXmdNHl+UADnst1GK8no9PXgnOnjszuxpRnzcUp+5yZEQ0oHtDZBB9hnzMffC35Gk/JHrti24R5zHiEMrxjQ89+iulnEfpFEkxA/Jq6h1H79ADw7Jr7I3ho+kBWjFQNynb/Iie2XKZ4HUw9VHYeLkLiBYFx4qOhdCteQOuE9wipy8+gXmyJefX2vl0mKA3rKnpMSh8SDCH66Z0Xo3GPIi9NGo/qP3sdEq9jgruxvsjm1OO56yBxfM2u0lg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR10MB7231.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(23010399003)(22082099003)(10067099003)(18002099003)(261009223027099003)(261009221227099003)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?IThkYRZEJhe5ynBNrviikaNAZHGWiohh/S4fNC2D6YG8XzlRRJ0vvjzEWY9V?= =?us-ascii?Q?N4Nj+bFkRGIdFLhmqSuRwYEOOjjdCrxXWscjIbIcBrkuXalA8kmhuPvQbZPc?= =?us-ascii?Q?63BgW4+SL9IZCf7mTmcDD9mjeEUyml1qCg8cSJlLn5lxItxLWCb/oJEXOBvX?= =?us-ascii?Q?8turhqUL0BGwu0apayeY61/50M761Q0PSbM+CJvm3GonCia4FKu+ooYQDdgW?= =?us-ascii?Q?181cN0A2rutmGASFNrbahs1oNnH8HAZvaFn810UKZjksx0Ors387oTOgNepx?= =?us-ascii?Q?l2cpLhJ/ItAvo/WMDXkRCIjwSL9ZecIPYDxr6JsUdJcdvK9z/ZgqhnmbnB6v?= =?us-ascii?Q?mhJZ8SluaKWdikPDpp6EhSJpCaOuUO4bf+UNWwKDlyWkjGgTr1xMv7pamOo8?= =?us-ascii?Q?NedIB03nXD+rZo+4LKQV18ZG/Yylg9e3j7MLs/d18jKM95lI6rf4nPb1wOhi?= =?us-ascii?Q?AQKA7FTf7UTPrzZVwTUbz046N1Bc/DUP9tEU9wJFSM/WINXOeUMBagGtKxbV?= =?us-ascii?Q?cdrno0QH8sp3LIGXJpBRoIk/NnylEqEiH1NPj3yLfBNQivFx5hYoAaPsXnDJ?= =?us-ascii?Q?KNfYwADuH6NzhOzRlkwqpDhL5C2Ms+XFG/5ol+dhncsyMRgw8pAeaWRT3VwF?= =?us-ascii?Q?90Dn8OLMiz8Mn5w9hAccJCuASIFJPGBT0qSu9bRgKkbBuQd+Oi+k9HZD17cW?= =?us-ascii?Q?pgwBHhe/kO+jTbpaxgZ9Vii2xwjlbgnggKzXqW8PekwPvsh87l1ApYOyEtdb?= =?us-ascii?Q?aLGCye2QHsyEg/VP0xKFO2/wer2pjrOwREis8fL2FIHK3L5m/y+XRRj4iNUV?= =?us-ascii?Q?cgy6tCSio8QDLTcVAQlDoK3PhVeBXH7qnxlkMAiNHMsClQ6CDtZm+MPEFWFv?= =?us-ascii?Q?5R2+98+rv4scvEO0ny/7+q0f8n2NGirRUgr6fnBZ7ATrWxUt3+bqz3l2aHoK?= =?us-ascii?Q?OEGe2HS8zFQSuB9pdkXQUOqbaHK4lJbqIBxHf5h9A3O3HfyBUQwXEyhyMWLs?= =?us-ascii?Q?cx5JUJ4Pvuef2cL+uaksEm4UAiWenxphPaNE09D4YoxK4kTwKCM6Le28hswF?= =?us-ascii?Q?qIeKusjhba14pAZ3kK9tBVxqzKtiP8B4dAmDQPn7yhxs4HOc+iWFhK3g2wpR?= =?us-ascii?Q?k1f/Rwx5gE2YeTNIxSatT0/+hp0TcfktOb1L5JBi881HxPxtbtlOLUq2Sng/?= =?us-ascii?Q?E/PeSS7ajCzOhFSnRvlSoo27fW7EcQiiDRU8rtE2LOQObAV6FGxkViyFKuY0?= =?us-ascii?Q?w5rEUXuHyp3UWQecU9gSezxkR5OeGpFfzniqnFvY0o7PRuE0vnoaBBjzQo0u?= =?us-ascii?Q?p/AlqwQVjAVvitdd9BoXo0kjlsyyKwxjkUcta6x2/4DGZac8Fx+vnjv4/tfG?= =?us-ascii?Q?g2IuQyFuwMOfMbJWxEz9SDiqOI1rE4B6fqDKffrrxf5kV0q3h9geEWlWAynA?= =?us-ascii?Q?bAEqDmVsQtYVrtD5d6aQq5SdFNQeVMr8I7siMhwYgPAxUU6tCNOqyJos3yzi?= =?us-ascii?Q?Ub84nKR5t4fSeCxmdC/WG8MdVJsr4cEZvieSmS7QiGYCoOJCnMPxZ+zFv7vT?= =?us-ascii?Q?tfqsYWLsoxA8KQHn3dswwcG/dfWUbrHqXEkVmCRT1lX6DgSfg/QdLG5+Agzl?= =?us-ascii?Q?tvYw+zVHgAxTGd5XSybaRppHJ5wcImGigfIDGH4RRM4gvsYaHbA48pEvyDRq?= =?us-ascii?Q?EvT++5Fnm1UH0hsBFySKBb0FDyA8PV2XcHc8v4uPqVzcmG1Y7zOh0JCQ1ep1?= =?us-ascii?Q?78ajDG+hlQ=3D=3D?= X-OriginatorOrg: RyomHerold.dk X-MS-Exchange-CrossTenant-Network-Message-Id: b768712a-5471-410f-a75c-08df2d15cb91 X-MS-Exchange-CrossTenant-AuthSource: AS8PR10MB7231.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2026 12:46:14.3852 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 26a2499e-4646-4888-a695-c64736a56807 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: blQimZ8NLFdOJufwIykPimZ4HkfLLc5pu09GbypsTTtny1dWlI+kDnOePZSumFgzVOq0XEasITuN05XRPBtDVA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR10MB5706 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.002 Adjusted score from AWL reputation of From: address DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain DMARC_PASS -0.1 DMARC pass policy GB_MSAUTHSOURCE_EUROPE 0.01 Mail authenticated via Microsoft Europe (EURP) datacenter RCVD_IN_DNSWL_NONE -0.0001 Sender listed at https://www.dnswl.org/, no trust SPF_HELO_PASS -0.001 SPF: HELO matches SPF record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: ITXFKL5V3K6ENM2RPFOFSWHRXBCZ2VBX X-Message-ID-Hash: ITXFKL5V3K6ENM2RPFOFSWHRXBCZ2VBX X-MailFrom: Michael@RyomHerold.dk X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Michael Ryom X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: The relative improvement margin of the automatic resource balancing provides almost no hysteresis when a single resource dominates the cluster load: with two nodes, a resource load v and a node base load difference d, the relative improvement of moving the resource is 2d / (v + d), so background fluctuations of the node base loads are enough to qualify a migration and, afterwards, its reverse (see bug #8059). Add a margin mode, which allows to interpret the existing margin as a minimum absolute improvement in percentage points instead, which creates a dead band for such migrations. It defaults to 'relative', i.e. the behavior of existing setups does not change. Also add a cooldown, which keeps resources moved by a resource balancing migration from being considered for another one for the given time. It defaults to 0, i.e. it is disabled. Signed-off-by: Michael Ryom --- src/PVE/DataCenterConfig.pm | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/PVE/DataCenterConfig.pm b/src/PVE/DataCenterConfig.pm index 004122e..e637e63 100644 --- a/src/PVE/DataCenterConfig.pm +++ b/src/PVE/DataCenterConfig.pm @@ -75,8 +75,32 @@ EODESC maximum => 100, default => 10, requires => 'ha-auto-rebalance', - description => "The minimum relative improvement in cluster node imbalance," - . " in percent, to commit to a resource balancing migration.", + description => "The minimum improvement in cluster node imbalance to commit to a" + . " resource balancing migration. Depending on the margin mode, either in" + . " percent of the current imbalance (relative) or in percentage points" + . " (absolute).", + }, + 'ha-auto-rebalance-margin-mode' => { + type => 'string', + enum => ['relative', 'absolute'], + optional => 1, + default => 'relative', + requires => 'ha-auto-rebalance', + description => "Whether the margin is the minimum relative or absolute improvement" + . " in cluster node imbalance. An absolute margin prevents migrations which" + . " only shuffle load without meaningfully improving the cluster balance, e.g." + . " a single dominating resource being moved back and forth because of" + . " fluctuations of the node base loads.", + }, + 'ha-auto-rebalance-cooldown' => { + type => 'integer', + optional => 1, + minimum => 0, + default => 0, + requires => 'ha-auto-rebalance', + description => "The time, in seconds, after a successful resource balancing" + . " migration in which the moved resources are not considered for another" + . " resource balancing migration. Set to 0 to disable the cooldown.", }, }; -- 2.47.3