From patchwork Mon Feb 20 12:41:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frederic Weisbecker X-Patchwork-Id: 5639 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp1285474wrn; Mon, 20 Feb 2023 04:44:51 -0800 (PST) X-Google-Smtp-Source: AK7set8jqJHbadiWZ6RLGcIxEa1GhBRBklWeKKh9Mb+poTMYO9ts/ifbKChiWlZC4172Dx9FOlxH X-Received: by 2002:a17:90a:7648:b0:234:190d:e649 with SMTP id s8-20020a17090a764800b00234190de649mr3485979pjl.19.1676897091328; Mon, 20 Feb 2023 04:44:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676897091; cv=none; d=google.com; s=arc-20160816; b=0uorV/xUR1F7avuwyqP+pc1BiD9x3PCWjaOMbQWrJ2eQTaSqAyWyNaKGs+w8Wz/M8J /ZRJ5jn0Cpc02OOsZTSxGUcF960cAZDwdt43ltuxt8Xp0SiCilpbpkakwK8h+hnYxFzW Lzfh8PKv9fdCy5Vlg0l3fv8MOhX0zyhWySKp2ML+p6DdKd3n4H5ajXDy3aM+7d2PUeuU o7BoRTDADmPviigHOF0gcbnI+fOoqqCADvYUg3Xl0Uoqo+sScx9HlfQ9oMKTQhnR6V7D xhdJjSMRSOla80+/pEq82nxGazEKFmF/CC0MqVMGZ/M0RaRVBeXWQmVWo5fCCqfbfHV8 m0vw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=rxY7InqXN+36DH3z5sKz+Iz/jvbd4jYHYXbWwp2BHIg=; b=Cw1p3/C5LihTyFo3SuXfmavdF8+ddW9dyt4HkaPv/sN3oHUSLsCIlFVj9doPUrM53G 5e9MStwcLGReMBDMtgXPAGdQyy+0rRngTunhietfpz0gs7+W8ds5QMS3v4hsLeYCepvM 9RpqEz32QhxnjOtEW6+vUUrC622TXypV3grY/kTyCuCY5oS4nEfw7WGjj5V+mbuGaVlb 3M5+utwUnokUvVPBdR1AguB1dW/b7LUQSz7H+miIuk3USeykQ90cLdbgl8SL08VHtVQM Vl0OpoRJq/zYb4luEBFI+LyNRqSrfnUwStGC7fRuAQxlZyVrpR0SLAmrtRE2bgHjSy9P 5PEA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="hrTt/1t4"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j9-20020a17090a318900b00233d10c93b9si13690733pjb.179.2023.02.20.04.44.38; Mon, 20 Feb 2023 04:44:51 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="hrTt/1t4"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231450AbjBTMln (ORCPT + 99 others); Mon, 20 Feb 2023 07:41:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60226 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231243AbjBTMlm (ORCPT ); Mon, 20 Feb 2023 07:41:42 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1A75A1BAF2 for ; Mon, 20 Feb 2023 04:41:40 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id BB729B80D1C for ; Mon, 20 Feb 2023 12:41:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 376E7C4339B; Mon, 20 Feb 2023 12:41:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1676896897; bh=Wb9KGoUJrtYdsW1KimAYFV3mTn319Lm7pLZhdSM/tgo=; h=From:To:Cc:Subject:Date:From; b=hrTt/1t4sMwQI+hYc45JtZ7AWOsbW8/BuhiM42YYdiwgt+vf76AiLzkjdlrxbGjyD ZvvP/eDR4tJepTLJOGHPjUHxgubfkEFyMPO6/OuVVkWied9YZTb6a2sI18IcSKrMv4 R/EOMQ+r6CgpLlvNnJmYFzqkzlsivhQoXByDWp/HP93g+sUOSsVYH8uPBY7mrN/Q+e fV0G3GccDp3AKROf7ctNhG4K5tnpGLZE8lZKI+PGBYghPWsmtyJR06BbcvAPfVTUvj K4R/tG93LdBex+ZXdV4uu/7/K1uETWFDZvlDI0AydWarKPO70ZLHbdJ8oXORdeqx1b VX2aY1KdwwpXA== From: Frederic Weisbecker To: Thomas Gleixner Cc: LKML , Frederic Weisbecker , Alexey Dobriyan , Peter Zijlstra , Wei Li , Mirsad Goran Todorovac , Yu Liao , Hillf Danton , Ingo Molnar Subject: [PATCH 0/7] timers/nohz: Fixes and cleanups v2 Date: Mon, 20 Feb 2023 13:41:22 +0100 Message-Id: <20230220124129.519477-1-frederic@kernel.org> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758354044191609680?= X-GMAIL-MSGID: =?utf-8?q?1758354044191609680?= Try to (partially) fix the issue reported in https://lore.kernel.org/lkml/20230128020051.2328465-1-liaoyu15@huawei.com/ Changes since v1: * Fix compute_delta left unused (thanks Hillf) * Pass directly struct tick_sched to get_cpu_sleep_time_us() * Add Peterz ack * Remove selftests with wrong assertions git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git timers/core HEAD: 0b86fc6ed10742ec8e54cd4d495c1ce9d4c1b4e0 Thanks, Frederic --- Frederic Weisbecker (7): timers/nohz: Restructure and reshuffle struct tick_sched timers/nohz: Only ever update sleeptime from idle exit timers/nohz: Protect idle/iowait sleep time under seqcount timers/nohz: Add a comment about broken iowait counter update race timers/nohz: Remove middle-function __tick_nohz_idle_stop_tick() MAINTAINERS: Remove stale email address selftests/proc: Remove idle time monotonicity assertions MAINTAINERS | 2 +- kernel/time/tick-sched.c | 135 ++++++++++++------------- kernel/time/tick-sched.h | 67 +++++++----- tools/testing/selftests/proc/.gitignore | 2 - tools/testing/selftests/proc/Makefile | 2 - tools/testing/selftests/proc/proc-uptime-001.c | 45 --------- tools/testing/selftests/proc/proc-uptime-002.c | 79 --------------- tools/testing/selftests/proc/proc-uptime.h | 60 ----------- 8 files changed, 106 insertions(+), 286 deletions(-) --- git range-diff since v1 1: 899f01a80e5b ! 1: 0e7aede86812 timers/nohz: Restructure and reshuffle struct tick_sched @@ Commit message @last_jiffies and @idle_expires. Reported-by: Thomas Gleixner + Acked-by: Peter Zijlstra (Intel) Cc: Hillf Danton Cc: Yu Liao Cc: Ingo Molnar Cc: Wei Li Cc: Alexey Dobriyan Cc: Mirsad Goran Todorovac - Cc: Peter Zijlstra Signed-off-by: Frederic Weisbecker ## kernel/time/tick-sched.h ## 2: 4ea8a8e98eb0 ! 2: 8e8a18cee3d5 timers/nohz: Only ever update sleeptime from idle exit @@ Commit message reader VS writer races to handle. A subsequent patch will fix one. Reported-by: Yu Liao + Acked-by: Peter Zijlstra (Intel) Cc: Hillf Danton Cc: Yu Liao Cc: Ingo Molnar @@ Commit message Cc: Wei Li Cc: Alexey Dobriyan Cc: Mirsad Goran Todorovac - Cc: Peter Zijlstra Signed-off-by: Frederic Weisbecker ## kernel/time/tick-sched.c ## @@ kernel/time/tick-sched.c: static void tick_nohz_start_idle(struct tick_sched *ts sched_clock_idle_sleep_event(); } -+static u64 get_cpu_sleep_time_us(int cpu, ktime_t *sleeptime, ++static u64 get_cpu_sleep_time_us(struct tick_sched *ts, ktime_t *sleeptime, + bool compute_delta, u64 *last_update_time) +{ -+ struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu); + ktime_t now, idle; + + if (!tick_nohz_active) @@ kernel/time/tick-sched.c: static void tick_nohz_start_idle(struct tick_sched *ts + if (last_update_time) + *last_update_time = ktime_to_us(now); + -+ if (ts->idle_active && !nr_iowait_cpu(cpu)) { ++ if (ts->idle_active && compute_delta) { + ktime_t delta = ktime_sub(now, ts->idle_entrytime); + + idle = ktime_add(*sleeptime, delta); @@ kernel/time/tick-sched.c: static void tick_nohz_start_idle(struct tick_sched *ts - - return ktime_to_us(idle); -+ return get_cpu_sleep_time_us(cpu, &ts->idle_sleeptime, ++ return get_cpu_sleep_time_us(ts, &ts->idle_sleeptime, + !nr_iowait_cpu(cpu), last_update_time); } EXPORT_SYMBOL_GPL(get_cpu_idle_time_us); @@ kernel/time/tick-sched.c: EXPORT_SYMBOL_GPL(get_cpu_idle_time_us); - } - return ktime_to_us(iowait); -+ return get_cpu_sleep_time_us(cpu, &ts->iowait_sleeptime, ++ return get_cpu_sleep_time_us(ts, &ts->iowait_sleeptime, + nr_iowait_cpu(cpu), last_update_time); } EXPORT_SYMBOL_GPL(get_cpu_iowait_time_us); 3: 131b09a345c6 ! 3: 61b56e1d6c33 timers/nohz: Protect idle/iowait sleep time under seqcount @@ Commit message can hardly be fixed. Reported-by: Yu Liao + Acked-by: Peter Zijlstra (Intel) Cc: Hillf Danton Cc: Yu Liao Cc: Ingo Molnar @@ Commit message Cc: Wei Li Cc: Alexey Dobriyan Cc: Mirsad Goran Todorovac - Cc: Peter Zijlstra Signed-off-by: Frederic Weisbecker ## kernel/time/tick-sched.c ## @@ kernel/time/tick-sched.c: static void tick_nohz_stop_idle(struct tick_sched *ts, sched_clock_idle_sleep_event(); } -@@ kernel/time/tick-sched.c: static u64 get_cpu_sleep_time_us(int cpu, ktime_t *sleeptime, +@@ kernel/time/tick-sched.c: static u64 get_cpu_sleep_time_us(struct tick_sched *ts, ktime_t *sleeptime, + bool compute_delta, u64 *last_update_time) { - struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu); ktime_t now, idle; + unsigned int seq; if (!tick_nohz_active) return -1; -@@ kernel/time/tick-sched.c: static u64 get_cpu_sleep_time_us(int cpu, ktime_t *sleeptime, +@@ kernel/time/tick-sched.c: static u64 get_cpu_sleep_time_us(struct tick_sched *ts, ktime_t *sleeptime, if (last_update_time) *last_update_time = ktime_to_us(now); -- if (ts->idle_active && !nr_iowait_cpu(cpu)) { +- if (ts->idle_active && compute_delta) { - ktime_t delta = ktime_sub(now, ts->idle_entrytime); + do { + seq = read_seqcount_begin(&ts->idle_sleeptime_seq); @@ kernel/time/tick-sched.c: static u64 get_cpu_sleep_time_us(int cpu, ktime_t *sle - } else { - idle = *sleeptime; - } -+ if (ts->idle_active && !nr_iowait_cpu(cpu)) { ++ if (ts->idle_active && compute_delta) { + ktime_t delta = ktime_sub(now, ts->idle_entrytime); + + idle = ktime_add(*sleeptime, delta); 4: 4ff478886c2c ! 4: 9147cd64f3ba timers/nohz: Add a comment about broken iowait counter update race @@ Commit message This is unfortunately hardly fixable. Just add a comment about that condition. + Acked-by: Peter Zijlstra (Intel) Cc: Hillf Danton Cc: Yu Liao Cc: Ingo Molnar @@ Commit message Cc: Wei Li Cc: Alexey Dobriyan Cc: Mirsad Goran Todorovac - Cc: Peter Zijlstra Signed-off-by: Frederic Weisbecker ## kernel/time/tick-sched.c ## -@@ kernel/time/tick-sched.c: static u64 get_cpu_sleep_time_us(int cpu, ktime_t *sleeptime, +@@ kernel/time/tick-sched.c: static u64 get_cpu_sleep_time_us(struct tick_sched *ts, ktime_t *sleeptime, * counters if NULL. * * Return the cumulative idle time (since boot) for a given 5: 6eb31238e057 ! 5: 4863214a905f timers/nohz: Remove middle-function __tick_nohz_idle_stop_tick() @@ Commit message tick_nohz_idle_stop_tick() and its implementation. Remove that unnecessary step. + Acked-by: Peter Zijlstra (Intel) Cc: Hillf Danton Cc: Yu Liao Cc: Ingo Molnar @@ Commit message Cc: Wei Li Cc: Alexey Dobriyan Cc: Mirsad Goran Todorovac - Cc: Peter Zijlstra Signed-off-by: Frederic Weisbecker ## kernel/time/tick-sched.c ## 6: d1dc3edc39a7 ! 6: 170828be3e96 MAINTAINERS: Remove stale email address @@ Metadata ## Commit message ## MAINTAINERS: Remove stale email address + Acked-by: Peter Zijlstra (Intel) Cc: Hillf Danton Cc: Yu Liao Cc: Ingo Molnar @@ Commit message Cc: Wei Li Cc: Alexey Dobriyan Cc: Mirsad Goran Todorovac - Cc: Peter Zijlstra Signed-off-by: Frederic Weisbecker ## MAINTAINERS ## -: ------------ > 7: 0b86fc6ed107 selftests/proc: Remove idle time monotonicity assertions