From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 76D5EC83F03 for ; Wed, 2 Jul 2025 19:42:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 160306B0099; Wed, 2 Jul 2025 15:42:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1110E6B00A1; Wed, 2 Jul 2025 15:42:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 027586B00A3; Wed, 2 Jul 2025 15:42:18 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id E498E6B0099 for ; Wed, 2 Jul 2025 15:42:18 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id C972D160432 for ; Wed, 2 Jul 2025 19:42:16 +0000 (UTC) X-FDA: 83620345872.09.4C3391C Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by imf07.hostedemail.com (Postfix) with ESMTP id DE39D40008 for ; Wed, 2 Jul 2025 19:42:14 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=c6RCxxZz; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf07.hostedemail.com: domain of devnull+cl.gentwo.org@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=devnull+cl.gentwo.org@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751485334; h=from:from:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=QPl6Kg/kK3U11IyMpFgATiE3TEPEnbUGF8Qutrj5qxQ=; b=4ahaI61s1W/sdSicOHYXYy03jWB6Inf8Cz1lXSCGuNTqOxkpnrqSoCEDKOJrneUer6PZOw JEkkFzujlyFBogAkIp+vjiGoNREU2dCnIZe6RlLthlMdR7JSpBiyRV/Y7R2YDSGZKcP+RM s1wsUDbfN5wJKI2EM5Nawc70FXu3sEE= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751485334; a=rsa-sha256; cv=none; b=hEak/rg3xxwzf+76m2qCO51ttF+AElcP5qySkLdQCfERK2yoFcA6v54oye/0QJiBugzx7W +cCL8GZaIxWe0A8wHDw8rpbtRoY6E0uVZaKJnOYglervsKM5v6KmbTbnG4vi77d9CMLoxB 5uVlLfIXouj0pGKZCCnSnwVIfRqqSrg= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=c6RCxxZz; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf07.hostedemail.com: domain of devnull+cl.gentwo.org@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=devnull+cl.gentwo.org@kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 144456115D; Wed, 2 Jul 2025 19:42:14 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id ACE43C4CEE7; Wed, 2 Jul 2025 19:42:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1751485333; bh=SwTHyU6Mn0I3EB41JlGEsXh4W1GwMv24rlbzisMlucY=; h=From:Date:Subject:To:Cc:Reply-To:From; b=c6RCxxZzvjGhnxE+mcDBcQnqMlJdm3RdhiVrCuvbV62Rwl0GWfea/Xziixz1LCkxn NJLxrkNR94SQeWWwzHx7i+KmHVW1XuHY6GoL5WOuaOREsXBEQyRWvaYdlZcB7Gjo9q JLseumv8BOj53kZeUD/KLBng5YfQL1Ro/CFaSvPr9u8aICZA0PWVW8qJ8llGNuVCXH YXyoUd/kHIoScEh3KfozJby43R01qvSvVlnZ1LdatYKmKHXroujNt62iZD8yNIwE6Q MqNeh6gSEQcag+aKNaYAh5+prXPNXQTkFIB8OzdKrZUSOO6hgKHdRqI0RlZgJuzw7j Up5q0k6vvESpA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 99DF9C83F03; Wed, 2 Jul 2025 19:42:13 +0000 (UTC) From: Christoph Lameter via B4 Relay Date: Wed, 02 Jul 2025 12:42:00 -0700 Subject: [PATCH] Skew tick for systems with a large number of processors MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20250702-tick_skew-v1-1-ff8d73035b02@gentwo.org> X-B4-Tracking: v=1; b=H4sIAIeLZWgC/6tWKk4tykwtVrJSqFYqSi3LLM7MzwNyDHUUlJIzE vPSU3UzU4B8JSMDI1MDcwMj3ZLM5Oz44uzUcl2DVHMLU4tkQwMjEzMloPqCotS0zAqwWdGxtbU AxXCWRVsAAAA= To: Anna-Maria Behnsen , Frederic Weisbecker , Ingo Molnar , Thomas Gleixner Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, sh@gentwo.org, Darren Hart , "Christoph Lameter (Ampere)" X-Mailer: b4 0.15-dev-37811 X-Developer-Signature: v=1; a=ed25519-sha256; t=1751485333; l=2920; i=cl@gentwo.org; s=20240811; h=from:subject:message-id; bh=mEaXrgWVXMVIAxP7Q84RMJ+OwIeyomVfgVzW4N0MT4E=; b=2AYl5EUugdW/v8u1pbUcoYBfQ9I+PSRag4ISQvJfh69fvIZcVJ+jx1B2XIzXC+CZTqg3g9cqh bLRSsyBQrWnDD6bfaFXPywKA2+6y50ataeDkou12LfHQoNYMxpJwP1o X-Developer-Key: i=cl@gentwo.org; a=ed25519; pk=I7gqGwDi9drzCReFIuf2k9de1FI1BGibsshXI0DIvq8= X-Endpoint-Received: by B4 Relay for cl@gentwo.org/20240811 with auth_id=194 X-Original-From: "Christoph Lameter (Ampere)" Reply-To: cl@gentwo.org X-Stat-Signature: f59tn4db1ez4hprgy6adsteugihpgr83 X-Rspamd-Queue-Id: DE39D40008 X-Rspam-User: X-Rspamd-Server: rspam07 X-HE-Tag: 1751485334-140827 X-HE-Meta: U2FsdGVkX18XCzhpXDCXRoz9qrLln5CPrAd6DrywqVG5THltc4tBDKR/eAh7kNb6usFRV2TI+c1dRLUg1H9zIUMQDUWC+uqQWpelysjaocwWGj3gJUvHaxZsd8pJpVoRRVli4mA/G3zpJSkM99/8K3MbpaaxoQAdkJI4UE45TfxXvTzcub334SdsehC67JOqZzGlbTwjH+mpxqd47UNrv2Xb//BHo/IfwRBhq992DETt11U2UpZowfFZnprYFtNr4hQuj95OxfBhlYoekjjty49z8DFoAWfZ7DBz7wrxx1cIW8C8BtOK3Te0GZZ+T3HWagjE+y8nAZGHmQWbvj7vzeSAPxehTPFzmye2kxvH5tmHb4Cif3AIZwORKYDPcGXQreHHMR7Ziu2ZUA0KjyylvMuwdLZoiEXe7yrfbZy//vh0oqp6hAUQ6ltjp5zjtHmQVfpJdb7fXUs3v+oHg7UVueIabXkyWGRRxRFwTMkDQNWsgCR8fiIr9+8118FP5QjOhhD11nORz4aLIdgm05U/4+b0GInsP+UzcqdqpyvslWkfQn0qBH2+F6HGU0TYq9tGyIuqJqT6RnA3smZ4blGKxPUdYbXPu1Kke0pBsGW5AfpASfyqUgS9pomioxtFGyeGGFeT3n9Pp8s+QWeGsf2Ev76Q+yOqyVX6hvM0gORQLSlCI/F6xzuhxCI6dGrzYM9/HbCoTHaAs/ABU8IfE+Bb9S+8gXvGz0695a+bd42uuolZyYAnPWbUmYZdm6giXXEWSHtMAB2aivEsVPOa3iUJ8tbfpDw9l/MtZX3k05MJRu3lAAqivyaT6hcnduSOTj08epzQQRXYFPO1ZY8Sx/Q+EvdRwPAumPlKGn61eyo05LPWiH1J/gexIM2sgi24k63B66pyNj5oTl1oAgzY3MZXehySskRhULj/TmBW+TLDmCJG9S6paOsUNF0apzKVl0K3zNCs323Iav7jzWLRHKH PPgkpXKd s3btVmDAfvHLFSO5sDQW/FzA+qV/ZCsoxrDoLTt2X5oPDue3HHmJh80YrI0mFrDSoe/XlEFTl81cGDugWBA4wyVUZsI5vaEqhP5zVyi0ZXqGOTZ1zVRYB9UuC2sjH09gBSxYtTqmjktz8IT8HUF9LtRwoGsRSIAGcgNpzVO2igGuyS2PahY9oBXCHJDyqJdFFgDuiEWHokQUNGmh9zEV6oW8WEp6YU9H08ilmSRI9mpCWuxr5w5/2IkC+FM6IYHqoQ/fOVjtJU/4wv5hKvE46nc4n33/Kvlw3mDVYIutr8D4qeYcn3wlHFNAp+Buj3YFT84gwQ5r4jAuX13IDQ5J77I9LViXEdV1KgILZrJ9NFh7vPlCqkkrjRedYTrvyicLJi7wFEy8R97p931yUEqO07K8kyfpnYv2liqXM X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: "Christoph Lameter (Ampere)" Synchronized ticks mean that all processors will simultaneously process ticks and enter the scheduler. So the contention increases as the number of cpu increases. The contention causes latency jitter that scales with the number of processors. Staggering the timer interrupt also helps mitigate voltage droop related issues that may be observed in SOCs with large core counts. See https://semiengineering.com/mitigating-voltage-droop/ for a more detailed explanation. Switch to skewed tick for systems with more than 64 processors. Signed-off-by: Christoph Lameter (Ampere) --- kernel/Kconfig.hz | 10 ++++++++++ kernel/time/tick-sched.c | 16 ++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz index ce1435cb08b1..245d938d446b 100644 --- a/kernel/Kconfig.hz +++ b/kernel/Kconfig.hz @@ -57,3 +57,13 @@ config HZ config SCHED_HRTICK def_bool HIGH_RES_TIMERS + +config TICK_SKEW_LIMIT + int + default 64 + help + If the kernel is booted on systems with a large number of cpus then the + concurrent execution of timer ticks causes long holdoffs due to + serialization. Synchrononous executions of interrupts can also cause + voltage droop in SOCs. So switch to skewed mode. This mechanism + can be overridden by specifying "tick_skew=x" on the kernel command line. diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index c527b421c865..aab7a1cc25c7 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c @@ -1554,7 +1554,7 @@ void tick_irq_enter(void) tick_nohz_irq_enter(); } -static int sched_skew_tick; +static int sched_skew_tick = -1; static int __init skew_tick(char *str) { @@ -1572,6 +1572,16 @@ void tick_setup_sched_timer(bool hrtimer) { struct tick_sched *ts = this_cpu_ptr(&tick_cpu_sched); + /* Figure out if we should skew the tick */ + if (sched_skew_tick < 0) { + if (num_possible_cpus() >= CONFIG_TICK_SKEW_LIMIT) { + sched_skew_tick = 1; + pr_info("Tick skewed mode enabled. Possible cpus %u > %u\n", + num_possible_cpus(), CONFIG_TICK_SKEW_LIMIT); + } else + sched_skew_tick = 0; + } + /* Emulate tick processing via per-CPU hrtimers: */ hrtimer_setup(&ts->sched_timer, tick_nohz_handler, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_HARD); @@ -1587,7 +1597,9 @@ void tick_setup_sched_timer(bool hrtimer) do_div(offset, num_possible_cpus()); offset *= smp_processor_id(); hrtimer_add_expires_ns(&ts->sched_timer, offset); - } + } else + pr_info("Tick operating in synchronized mode.\n"); + hrtimer_forward_now(&ts->sched_timer, TICK_NSEC); if (IS_ENABLED(CONFIG_HIGH_RES_TIMERS) && hrtimer) --- base-commit: 66701750d5565c574af42bef0b789ce0203e3071 change-id: 20250702-tick_skew-0e7858c10246 Best regards, -- Christoph Lameter