Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp949273ybl; Fri, 30 Aug 2019 09:26:17 -0700 (PDT) X-Google-Smtp-Source: APXvYqy6Qct1jmbHdoQbS5E60pvbReecEG10ILW80X+kGcaACHWqIxZTEbt5a77+/I1h5KC9ClTb X-Received: by 2002:a63:101b:: with SMTP id f27mr13185585pgl.291.1567182377463; Fri, 30 Aug 2019 09:26:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1567182377; cv=none; d=google.com; s=arc-20160816; b=BObJBb7LzKieDnlFOP4RmJC4xDoUHEP/lyiZkFrgV/rR5JkQpyMwC3H54Y70+8OzjQ 6caYxQrdjlpPidQEEccDgP54OHneOy6fqrbXdGsUhG3VUcAVbYnwREqC1PQzL5PgGsPC ZI5S6cMmkjZQvkrz+ze5XCuI/niJ0ZBmvdJ/QH1b4T+T53j0RBTFzZaSWiIr7serer66 JD2dKlduZ5PNe2JmeYR+oZjKWsSMtVdy8dW4OByHZJuXb1HP0okem5EKQYVl/Sa/MJij 1818c66JXzrH9sKy9dCXB916aB72GXm4V4nkvCXXKmZ8nleYl6BaEAcXGa+ZbNwfQYC/ f38w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=+lcx73l3OzJk+ymCURbXhF5jO4XUhkQ3JEoTfd3jxVI=; b=tTEMi+1FGA2dTQ3RQdCV1bx+SOmXGrmD5L+D+WaB8Gl16udWwtft1IZjRGbKQRVO8e zzCN5agDnGjn6BJ+Fq/wn4KULjJIRY71YwixjqrOJKh1VPLYm1npG0eD8NLyPnr79aXx RdlotybJ+sZVFyVDmr1Div2AOGnN0hn7kLMk0mX9L40zrqlGxhXTW/JOuJvI9E2CMjrd iWLg1kvbgyfwSgKn24SEKnDZERVf9sLA99ps3ssTLfQR+PSId9uz4SBt2mqDm6hsAp/V OF7hgMygYdgdajrmJL1pJrTT87ElO1hOa83IQcZZQL3WROoStS5l3197mNJS/dX2RM1h 0O0w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b=GeC6ElFe; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t25si4685397pgl.7.2019.08.30.09.26.02; Fri, 30 Aug 2019 09:26:17 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b=GeC6ElFe; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727940AbfH3QX6 (ORCPT + 99 others); Fri, 30 Aug 2019 12:23:58 -0400 Received: from mail-pl1-f194.google.com ([209.85.214.194]:44798 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728159AbfH3QX5 (ORCPT ); Fri, 30 Aug 2019 12:23:57 -0400 Received: by mail-pl1-f194.google.com with SMTP id t14so3573003plr.11 for ; Fri, 30 Aug 2019 09:23:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+lcx73l3OzJk+ymCURbXhF5jO4XUhkQ3JEoTfd3jxVI=; b=GeC6ElFerlFgRT/Mt0Q/M/2H6PAPix5mue9D2INqzxc8Azr0OxF+wViO3AbkwZzOSb H/Kuphze/HAQyYZZl6taoCU1Ig9WNwBSZnD1zL92LdAK7pxYCjEGrjf44+HE54nW4k7A eUTENa9xYo3+x32AOPC2Ao+I1zJq9zhjKrSYE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+lcx73l3OzJk+ymCURbXhF5jO4XUhkQ3JEoTfd3jxVI=; b=lBJTqRyNIAGb3hyz95UCklGuOy/6QyynszGqxYG84lDeDW57v9NKLmkELqo/9w2OU1 e4EYFU+XkTXnznHDpGdQXh6o45uuBiT6EqWCsBcTQm0xcDXDidYOpwMNishcXyU5NkRa 9eit8tNFIHv/gOkWl2eLuVF7Kgpok+5M2AmFnBAKlsVM/6bcuTAOZsNTmEDLlJLmkc9X 8cRfY1EpiUSA7ZD6JCCfO1I9D+KZmeYh3u5BXKOl1bwUCEQ/G1ll7TOrR5oEcU4+Hudb lJFibrtvAYl/UlWnGF8EqVcYp8Ir9MbIAeIFRMaSzenrLYY5b7S4BloKN/YKMYC4tx67 ec9g== X-Gm-Message-State: APjAAAVwgSHJMcyBSd0FIAbe76TWFfDHr5G2QtfbgLaELNhQWkMxmL7h Ajwzeh9s2C9M/0J4IFJmbRKIgWRdy+0= X-Received: by 2002:a17:902:f216:: with SMTP id gn22mr17464983plb.59.1567182235680; Fri, 30 Aug 2019 09:23:55 -0700 (PDT) Received: from joelaf.cam.corp.google.com ([2620:15c:6:12:9c46:e0da:efbf:69cc]) by smtp.gmail.com with ESMTPSA id t9sm5646109pgj.89.2019.08.30.09.23.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Aug 2019 09:23:54 -0700 (PDT) From: "Joel Fernandes (Google)" To: linux-kernel@vger.kernel.org Cc: "Joel Fernandes (Google)" , Bjorn Helgaas , Ingo Molnar , Josh Triplett , Lai Jiangshan , Mathieu Desnoyers , "Paul E. McKenney" , Petr Mladek , "Rafael J. Wysocki" , rcu@vger.kernel.org, Steven Rostedt , Yafang Shao Subject: [PATCH -rcu dev 2/2] rcu/dyntick-idle: Add better tracing Date: Fri, 30 Aug 2019 12:23:48 -0400 Message-Id: <20190830162348.192303-2-joel@joelfernandes.org> X-Mailer: git-send-email 2.23.0.187.g17f5b7556c-goog In-Reply-To: <20190830162348.192303-1-joel@joelfernandes.org> References: <20190830162348.192303-1-joel@joelfernandes.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The dyntick-idle traces are a bit confusing. This patch makes it simpler and adds some missing cases such as EQS-enter due to user vs idle mode. Following are the changes: (1) Add a new context field to trace_rcu_dyntick tracepoint. This context field can be "USER", "IDLE" or "IRQ". (2) Remove the "++=" and "--=" strings and replace them with "StillNonIdle". This is much easier on the eyes, and the -- and ++ are easily apparent in the dynticks_nesting counters we are printing anyway. This patch is based on the previous patches to simplify rcu_dyntick counters [1] and with these traces, I have verified the counters are working properly. [1] Link: https://lore.kernel.org/patchwork/patch/1120021/ Link: https://lore.kernel.org/patchwork/patch/1120022/ Signed-off-by: Joel Fernandes (Google) --- include/trace/events/rcu.h | 13 ++++++++----- kernel/rcu/tree.c | 19 +++++++++++++------ 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/include/trace/events/rcu.h b/include/trace/events/rcu.h index 66122602bd08..474c1f7e7104 100644 --- a/include/trace/events/rcu.h +++ b/include/trace/events/rcu.h @@ -449,12 +449,14 @@ TRACE_EVENT_RCU(rcu_fqs, */ TRACE_EVENT_RCU(rcu_dyntick, - TP_PROTO(const char *polarity, long oldnesting, long newnesting, atomic_t dynticks), + TP_PROTO(const char *polarity, const char *context, long oldnesting, + long newnesting, atomic_t dynticks), - TP_ARGS(polarity, oldnesting, newnesting, dynticks), + TP_ARGS(polarity, context, oldnesting, newnesting, dynticks), TP_STRUCT__entry( __field(const char *, polarity) + __field(const char *, context) __field(long, oldnesting) __field(long, newnesting) __field(int, dynticks) @@ -462,14 +464,15 @@ TRACE_EVENT_RCU(rcu_dyntick, TP_fast_assign( __entry->polarity = polarity; + __entry->context = context; __entry->oldnesting = oldnesting; __entry->newnesting = newnesting; __entry->dynticks = atomic_read(&dynticks); ), - TP_printk("%s %lx %lx %#3x", __entry->polarity, - __entry->oldnesting, __entry->newnesting, - __entry->dynticks & 0xfff) + TP_printk("%s %s %lx %lx %#3x", __entry->polarity, + __entry->context, __entry->oldnesting, __entry->newnesting, + __entry->dynticks & 0xfff) ); /* diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 417dd00b9e87..463407762b5a 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -533,7 +533,8 @@ static void rcu_eqs_enter(bool user) } lockdep_assert_irqs_disabled(); - trace_rcu_dyntick(TPS("Start"), rdp->dynticks_nesting, 0, rdp->dynticks); + trace_rcu_dyntick(TPS("Start"), (user ? TPS("USER") : TPS("IDLE")), + rdp->dynticks_nesting, 0, rdp->dynticks); WARN_ON_ONCE(IS_ENABLED(CONFIG_RCU_EQS_DEBUG) && !user && !is_idle_task(current)); rdp = this_cpu_ptr(&rcu_data); do_nocb_deferred_wakeup(rdp); @@ -606,14 +607,17 @@ static __always_inline void rcu_nmi_exit_common(bool irq) * leave it in non-RCU-idle state. */ if (rdp->dynticks_nmi_nesting != 1) { - trace_rcu_dyntick(TPS("--="), rdp->dynticks_nmi_nesting, rdp->dynticks_nmi_nesting - 2, rdp->dynticks); + trace_rcu_dyntick(TPS("StillNonIdle"), TPS("IRQ"), + rdp->dynticks_nmi_nesting, + rdp->dynticks_nmi_nesting - 2, rdp->dynticks); WRITE_ONCE(rdp->dynticks_nmi_nesting, /* No store tearing. */ rdp->dynticks_nmi_nesting - 2); return; } /* This NMI interrupted an RCU-idle CPU, restore RCU-idleness. */ - trace_rcu_dyntick(TPS("Startirq"), rdp->dynticks_nmi_nesting, 0, rdp->dynticks); + trace_rcu_dyntick(TPS("Start"), TPS("IRQ"), rdp->dynticks_nmi_nesting, + 0, rdp->dynticks); WRITE_ONCE(rdp->dynticks_nmi_nesting, 0); /* Avoid store tearing. */ if (irq) @@ -700,7 +704,8 @@ static void rcu_eqs_exit(bool user) rcu_dynticks_task_exit(); rcu_dynticks_eqs_exit(); rcu_cleanup_after_idle(); - trace_rcu_dyntick(TPS("End"), rdp->dynticks_nesting, 1, rdp->dynticks); + trace_rcu_dyntick(TPS("End"), (user ? TPS("USER") : TPS("IDLE")), + rdp->dynticks_nesting, 1, rdp->dynticks); WARN_ON_ONCE(IS_ENABLED(CONFIG_RCU_EQS_DEBUG) && !user && !is_idle_task(current)); WRITE_ONCE(rdp->dynticks_nesting, 1); WARN_ON_ONCE(rdp->dynticks_nmi_nesting); @@ -787,9 +792,11 @@ static __always_inline void rcu_nmi_enter_common(bool irq) rdp->rcu_forced_tick = true; tick_dep_set_cpu(rdp->cpu, TICK_DEP_BIT_RCU); } - trace_rcu_dyntick(incby == 1 ? TPS("Endirq") : TPS("++="), - rdp->dynticks_nmi_nesting, + + trace_rcu_dyntick(incby == 1 ? TPS("End") : TPS("StillNonIdle"), + TPS("IRQ"), rdp->dynticks_nmi_nesting, rdp->dynticks_nmi_nesting + incby, rdp->dynticks); + WRITE_ONCE(rdp->dynticks_nmi_nesting, /* Prevent store tearing. */ rdp->dynticks_nmi_nesting + incby); barrier(); -- 2.23.0.187.g17f5b7556c-goog