From patchwork Tue Oct 18 15:48:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Masami Hiramatsu (Google)" X-Patchwork-Id: 4230 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp2030582wrs; Tue, 18 Oct 2022 08:53:04 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4JPJkndIMlQWCC0jNiHG/nWkj4Aew19f5Fl+pVDy9KDN/pegujpMY+cPBbUABMxg8Np3A8 X-Received: by 2002:a17:906:8474:b0:78d:ce9c:284e with SMTP id hx20-20020a170906847400b0078dce9c284emr3116019ejc.702.1666108384504; Tue, 18 Oct 2022 08:53:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666108384; cv=none; d=google.com; s=arc-20160816; b=gbXT3FVUaPs3qNgpeiYaItIsVFko92Mipmhy/PpUh9B9Fo6IQzPGlPbFBD9Hb2SuvQ slK7IFeQHQfulHkO18x6y7ptRjSgyMbiUB8LfqlU0f4CfQYSl21DPhCcyZ2w60xJNfPj lcdcHoDL5JVnWGPORq+wuVdXCc1JFol165DyVHaDP2c3CE5VXOlooiL1EWKS2KCF9VA/ dYM0gDab/dCh9j+FsWE5KMTacGCNIVqlmVTJs2QgVjCpOCnnsmz3dL8est5gTXtKnTgL Tg3mCWv9YoRbA4gVa3HagJlc0ef1vHiZynWSOW69Drov09xeM46h6gQB0GKiv/KeFs/I AhSA== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=2IEkB12Vcebd10iZRukhl0W5DdqWHvPpb1lm7IXweMo=; b=lcBnn1ttNop+YKydsS002g2GDei2e0CXaRta/PKHV6Uqz6FgdJcfQF1x5ljCE+w+vj e/vrsgo8PSGeD0silpSj5P8IKzPE0xauk+C/JrgTYyoCIq/7GtW2fTGdWPNc2rg+5aU1 F4aAIXAgIJtQzjs9LNEJi/1tX5/XYsqkB2ETGa1JDeitZlwjIGca7pSiXwFF1bNvmzEK 0ddPJzlSYeEY3ARfNeqy9BxZ8GDUA8SOmM0xbQwSQjmDNoQ65D80BdQrSrvaD/90Nx5q lsCPizOebyMzV7UxhTryBE52nb6jg88ef+AkGZzWPi1lwJi70lUQkcP/uCDX9xCWFKj4 8D7g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="Q/EheRqf"; 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 g8-20020a056402320800b0045ccd1715d5si11860449eda.435.2022.10.18.08.52.39; Tue, 18 Oct 2022 08:53:04 -0700 (PDT) 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="Q/EheRqf"; 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 S230126AbiJRPsz (ORCPT + 99 others); Tue, 18 Oct 2022 11:48:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52286 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231143AbiJRPst (ORCPT ); Tue, 18 Oct 2022 11:48:49 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 25719C90EA; Tue, 18 Oct 2022 08:48:48 -0700 (PDT) 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 C3607B81BE1; Tue, 18 Oct 2022 15:48:46 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id AD6ADC433C1; Tue, 18 Oct 2022 15:48:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1666108125; bh=2ROdDPNbkFZUsLCIXz9ZIZxzJTpDkAw3NJo5QjtUD+4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Q/EheRqfRv/1URudhZBXzJRo1igQEFEg/nwqbGKtUxFv8xYsfwCVtiL/+oNk/QhCO vxhdjFff8eyT5h0n+jBkQTFcIaJY3fgEcCUOzz5hsz7ZUCFivXdX5gqFz17qS0lIwT iWV9tlacEAwbGA6uZS/SOVHiGIRHPNvDxaVIYE1SBBRlLk3hxOQANRWvmxKwEUL1vA dWN1hXDvBZmYCFip4g/RhFK8w86F7NTlyvRNc0G+/hYpN1beLQFGPpqSp0yQ38BwQp FhSijjnOJglVwe9yPFUU5Yrqko0BGtPXGZp2wLDmKD+LX+GPZ7WE/fmC5m6rPzjTem 5ZcWk03WtNSyg== From: "Masami Hiramatsu (Google)" To: Steven Rostedt Cc: Tom Zanussi , linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 1/5] tracing: Allow multiple hitcount values in histograms Date: Wed, 19 Oct 2022 00:48:42 +0900 Message-Id: <166610812248.56030.16754785928712505251.stgit@devnote2> X-Mailer: git-send-email 2.25.1 In-Reply-To: <166610811353.56030.10023036046735082272.stgit@devnote2> References: <166610811353.56030.10023036046735082272.stgit@devnote2> User-Agent: StGit/0.19 MIME-Version: 1.0 X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, 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?1747041265153325310?= X-GMAIL-MSGID: =?utf-8?q?1747041265153325310?= From: Tom Zanussi The hitcount is treated specially in the histograms - since it's always expected to be there regardless of whether the user specified anything or not, it's always added as the first histogram value. Currently the code doesn't allow it to be added more than once as a value, which is inconsistent with all the other possible values. It would seem to be a pointless thing to want to do, but other features being added such as percent and graph modifiers don't work properly with the current hitcount restrictions. Fix this by allowing multiple hitcounts to be added. Signed-off-by: Tom Zanussi Signed-off-by: Masami Hiramatsu (Google) Tested-by: Tom Zanussi --- kernel/trace/trace_events_hist.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index 48465f7e97b4..13bb7ec45836 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -1356,6 +1356,8 @@ static const char *hist_field_name(struct hist_field *field, field_name = field->name; } else if (field->flags & HIST_FIELD_FL_TIMESTAMP) field_name = "common_timestamp"; + else if (field->flags & HIST_FIELD_FL_HITCOUNT) + field_name = "hitcount"; if (field_name == NULL) field_name = ""; @@ -2328,6 +2330,8 @@ parse_field(struct hist_trigger_data *hist_data, struct trace_event_file *file, hist_data->attrs->ts_in_usecs = true; } else if (strcmp(field_name, "common_cpu") == 0) *flags |= HIST_FIELD_FL_CPU; + else if (strcmp(field_name, "hitcount") == 0) + *flags |= HIST_FIELD_FL_HITCOUNT; else { field = trace_find_event_field(file->event_call, field_name); if (!field || !field->size) { @@ -4328,8 +4332,8 @@ static int create_var_field(struct hist_trigger_data *hist_data, static int create_val_fields(struct hist_trigger_data *hist_data, struct trace_event_file *file) { + unsigned int i, j = 1, n_hitcount = 0; char *fields_str, *field_str; - unsigned int i, j = 1; int ret; ret = create_hitcount_val(hist_data); @@ -4346,8 +4350,10 @@ static int create_val_fields(struct hist_trigger_data *hist_data, if (!field_str) break; - if (strcmp(field_str, "hitcount") == 0) - continue; + if (strcmp(field_str, "hitcount") == 0) { + if (!n_hitcount++) + continue; + } ret = create_val_field(hist_data, j++, file, field_str); if (ret) From patchwork Tue Oct 18 15:48:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Masami Hiramatsu (Google)" X-Patchwork-Id: 4231 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp2030619wrs; Tue, 18 Oct 2022 08:53:11 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5xPPTdpCbodzbO7kclGUvRlQuShVmiysK6gLIiwguT3r/d0M8JQjQAQVzqWyjjBD58aBUa X-Received: by 2002:a17:907:7244:b0:78d:cedc:7a9e with SMTP id ds4-20020a170907724400b0078dcedc7a9emr2972970ejc.600.1666108391623; Tue, 18 Oct 2022 08:53:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666108391; cv=none; d=google.com; s=arc-20160816; b=FBWrcxiJY3aKcHAa43TwbTVp4jV+W9ZnJr9cXToPn+AtuUYQbViXkIir79XRfImapC /DVdj6Ess+MT2EWQx4S4EKFLo+hSssIDJi6oZAtg8tuyQhajdh/SECwYB/MgM+AInL43 4E+eBi59DGt99y0U470jruuhFONOTWQKN5vQYzNL0D1VfDRe+99arNa0lwHzrCUf0uDa 3jNXccBlvl+kCSBXMYM/JiusQEjcjR25GrKigyqtV0vbgZDw822eAMu6ZHzllx8qaSme JjurHE1pSwQ1yaUUoHBqcI/o1v3mu67ds8s/WmSMIEhgJUlcxVTgtlRS/JWJtrb8/O8T EzDA== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=8umMQHZgIOgAPyZ2JKTZ/E30jvxGaMLlORROUKigJlQ=; b=nqC/AmBHtYINiPQzu9ZOYpjUog2FiY174uA+qnTTPHsinlpIzXjr0X+IBBb61bVmDo 5X+deBFK8WoV48f91B+9rOfuNfVJSteMCjt7hdYjsfqLvAwg4hPJ5mGA0zj9kBuO+7eJ ozS9bmi9bb2XZpVyam1DgBXiA7bpBPyzIbdQqe6aAwQp5NVJnzlvwEP+fCoMp8O1Trvw BD6Yr38kah18OiSwFUPoJvpOe+7Zoo154Da8vVWG/tWkaPIu2fJB/Cyd2pnX6ivD/oKk vATsTniLV6WrdZ7DWYE8GmEqZ90udwzgw6hBmkUjx0pykd6cCQiJcZ4m3k9qSav+fMvA agSQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=E4cLV1DK; 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 t15-20020aa7d4cf000000b0045743696acbsi10641225edr.139.2022.10.18.08.52.43; Tue, 18 Oct 2022 08:53:11 -0700 (PDT) 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=E4cLV1DK; 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 S231163AbiJRPtA (ORCPT + 99 others); Tue, 18 Oct 2022 11:49:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52406 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230258AbiJRPs5 (ORCPT ); Tue, 18 Oct 2022 11:48:57 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 439CAC8212; Tue, 18 Oct 2022 08:48:55 -0700 (PDT) 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 dfw.source.kernel.org (Postfix) with ESMTPS id D406761502; Tue, 18 Oct 2022 15:48:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1D369C433D6; Tue, 18 Oct 2022 15:48:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1666108134; bh=bGnXpupQ3g6s+XZsb12GiRerNc8QOuDqu85LBQgBD8U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=E4cLV1DKrpt93tN3p+jn+/K7g6yJbgWmzH7QyuAkpD+qiLVztPt5RWWmhV9jarRaD TFoUZQzR3fhOsP16+KwczsOBwhYNlO1Ay/owiMNABKNLKcBDM1AW6b/W1FIumyERaK sUPW4C6huSR/XWkfD/P/Obc+U96+1YEYRBeRpKXycQThsikoSvWK5m3xMTZ3if1+Kx RVBWLF4QE0PY6eL/mGkj7wGqaxoCQJBkWOEnBXD7rnn8U5sMZgDXpFPY/G6PpeRFqR CkRrV/yQR1GijqI30Jha13YvKqzMz8mVNKVaneiatgRhv//QGX5PmH2DsXtneRq4oR GezgVNzTyk+PQ== From: "Masami Hiramatsu (Google)" To: Steven Rostedt Cc: Tom Zanussi , linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 2/5] tracing: Add .percent suffix option to histogram values Date: Wed, 19 Oct 2022 00:48:51 +0900 Message-Id: <166610813077.56030.4238090506973562347.stgit@devnote2> X-Mailer: git-send-email 2.25.1 In-Reply-To: <166610811353.56030.10023036046735082272.stgit@devnote2> References: <166610811353.56030.10023036046735082272.stgit@devnote2> User-Agent: StGit/0.19 MIME-Version: 1.0 X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, 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?1747041272994233584?= X-GMAIL-MSGID: =?utf-8?q?1747041272994233584?= From: Masami Hiramatsu (Google) Add .percent suffix option to show the histogram values in percentage. This feature is useful when we need yo undersntand the overall trend for the histograms of large values. E.g. this shows the runtime percentage for each tasks. ------ # cd /sys/kernel/debug/tracing/ # echo hist:keys=pid:vals=hitcount,runtime.percent:sort=pid > \ events/sched/sched_stat_runtime/trigger # sleep 10 # cat events/sched/sched_stat_runtime/hist # event histogram # # trigger info: hist:keys=pid:vals=hitcount,runtime.percent:sort=pid:size=2048 [active] # { pid: 8 } hitcount: 7 runtime (%): 4.14 { pid: 14 } hitcount: 5 runtime (%): 3.69 { pid: 16 } hitcount: 11 runtime (%): 3.41 { pid: 61 } hitcount: 41 runtime (%): 19.75 { pid: 65 } hitcount: 4 runtime (%): 1.48 { pid: 70 } hitcount: 6 runtime (%): 3.60 { pid: 72 } hitcount: 2 runtime (%): 1.10 { pid: 144 } hitcount: 10 runtime (%): 32.01 { pid: 151 } hitcount: 8 runtime (%): 22.66 { pid: 152 } hitcount: 2 runtime (%): 8.10 Totals: Hits: 96 Entries: 10 Dropped: 0 ----- Signed-off-by: Masami Hiramatsu (Google) Reviewed-by: Tom Zanussi Tested-by: Tom Zanussi --- kernel/trace/trace.c | 3 + kernel/trace/trace_events_hist.c | 90 ++++++++++++++++++++++++++++++++------ 2 files changed, 78 insertions(+), 15 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index aed7ea6e6045..e868f8bd06ec 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -5715,7 +5715,8 @@ static const char readme_msg[] = "\t .syscall display a syscall id as a syscall name\n" "\t .log2 display log2 value rather than raw number\n" "\t .buckets=size display values in groups of size rather than raw number\n" - "\t .usecs display a common_timestamp in microseconds\n\n" + "\t .usecs display a common_timestamp in microseconds\n" + "\t .percent display a number of percentage value\n\n" "\t The 'pause' parameter can be used to pause an existing hist\n" "\t trigger or to start a hist trigger but not log any events\n" "\t until told to do so. 'continue' can be used to start or\n" diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index 13bb7ec45836..65691608a390 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -506,6 +506,7 @@ enum hist_field_flags { HIST_FIELD_FL_ALIAS = 1 << 16, HIST_FIELD_FL_BUCKET = 1 << 17, HIST_FIELD_FL_CONST = 1 << 18, + HIST_FIELD_FL_PERCENT = 1 << 19, }; struct var_defs { @@ -1707,6 +1708,8 @@ static const char *get_hist_field_flags(struct hist_field *hist_field) flags_str = "buckets"; else if (hist_field->flags & HIST_FIELD_FL_TIMESTAMP_USECS) flags_str = "usecs"; + else if (hist_field->flags & HIST_FIELD_FL_PERCENT) + flags_str = "percent"; return flags_str; } @@ -2315,6 +2318,10 @@ parse_field(struct hist_trigger_data *hist_data, struct trace_event_file *file, if (ret || !(*buckets)) goto error; *flags |= HIST_FIELD_FL_BUCKET; + } else if (strncmp(modifier, "percent", 7) == 0) { + if (*flags & (HIST_FIELD_FL_VAR | HIST_FIELD_FL_KEY)) + goto error; + *flags |= HIST_FIELD_FL_PERCENT; } else { error: hist_err(tr, HIST_ERR_BAD_FIELD_MODIFIER, errpos(modifier)); @@ -5288,33 +5295,69 @@ static void hist_trigger_print_key(struct seq_file *m, seq_puts(m, "}"); } +/* Get the 100 times of the percentage of @val in @total */ +static inline unsigned int __get_percentage(u64 val, u64 total) +{ + if (!total) + goto div0; + + if (val < (U64_MAX / 10000)) + return (unsigned int)div64_ul(val * 10000, total); + + total = div64_u64(total, 10000); + if (!total) + goto div0; + + return (unsigned int)div64_ul(val, total); +div0: + return val ? UINT_MAX : 0; +} + +static void hist_trigger_print_val(struct seq_file *m, unsigned int idx, + const char *field_name, unsigned long flags, + u64 *totals, struct tracing_map_elt *elt) +{ + u64 val = tracing_map_read_sum(elt, idx); + unsigned int pc; + + if (flags & HIST_FIELD_FL_PERCENT) { + pc = __get_percentage(val, totals[idx]); + if (pc == UINT_MAX) + seq_printf(m, " %s (%%):[ERROR]", field_name); + else + seq_printf(m, " %s (%%): %3u.%02u", field_name, + pc / 100, pc % 100); + } else if (flags & HIST_FIELD_FL_HEX) { + seq_printf(m, " %s: %10llx", field_name, val); + } else { + seq_printf(m, " %s: %10llu", field_name, val); + } +} + static void hist_trigger_entry_print(struct seq_file *m, struct hist_trigger_data *hist_data, + u64 *totals, void *key, struct tracing_map_elt *elt) { const char *field_name; - unsigned int i; + unsigned int i = HITCOUNT_IDX; + unsigned long flags; hist_trigger_print_key(m, hist_data, key, elt); - seq_printf(m, " hitcount: %10llu", - tracing_map_read_sum(elt, HITCOUNT_IDX)); + /* At first, show the raw hitcount always */ + hist_trigger_print_val(m, i, "hitcount", 0, totals, elt); for (i = 1; i < hist_data->n_vals; i++) { field_name = hist_field_name(hist_data->fields[i], 0); + flags = hist_data->fields[i]->flags; - if (hist_data->fields[i]->flags & HIST_FIELD_FL_VAR || - hist_data->fields[i]->flags & HIST_FIELD_FL_EXPR) + if (flags & HIST_FIELD_FL_VAR || flags & HIST_FIELD_FL_EXPR) continue; - if (hist_data->fields[i]->flags & HIST_FIELD_FL_HEX) { - seq_printf(m, " %s: %10llx", field_name, - tracing_map_read_sum(elt, i)); - } else { - seq_printf(m, " %s: %10llu", field_name, - tracing_map_read_sum(elt, i)); - } + seq_puts(m, " "); + hist_trigger_print_val(m, i, field_name, flags, totals, elt); } print_actions(m, hist_data, elt); @@ -5327,7 +5370,8 @@ static int print_entries(struct seq_file *m, { struct tracing_map_sort_entry **sort_entries = NULL; struct tracing_map *map = hist_data->map; - int i, n_entries; + int i, j, n_entries; + u64 *totals = NULL; n_entries = tracing_map_sort_entries(map, hist_data->sort_keys, hist_data->n_sort_keys, @@ -5335,11 +5379,29 @@ static int print_entries(struct seq_file *m, if (n_entries < 0) return n_entries; + for (j = 0; j < hist_data->n_vals; j++) { + if (!(hist_data->fields[j]->flags & HIST_FIELD_FL_PERCENT)) + continue; + if (!totals) { + totals = kcalloc(hist_data->n_vals, sizeof(u64), + GFP_KERNEL); + if (!totals) { + n_entries = -ENOMEM; + goto out; + } + } + for (i = 0; i < n_entries; i++) + totals[j] += tracing_map_read_sum( + sort_entries[i]->elt, j); + } + for (i = 0; i < n_entries; i++) - hist_trigger_entry_print(m, hist_data, + hist_trigger_entry_print(m, hist_data, totals, sort_entries[i]->key, sort_entries[i]->elt); + kfree(totals); +out: tracing_map_destroy_sort_entries(sort_entries, n_entries); return n_entries; From patchwork Tue Oct 18 15:48:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Masami Hiramatsu (Google)" X-Patchwork-Id: 4232 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp2030621wrs; Tue, 18 Oct 2022 08:53:11 -0700 (PDT) X-Google-Smtp-Source: AMsMyM56umhykIMyUhwNTmo3VFxVxKvZydBceQOen1gla6ai+5uGmUUDmdx4YmfYRqGc+UreLtvG X-Received: by 2002:a17:907:d02:b0:78d:b3cd:a277 with SMTP id gn2-20020a1709070d0200b0078db3cda277mr2997386ejc.622.1666108391704; Tue, 18 Oct 2022 08:53:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666108391; cv=none; d=google.com; s=arc-20160816; b=sgviFsxk5e5qV1SgZJcYDoSUtkmeoOeTeOGY/CizrMZyaxaS8fCZ73GCzwLdCiPt73 YWnyfL2+clGzygSAVIJSPlrMsDRugdrdSp/rRWq//AG/u/aL589YYHr3GS80gyWIsw5d ji+w5L7qc11wUP3U0RI4Qjl69QxbnJXDp133rdG8Nl04uAN3fhb42KY/YWZOmeFrDcRj iOTYo5UlshiWyHfFO86QGw/xKQmjFBYkbOHP48yaUeX5Qm+/uWGyYznNb1MgHgy/7gFJ ezIRSfHeVmaSDvnEQPulylUblDceI04DGX/Ak0imy3Ha8f1udgcRaSm/AFbda8y0UXGb Kojg== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=F+GErAddKNwNIxsWrIIGTH2uxi86QbbMc4oRMq6dnAI=; b=O8Z9Wnmas+c8cCxZPsgz3zMQqceiE453J6bhK9cqLq8e1YBno+rpEA9QBYhjytaz1j szClBgaicovifyw+s56SJ7rqPgUvIoqa2hFUZiTCQluiz7yKFqT7wBOmsnCvah7Rioew aH3a3ZZlWZPWtcoh43/bI56on1YM6uU5gGNuV+qyXV+RZTTZAzfoQ+Ag6bxklQDorPJu kZ56lJm2jz3pqR7bIxWLQdTPnr3sdQwdYZlGVPCiBKMa7XgKJA3QT75ZJ+L7NXp5G3mq 2y6KI73JOVQS2Ctn2yLOJydwiEAow1KdZberhKXpS1dP59Vo+mpdm7LcKFuSH6FKHmta smjw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=omqo3zMG; 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 cw2-20020a056402228200b0045a0e39062esi11275479edb.76.2022.10.18.08.52.44; Tue, 18 Oct 2022 08:53:11 -0700 (PDT) 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=omqo3zMG; 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 S231166AbiJRPtJ (ORCPT + 99 others); Tue, 18 Oct 2022 11:49:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52504 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231209AbiJRPtE (ORCPT ); Tue, 18 Oct 2022 11:49:04 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A419EC96CB; Tue, 18 Oct 2022 08:49:03 -0700 (PDT) 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 dfw.source.kernel.org (Postfix) with ESMTPS id 36C7B61553; Tue, 18 Oct 2022 15:49:03 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CB405C433D7; Tue, 18 Oct 2022 15:49:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1666108142; bh=RLwoqJRqeFTwafUB02fXmZVW9I6vraK0k3Orkzottc4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=omqo3zMG6t22YGuZoKtLQ5cHF8jCpCLJZH79T6PLeita48GWyeHVLoWoR43eFfocv J3gwsU+Yby6yFxX7z0M4oz6geN4SW1m84JPYPeW3KL4aPen4G9pKiBleWQKWDS3HmN o4fIXNlVHS/cloTjlWfGAVk4XveffkRD/ZMhuVZ9udz5O5bf7NNVThgfU1sPwNHN5S aWRk0Yim+JxVg/0lrNmTbiKcrL3U7LN2kHEiRo/OCeVfdlD/hpaBdVREG2ryV5q1/Q P25eFREaHdCbWasrj3fMYU/U3hYOYnTT0d1ZcvPNubQeCQZJRH0mW/Q+MVUM2FdPiX hkZkklW91P9Mw== From: "Masami Hiramatsu (Google)" To: Steven Rostedt Cc: Tom Zanussi , linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 3/5] tracing: Add .graph suffix option to histogram value Date: Wed, 19 Oct 2022 00:48:59 +0900 Message-Id: <166610813953.56030.10944148382315789485.stgit@devnote2> X-Mailer: git-send-email 2.25.1 In-Reply-To: <166610811353.56030.10023036046735082272.stgit@devnote2> References: <166610811353.56030.10023036046735082272.stgit@devnote2> User-Agent: StGit/0.19 MIME-Version: 1.0 X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, 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?1747041273172283971?= X-GMAIL-MSGID: =?utf-8?q?1747041273172283971?= From: Masami Hiramatsu (Google) Add the .graph suffix which shows the bar graph of the histogram value. For example, the below example shows that the bar graph of the histogram of the runtime for each tasks. ------ # cd /sys/kernel/debug/tracing/ # echo hist:keys=pid:vals=runtime.graph:sort=pid > \ events/sched/sched_stat_runtime/trigger # sleep 10 # cat events/sched/sched_stat_runtime/hist # event histogram # # trigger info: hist:keys=pid:vals=hitcount,runtime.graph:sort=pid:size=2048 [active] # { pid: 14 } hitcount: 2 runtime: { pid: 16 } hitcount: 8 runtime: { pid: 26 } hitcount: 1 runtime: { pid: 57 } hitcount: 3 runtime: { pid: 61 } hitcount: 20 runtime: ### { pid: 66 } hitcount: 2 runtime: { pid: 70 } hitcount: 3 runtime: { pid: 72 } hitcount: 2 runtime: { pid: 145 } hitcount: 14 runtime: #################### { pid: 152 } hitcount: 5 runtime: ####### { pid: 153 } hitcount: 2 runtime: #### Totals: Hits: 62 Entries: 11 Dropped: 0 ------- Signed-off-by: Masami Hiramatsu (Google) Reviewed-by: Tom Zanussi Tested-by: Tom Zanussi --- kernel/trace/trace.c | 3 + kernel/trace/trace_events_hist.c | 77 ++++++++++++++++++++++++++++++-------- 2 files changed, 63 insertions(+), 17 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index e868f8bd06ec..98936d951aaa 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -5716,7 +5716,8 @@ static const char readme_msg[] = "\t .log2 display log2 value rather than raw number\n" "\t .buckets=size display values in groups of size rather than raw number\n" "\t .usecs display a common_timestamp in microseconds\n" - "\t .percent display a number of percentage value\n\n" + "\t .percent display a number of percentage value\n" + "\t .graph display a bar-graph of a value\n\n" "\t The 'pause' parameter can be used to pause an existing hist\n" "\t trigger or to start a hist trigger but not log any events\n" "\t until told to do so. 'continue' can be used to start or\n" diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index 65691608a390..f7d77fba91d7 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -507,6 +507,7 @@ enum hist_field_flags { HIST_FIELD_FL_BUCKET = 1 << 17, HIST_FIELD_FL_CONST = 1 << 18, HIST_FIELD_FL_PERCENT = 1 << 19, + HIST_FIELD_FL_GRAPH = 1 << 20, }; struct var_defs { @@ -1710,6 +1711,8 @@ static const char *get_hist_field_flags(struct hist_field *hist_field) flags_str = "usecs"; else if (hist_field->flags & HIST_FIELD_FL_PERCENT) flags_str = "percent"; + else if (hist_field->flags & HIST_FIELD_FL_GRAPH) + flags_str = "graph"; return flags_str; } @@ -2322,6 +2325,10 @@ parse_field(struct hist_trigger_data *hist_data, struct trace_event_file *file, if (*flags & (HIST_FIELD_FL_VAR | HIST_FIELD_FL_KEY)) goto error; *flags |= HIST_FIELD_FL_PERCENT; + } else if (strncmp(modifier, "graph", 5) == 0) { + if (*flags & (HIST_FIELD_FL_VAR | HIST_FIELD_FL_KEY)) + goto error; + *flags |= HIST_FIELD_FL_GRAPH; } else { error: hist_err(tr, HIST_ERR_BAD_FIELD_MODIFIER, errpos(modifier)); @@ -5313,20 +5320,52 @@ static inline unsigned int __get_percentage(u64 val, u64 total) return val ? UINT_MAX : 0; } +#define BAR_CHAR '#' + +static inline const char *__fill_bar_str(char *buf, int size, u64 val, u64 max) +{ + unsigned int len = __get_percentage(val, max); + int i; + + if (len == UINT_MAX) { + snprintf(buf, size, "[ERROR]"); + return buf; + } + + len = len * size / 10000; + for (i = 0; i < len && i < size; i++) + buf[i] = BAR_CHAR; + while (i < size) + buf[i++] = ' '; + buf[size] = '\0'; + + return buf; +} + +struct hist_val_stat { + u64 max; + u64 total; +}; + static void hist_trigger_print_val(struct seq_file *m, unsigned int idx, const char *field_name, unsigned long flags, - u64 *totals, struct tracing_map_elt *elt) + struct hist_val_stat *stats, + struct tracing_map_elt *elt) { u64 val = tracing_map_read_sum(elt, idx); unsigned int pc; + char bar[21]; if (flags & HIST_FIELD_FL_PERCENT) { - pc = __get_percentage(val, totals[idx]); + pc = __get_percentage(val, stats[idx].total); if (pc == UINT_MAX) seq_printf(m, " %s (%%):[ERROR]", field_name); else seq_printf(m, " %s (%%): %3u.%02u", field_name, pc / 100, pc % 100); + } else if (flags & HIST_FIELD_FL_GRAPH) { + seq_printf(m, " %s: %20s", field_name, + __fill_bar_str(bar, 20, val, stats[idx].max)); } else if (flags & HIST_FIELD_FL_HEX) { seq_printf(m, " %s: %10llx", field_name, val); } else { @@ -5336,7 +5375,7 @@ static void hist_trigger_print_val(struct seq_file *m, unsigned int idx, static void hist_trigger_entry_print(struct seq_file *m, struct hist_trigger_data *hist_data, - u64 *totals, + struct hist_val_stat *stats, void *key, struct tracing_map_elt *elt) { @@ -5347,7 +5386,7 @@ static void hist_trigger_entry_print(struct seq_file *m, hist_trigger_print_key(m, hist_data, key, elt); /* At first, show the raw hitcount always */ - hist_trigger_print_val(m, i, "hitcount", 0, totals, elt); + hist_trigger_print_val(m, i, "hitcount", 0, stats, elt); for (i = 1; i < hist_data->n_vals; i++) { field_name = hist_field_name(hist_data->fields[i], 0); @@ -5357,7 +5396,7 @@ static void hist_trigger_entry_print(struct seq_file *m, continue; seq_puts(m, " "); - hist_trigger_print_val(m, i, field_name, flags, totals, elt); + hist_trigger_print_val(m, i, field_name, flags, stats, elt); } print_actions(m, hist_data, elt); @@ -5371,7 +5410,8 @@ static int print_entries(struct seq_file *m, struct tracing_map_sort_entry **sort_entries = NULL; struct tracing_map *map = hist_data->map; int i, j, n_entries; - u64 *totals = NULL; + struct hist_val_stat *stats = NULL; + u64 val; n_entries = tracing_map_sort_entries(map, hist_data->sort_keys, hist_data->n_sort_keys, @@ -5379,28 +5419,33 @@ static int print_entries(struct seq_file *m, if (n_entries < 0) return n_entries; + /* Calculate the max and the total for each field if needed. */ for (j = 0; j < hist_data->n_vals; j++) { - if (!(hist_data->fields[j]->flags & HIST_FIELD_FL_PERCENT)) + if (!(hist_data->fields[j]->flags & + (HIST_FIELD_FL_PERCENT | HIST_FIELD_FL_GRAPH))) continue; - if (!totals) { - totals = kcalloc(hist_data->n_vals, sizeof(u64), - GFP_KERNEL); - if (!totals) { + if (!stats) { + stats = kcalloc(hist_data->n_vals, sizeof(*stats), + GFP_KERNEL); + if (!stats) { n_entries = -ENOMEM; goto out; } } - for (i = 0; i < n_entries; i++) - totals[j] += tracing_map_read_sum( - sort_entries[i]->elt, j); + for (i = 0; i < n_entries; i++) { + val = tracing_map_read_sum(sort_entries[i]->elt, j); + stats[j].total += val; + if (stats[j].max < val) + stats[j].max = val; + } } for (i = 0; i < n_entries; i++) - hist_trigger_entry_print(m, hist_data, totals, + hist_trigger_entry_print(m, hist_data, stats, sort_entries[i]->key, sort_entries[i]->elt); - kfree(totals); + kfree(stats); out: tracing_map_destroy_sort_entries(sort_entries, n_entries); From patchwork Tue Oct 18 15:49:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Masami Hiramatsu (Google)" X-Patchwork-Id: 4234 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp2030811wrs; Tue, 18 Oct 2022 08:53:43 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6TMGhHa3sJlO88Jgn12gOBJ/VoW+flP5aMjYFcLDh7EZhwo/iuncI0HvFf7IcNnx+nc96y X-Received: by 2002:a05:6402:181a:b0:458:c6a0:b69 with SMTP id g26-20020a056402181a00b00458c6a00b69mr3358325edy.52.1666108423579; Tue, 18 Oct 2022 08:53:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666108423; cv=none; d=google.com; s=arc-20160816; b=LYDMaZKQTX3nE14uZ5XxN0Uu15phQS4HNnlAtc6k3EkqPPgokPPz3G4/VpOChYfTXn WMOfz3QvOzs6LYZ3MZwyxFZTfqrtVUCgul/LF8s1wQiRWy9DeRth0pKl5hNB8biVAbNG bJp2svZ7rvBl6hoTwx43InDhK2Rz95oGDfoXs/wtbarrrbAjVDzAtNfnxaM7c9nbXdnl 6ELL7ZdRYC+jfPwJ11YOBC8pdKR8kE7YQWQtOlCfddgdePMoyYUmeL4mfDsMwDX3ShQH 1DdJFqX2qmiNX0iZ0mHWLHqAaoTDpgNb4eWf/zPhuNydjN0DBjeOYxlXyR2IDC4OGgAY o99g== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=TndBftsQQctRIqZVbM7wgtdwIKLq7uWldj0ssOF02uE=; b=J0yp+v90yPpLBMwShPejR2jMV7carMCm47dyCxKbRhqfdAlMq1RWaawqLJP6i/y2SA LCNnwK1yTHEujeSRDNPwaeaHmS4U8bzuZid3iyu6P7Rg3Nfga23qxTkuLLqPTTWi/c8L oMmMzZTsO42PLVwjLiLAQTYFtEor0NElfrmUgc9uCQtahqJWDtMcfd63vN9V1b4/DFxC RRchushPygOe2/uz+P0kNQsiZEcM1cRiEQ2JD0L7dcZvOVXLTMt9wHlvZSPKE2rwBBOw pWAO9NyDNR8cAF1E8r649tU8iVcA4FptAsWPVyF7DEVAxac6TApbn+9Am9m5RIrVMEpl 5NRg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=F+Iyk2p3; 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 sd41-20020a1709076e2900b0078d4962a32asi13135136ejc.961.2022.10.18.08.53.18; Tue, 18 Oct 2022 08:53:43 -0700 (PDT) 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=F+Iyk2p3; 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 S230025AbiJRPtZ (ORCPT + 99 others); Tue, 18 Oct 2022 11:49:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53032 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231210AbiJRPtS (ORCPT ); Tue, 18 Oct 2022 11:49:18 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 160A2C97D6; Tue, 18 Oct 2022 08:49:12 -0700 (PDT) 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 dfw.source.kernel.org (Postfix) with ESMTPS id 567A8615E1; Tue, 18 Oct 2022 15:49:11 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id ED7B0C433D7; Tue, 18 Oct 2022 15:49:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1666108150; bh=cLjL2m5ZM1Avq6VanJIjfB0auwkZC9i9cNAbWUKDzpM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=F+Iyk2p3Qe4BS7WDPbsAdnQs6XNVOvn13FBhhVWHtYkScEX9vkUKig0FuW2c1icAq krEwn/fE8rnAgPH/1iHg4lrDBr7zs31w7oz14UfmOSGgJzfAitSe/1EIZcZFtZLWh5 bYSbmed5vJ6dXYjUcbRN+bSvrA3L0ojSvw7GX9HleXPCQnFJe0dw0I3GeuldhUzhac TkQ23iO5YRtSrPu2meD7jW8QdKXYVw4/Rz/JBaBP70S1DM/J8F8UAPdqKKrNrA0A/a fvphMwC/iSeZHapbk3Y/QgrXwaXnQBEatxAbxB/A72HkRdu0LqzYyItwCq6SOWYua2 are8pWPYxmTKA== From: "Masami Hiramatsu (Google)" To: Steven Rostedt Cc: Tom Zanussi , linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 4/5] tracing: Add nohitcount option for suppressing display of raw hitcount Date: Wed, 19 Oct 2022 00:49:08 +0900 Message-Id: <166610814787.56030.4980636083486339906.stgit@devnote2> X-Mailer: git-send-email 2.25.1 In-Reply-To: <166610811353.56030.10023036046735082272.stgit@devnote2> References: <166610811353.56030.10023036046735082272.stgit@devnote2> User-Agent: StGit/0.19 MIME-Version: 1.0 X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, 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?1747041305980625200?= X-GMAIL-MSGID: =?utf-8?q?1747041305980625200?= From: Masami Hiramatsu (Google) Add 'nohitcount' ('NOHC' for short) option for suppressing display of the raw hitcount column in the histogram. Note that you must specify at least one value except raw 'hitcount' when you specify this nohitcount option. # cd /sys/kernel/debug/tracing/ # echo hist:keys=pid:vals=runtime.percent,runtime.graph:sort=pid:NOHC > \ events/sched/sched_stat_runtime/trigger # sleep 10 # cat events/sched/sched_stat_runtime/hist # event histogram # # trigger info: hist:keys=pid:vals=runtime.percent,runtime.graph:sort=pid:size=2048:nohitcount [active] # { pid: 8 } runtime (%): 3.02 runtime: # { pid: 14 } runtime (%): 2.25 runtime: { pid: 16 } runtime (%): 2.25 runtime: { pid: 26 } runtime (%): 0.17 runtime: { pid: 61 } runtime (%): 11.52 runtime: #### { pid: 67 } runtime (%): 1.56 runtime: { pid: 68 } runtime (%): 0.84 runtime: { pid: 76 } runtime (%): 0.92 runtime: { pid: 117 } runtime (%): 2.50 runtime: # { pid: 146 } runtime (%): 49.88 runtime: #################### { pid: 157 } runtime (%): 16.63 runtime: ###### { pid: 158 } runtime (%): 8.38 runtime: ### Signed-off-by: Masami Hiramatsu (Google) Reviewed-by: Tom Zanussi Tested-by: Tom Zanussi --- kernel/trace/trace.c | 3 +++ kernel/trace/trace_events_hist.c | 34 ++++++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 98936d951aaa..feac58307684 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -5669,6 +5669,7 @@ static const char readme_msg[] = "\t [:size=#entries]\n" "\t [:pause][:continue][:clear]\n" "\t [:name=histname1]\n" + "\t [:nohitcount]\n" "\t [:.]\n" "\t [if ]\n\n" "\t Note, special fields can be used as well:\n" @@ -5725,6 +5726,8 @@ static const char readme_msg[] = "\t The 'clear' parameter will clear the contents of a running\n" "\t hist trigger and leave its current paused/active state\n" "\t unchanged.\n\n" + "\t The 'nohitcount' (or NOHC) parameter will suppress display of\n" + "\t raw hitcount in the histogram.\n\n" "\t The enable_hist and disable_hist triggers can be used to\n" "\t have one event conditionally start and stop another event's\n" "\t already-attached hist trigger. The syntax is analogous to\n" diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index f7d77fba91d7..125d68718bad 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -69,7 +69,8 @@ C(INVALID_STR_OPERAND, "String type can not be an operand in expression"), \ C(EXPECT_NUMBER, "Expecting numeric literal"), \ C(UNARY_MINUS_SUBEXPR, "Unary minus not supported in sub-expressions"), \ - C(DIVISION_BY_ZERO, "Division by zero"), + C(DIVISION_BY_ZERO, "Division by zero"), \ + C(NEED_NOHC_VAL, "Non-hitcount value is required for 'nohitcount'"), #undef C #define C(a, b) HIST_ERR_##a @@ -526,6 +527,7 @@ struct hist_trigger_attrs { bool cont; bool clear; bool ts_in_usecs; + bool no_hitcount; unsigned int map_bits; char *assignment_str[TRACING_MAP_VARS_MAX]; @@ -1550,7 +1552,10 @@ parse_hist_trigger_attrs(struct trace_array *tr, char *trigger_str) ret = parse_assignment(tr, str, attrs); if (ret) goto free; - } else if (strcmp(str, "pause") == 0) + } else if (strcmp(str, "nohitcount") == 0 || + strcmp(str, "NOHC") == 0) + attrs->no_hitcount = true; + else if (strcmp(str, "pause") == 0) attrs->pause = true; else if ((strcmp(str, "cont") == 0) || (strcmp(str, "continue") == 0)) @@ -4377,6 +4382,12 @@ static int create_val_fields(struct hist_trigger_data *hist_data, if (fields_str && (strcmp(fields_str, "hitcount") != 0)) ret = -EINVAL; out: + /* There is only raw hitcount but nohitcount suppresses it. */ + if (j == 1 && hist_data->attrs->no_hitcount) { + hist_err(hist_data->event_file->tr, HIST_ERR_NEED_NOHC_VAL, 0); + ret = -ENOENT; + } + return ret; } @@ -5385,13 +5396,13 @@ static void hist_trigger_entry_print(struct seq_file *m, hist_trigger_print_key(m, hist_data, key, elt); - /* At first, show the raw hitcount always */ - hist_trigger_print_val(m, i, "hitcount", 0, stats, elt); + /* At first, show the raw hitcount if !nohitcount */ + if (!hist_data->attrs->no_hitcount) + hist_trigger_print_val(m, i, "hitcount", 0, stats, elt); for (i = 1; i < hist_data->n_vals; i++) { field_name = hist_field_name(hist_data->fields[i], 0); flags = hist_data->fields[i]->flags; - if (flags & HIST_FIELD_FL_VAR || flags & HIST_FIELD_FL_EXPR) continue; @@ -5836,6 +5847,7 @@ static int event_hist_trigger_print(struct seq_file *m, struct hist_trigger_data *hist_data = data->private_data; struct hist_field *field; bool have_var = false; + bool show_val = false; unsigned int i; seq_puts(m, HIST_PREFIX); @@ -5866,12 +5878,16 @@ static int event_hist_trigger_print(struct seq_file *m, continue; } - if (i == HITCOUNT_IDX) + if (i == HITCOUNT_IDX) { + if (hist_data->attrs->no_hitcount) + continue; seq_puts(m, "hitcount"); - else { - seq_puts(m, ","); + } else { + if (show_val) + seq_puts(m, ","); hist_field_print(m, field); } + show_val = true; } if (have_var) { @@ -5922,6 +5938,8 @@ static int event_hist_trigger_print(struct seq_file *m, seq_printf(m, ":size=%u", (1 << hist_data->map->map_bits)); if (hist_data->enable_timestamps) seq_printf(m, ":clock=%s", hist_data->attrs->clock); + if (hist_data->attrs->no_hitcount) + seq_puts(m, ":nohitcount"); print_actions_spec(m, hist_data); From patchwork Tue Oct 18 15:49:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Masami Hiramatsu (Google)" X-Patchwork-Id: 4235 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp2030920wrs; Tue, 18 Oct 2022 08:53:58 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4+R4KvXodz+yCvupzNYb/tysJQRejCpNqgqburp5EvsgL0DAnEFtiDzKFhTdkGSSsbr97e X-Received: by 2002:a17:90b:17cf:b0:20d:72eb:fd0c with SMTP id me15-20020a17090b17cf00b0020d72ebfd0cmr4267507pjb.217.1666108438424; Tue, 18 Oct 2022 08:53:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666108438; cv=none; d=google.com; s=arc-20160816; b=vaTvZUQktkQsOdyFL/++nZ/UhVdh4441V9KOE8YJT6OQcl72wkA3kUZhk/rvw6Gzkm JwPVXHgFpgZxmFItLPrcVg1k7XM+NWiYCUkHFJx1WE1HMpOzIVJKOkotpuQkHBSFpCCy Tiaj4Zmt3uv+mSwrgu2TicGj26LtCo2ZEIwGtfEzzlp+LQGt4fLBIKCOwRqbYrciM+7T DYCslEIoYWf/0eA8y3yZrvtxk5Z6RMrmi5eE55SDGcYc4t40PhZcFjGsyAudLB3dIlkH Wf+wcbj9K/GO1JTVHjDi3DyGMvkrNpURBfiCEWq84fjzPmhDrDac4WJg7Lwe9zBbOpMd 69hw== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=f1iPmmGeaiTUMoQZmSnnvTxv65tnj9yj9gLt9ikFOdc=; b=U1XKOeygJ+SmAwk+Y5WymQhIIBPkHpvxTYZMaGtoWd9Hd7f6o3RyiRfxbdGbsSOIrn B5AO/OQWRApf4zKINNskKHqHYwq43L0goHYSQ2fnv5eOHfYJlq90apkNGJVmjvVaKyiI YY1HfdmoOjQKs0eUCIYmiTk5FMZVfvy6l7eqgvNRACw5QE7cG/33X3bMkxdkcwe8mO9t t5/8k5L++KZBUweSjwHmfOnm/ZWQazg22X1Kz7QfJFph6YM8NzTYkk2Z5dTAfytTmj+T 36xu+ZWj6RD9I139ceNglR4WqhkZaQo4YvQRVTrpfMsiboZS4kBtHIKvpLMJH5sMrS8v /XgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=p80qb6Sq; 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 x22-20020a17090a8a9600b0020d5dfb9d69si14304274pjn.187.2022.10.18.08.53.42; Tue, 18 Oct 2022 08:53:58 -0700 (PDT) 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=p80qb6Sq; 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 S231334AbiJRPuF (ORCPT + 99 others); Tue, 18 Oct 2022 11:50:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53036 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231266AbiJRPte (ORCPT ); Tue, 18 Oct 2022 11:49:34 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6910CC96DF; Tue, 18 Oct 2022 08:49:20 -0700 (PDT) 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 dfw.source.kernel.org (Postfix) with ESMTPS id BE7F161553; Tue, 18 Oct 2022 15:49:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5FAF7C433B5; Tue, 18 Oct 2022 15:49:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1666108159; bh=Se1jgISa/ShCTPfJ44VmplkGxxjQVjFu0CQ3G/F1Jts=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=p80qb6SqOk2bAztterNKvKM1efYuyA7UcmMPFQUbfGniRC9XQF3qNVweqGx0lfwRQ C0FdZVOl504+BXTO2Us1HWumNIvFjZ9r+ZDyYSHJcpnTcnIvnoAezFK2k+Of/dmXO9 C6hOw28Sm+omxzbMKWbbFp1HgOu4sgqvPwERy/PbaTdt2ig2eJNH+yZ1nWFke8UlKn tasl+dXZXh43631Dq3QFt8oJ62mDSHZbD45kL4SPKi1Q8POsLWnnMls8o8AmwDzcTG 6potF/gD2A0DoKjwsbW0/fNh5YhgGJQZr2YgMUwrLJo1MaWXBlKGKiELx1hDrUUNBz ufdl184sW4SXA== From: "Masami Hiramatsu (Google)" To: Steven Rostedt Cc: Tom Zanussi , linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 5/5] tracing: docs: Update histogram doc for .percent/.graph and 'nohitcount' Date: Wed, 19 Oct 2022 00:49:16 +0900 Message-Id: <166610815604.56030.4124933216911828519.stgit@devnote2> X-Mailer: git-send-email 2.25.1 In-Reply-To: <166610811353.56030.10023036046735082272.stgit@devnote2> References: <166610811353.56030.10023036046735082272.stgit@devnote2> User-Agent: StGit/0.19 MIME-Version: 1.0 X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, 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?1747041321723161309?= X-GMAIL-MSGID: =?utf-8?q?1747041321723161309?= From: Masami Hiramatsu (Google) Update histogram document for .percent/.graph suffixes and 'nohitcount' option. Signed-off-by: Masami Hiramatsu (Google) Reviewed-by: Tom Zanussi Tested-by: Tom Zanussi --- Documentation/trace/histogram.rst | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Documentation/trace/histogram.rst b/Documentation/trace/histogram.rst index 859fd1b76c63..b2da4e9c62e8 100644 --- a/Documentation/trace/histogram.rst +++ b/Documentation/trace/histogram.rst @@ -25,7 +25,7 @@ Documentation written by Tom Zanussi hist:keys=[:values=] [:sort=][:size=#entries][:pause][:continue] - [:clear][:name=histname1][:.] [if ] + [:clear][:name=histname1][:nohitcount][:.] [if ] When a matching event is hit, an entry is added to a hash table using the key(s) and value(s) named. Keys and values correspond to @@ -79,6 +79,8 @@ Documentation written by Tom Zanussi .log2 display log2 value rather than raw number .buckets=size display grouping of values rather than raw number .usecs display a common_timestamp in microseconds + .percent display a number of percentage value + .graph display a bar-graph of a value ============= ================================================= Note that in general the semantics of a given field aren't @@ -137,6 +139,12 @@ Documentation written by Tom Zanussi existing trigger, rather than via the '>' operator, which will cause the trigger to be removed through truncation. + The 'nohitcount' (or NOHC) parameter will suppress display of + raw hitcount in the histogram. This option requires at least one + value field which is not a 'raw hitcount'. For example, + 'hist:...:vals=hitcount:nohitcount' is rejected, but + 'hist:...:vals=hitcount.percent:nohitcount' is OK. + - enable_hist/disable_hist The enable_hist and disable_hist triggers can be used to have one