From nobody Mon Aug 31 23:48:23 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hYm0F45KNz6qRGc for ; Mon, 31 Aug 2026 23:48:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hYm0F1vr9z3Jnj for ; Mon, 31 Aug 2026 23:48:29 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788220109; 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; bh=ttWK/veMlGbkTHeRWCqE/3Awb+VAyltk9ik7jYzB2gQ=; b=EJ4xQnnn8afD4GVTzKuY/IxrOs5I6QINwSLU4DNOtIkrhibhU6R4GPWkVXfdez2UVjkRbr RDza7PEhid6vn2f6NPaVc61uycJfpuj6K6CZb2AemlXLqTJPJS7FiiHd/HMa+IOQstH8lW kvuszqzSdZVJiYDlwtlMA2trJMRW2YaQUhzwLADVfpNyZOQ9cxCkegTWDYItARjSXnnhLX 0CoAcH74GEIqAkDnHwVI3pK6nCOyn2KUU80HmvjCa0gSjBnbxJlrkHSZ2dPlgT3ruNrLVW bKoSixCVIokRXLrNVa3WCvCkwL557WqKRwh6fpotWKQl32bwZ1pHoZ4t7he5gw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1788220109; a=rsa-sha256; cv=none; b=cUqh2sgYRV837mLUch7CyzswxKQX1djvDiX9wY8gs8CQ+EmdJtoC88w9Gx78lb2HyqCXoS hiVTUh8bbSXwpsTyV1eNZmtwgKzUxFeqvcPCmd9IJnwFxjdDcwvZhB+np+SBZaA+lmehv7 u1fnukOGHeYyGan2IKJyVh6JbNTDELmPSMcbr4Z/DV96NzErmUgMcoX6/TBxuimJD9hkvy r82U9BsJvOJZQwZpvKy+IUYGeFL5VsVMHeIE+BHJ3bzza9/AS3sqsJXgRNcZWNq3WzeLLt 0sf8KpCeWIHlErOQMRZk8nuTwxzSm9CpC3ysB+Xi11akoQXhNtpvwrk4YnBkFA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788220109; 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; bh=ttWK/veMlGbkTHeRWCqE/3Awb+VAyltk9ik7jYzB2gQ=; b=wLNZjzPPB5rH5JlmRaeLD1l7VTa3Jw4Oer2SrQKSQMdb4regxWMgj03bOBri/mvBqu8Tb2 7Hj5msylNHmXLbZp4D0ttM4OFmlNgTcplIL5KEZb2ew2hrVS8+G7CDHbP7nBud44Qkqi4P LQvfox77+qy1WQfNinFKaI7NdFz9MH6cXHtZFfcNWUCYmYJ3z8tIVzCxOl/BjFvuraP2RY x3z2oSo9aws1myBCcgNOPcQGk80dHDjpJetrn3i2e8dsI/2/U/ISgDCDgPB+mT1EakL9HV 5EcAnv9oBGL3R6V0jIGgw9o6Wn1wN/E9o/8/PcoA6MbMwmblIzmp8BI14nb4Qw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hYm0F0kb4zZQn for ; Mon, 31 Aug 2026 23:48:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 37eb4 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 31 Aug 2026 23:48:23 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Nick Price Subject: git: ee44a57e34a8 - main - umtx: use a distribution-fair multiplier for the chain hash List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: nprice X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ee44a57e34a8812b4641d5c9202255ea7883764d Auto-Submitted: auto-generated Date: Mon, 31 Aug 2026 23:48:23 +0000 Message-Id: <6a9612c7.37eb4.b18ce5e@gitrepo.freebsd.org> The branch main has been updated by nprice: URL: https://cgit.FreeBSD.org/src/commit/?id=ee44a57e34a8812b4641d5c9202255ea7883764d commit ee44a57e34a8812b4641d5c9202255ea7883764d Author: Nick Price AuthorDate: 2026-08-31 23:47:12 +0000 Commit: Nick Price CommitDate: 2026-08-31 23:47:24 +0000 umtx: use a distribution-fair multiplier for the chain hash umtxq_hash() multiplies the key by 0x9E370001 and keeps the high bits. That constant is 0x9E37 * 2^16 + 1, so it degenerates for keys whose spacing carries trailing zero bits: at a 64 KiB stride it puts 128 of 512 parked waiters onto a single chain mutex, and at 16 KiB and up it uses only a handful of the 512 chains. Base-system consumers never hit this because libthr places its own wait words 128 bytes apart, but a Linux-ABI runtime waiting on addresses it allocates itself lands squarely on the floor. Switch to 0x61C88647, which leaves at most 3 waiters per chain at the same stride; Linux made this exact change in 2016, after judging the sparse constants "actively bad for hashing". Approved by: adrian (mentor) Reviewed by: kib, adrian, emaste Differential Revision: https://reviews.freebsd.org/D58337 Signed-off-by: Nick Price --- sys/kern/kern_umtx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/kern/kern_umtx.c b/sys/kern/kern_umtx.c index 69ea90ce9972..ac2469379690 100644 --- a/sys/kern/kern_umtx.c +++ b/sys/kern/kern_umtx.c @@ -113,7 +113,7 @@ (td)->td_user_pri <= PRI_MAX_TIMESHARE) ?\ PRI_MAX_TIMESHARE : (td)->td_user_pri) -#define GOLDEN_RATIO_PRIME 2654404609U +#define GOLDEN_RATIO_32 1640531527U #ifndef UMTX_CHAINS #define UMTX_CHAINS 512 #endif @@ -380,7 +380,7 @@ umtxq_hash(struct umtx_key *key) unsigned n; n = (uintptr_t)key->info.both.a + key->info.both.b; - key->hash = ((n * GOLDEN_RATIO_PRIME) >> UMTX_SHIFTS) % UMTX_CHAINS; + key->hash = ((n * GOLDEN_RATIO_32) >> UMTX_SHIFTS) % UMTX_CHAINS; } struct umtxq_chain *