Message ID | 20231212192317.0fb6b101@gandalf.local.home |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp8088327vqy; Tue, 12 Dec 2023 16:22:45 -0800 (PST) X-Google-Smtp-Source: AGHT+IGxFq7lsnZlwMuvPACfuurtSuM/A2eqgo+u+6czVSaNMoeW73qWbOrgngoD3whZ113KyvWl X-Received: by 2002:a17:902:6e10:b0:1d0:44fd:feb4 with SMTP id u16-20020a1709026e1000b001d044fdfeb4mr3288538plk.10.1702426965525; Tue, 12 Dec 2023 16:22:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702426965; cv=none; d=google.com; s=arc-20160816; b=bpGyhuSAb2UD3QalfinUUcYVk/X7k1kzKWQFOTHRd8C8zvm91eB/KIf7kq5a8opTST 3ByClX5Kdvz8NRqS60iIlyyGyaUtbnp5rOuJepM/SnRxXeyFgfgYnkSMGHeeE4agEyuU If8fxO4zzzFL09UScfpILYGZFifELVD+UzkpaFY6N95OUgBoMAyXt9c9wvhHhfgugScL 6Nv6fdUtr1LqhivzJAcmRTiwbaSCEdlbaLgL5YMsBzergFLvaL2axjDUysrtf10jGnP8 AAkZpo/fT7rltuWeog5CiZyZ9/WPP9IqcRrJ848hfFwxIwlrBULVUkzNKZxq2er8nEgg LDoA== 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:subject:cc:to:from:date; bh=IbWr8K2Vx+/NXeqI7vQRBzQqxCb0YrguBFFw05g/4b8=; fh=NdLKlkF21tthkjg7TFYsCcVE9+mNBwBIZGGjccGgMeM=; b=PQbf3hWB/e/b3GjzpN64/BI4gFk5M/ENHCD6l3E/0tVlIF1L+vX2ukMQZbk9ZJLo9n 6GYJqxUoaKsTKJ8LJPNSxLfeO6s7nlSf6vm5AD79qUfiPpBNgXoBCcRotTvcs6mrbc6C 7AOIGQ3Ay0i0OXiVFy7DBYnNHN+3kE5fvFdc6kdit7adpgd1APRS+hfwpSI0NuWiErX3 ZN+80h/zOb11XcBiTakJJF8qRoRs0AmAAoe0bGTRE/b6tUElzCL4bZYCVYC5lhxBGWUK ErktRmhA27eXGVr3qRToCSONVvQR/rnYfSnqXWjaneRptUTZDDnpItXgyJ0/wLhBZN64 kVDw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id bj3-20020a170902850300b001d092e9cbbfsi8540136plb.445.2023.12.12.16.22.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 16:22:45 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 912A8804A64D; Tue, 12 Dec 2023 16:22:39 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377735AbjLMAWa (ORCPT <rfc822;dexuan.linux@gmail.com> + 99 others); Tue, 12 Dec 2023 19:22:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58476 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232620AbjLMAW3 (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Tue, 12 Dec 2023 19:22:29 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 503CE92 for <linux-kernel@vger.kernel.org>; Tue, 12 Dec 2023 16:22:36 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 04D0FC433C7; Wed, 13 Dec 2023 00:22:34 +0000 (UTC) Date: Tue, 12 Dec 2023 19:23:17 -0500 From: Steven Rostedt <rostedt@goodmis.org> To: LKML <linux-kernel@vger.kernel.org>, Linux Trace Kernel <linux-trace-kernel@vger.kernel.org> Cc: Masami Hiramatsu <mhiramat@kernel.org>, Mark Rutland <mark.rutland@arm.com>, Mathieu Desnoyers <mathieu.desnoyers@efficios.com>, Shuah Khan <shuah@kernel.org>, linux-kselftest@vger.kernel.org Subject: [PATCH v3] tracing/selftests: Add test to test the trace_marker Message-ID: <20231212192317.0fb6b101@gandalf.local.home> X-Mailer: Claws Mail 3.19.1 (GTK+ 2.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Tue, 12 Dec 2023 16:22:39 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785124058081872150 X-GMAIL-MSGID: 1785124058081872150 |
Series |
[v3] tracing/selftests: Add test to test the trace_marker
|
|
Commit Message
Steven Rostedt
Dec. 13, 2023, 12:23 a.m. UTC
From: "Steven Rostedt (Google)" <rostedt@goodmis.org> Add a test that writes longs strings, some over the size of the sub buffer and make sure that the entire content is there. Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> --- Changes since v2: https://lore.kernel.org/linux-trace-kernel/20231212151632.25c9b67d@gandalf.local.home - Realized with the upcoming change of the dynamic subbuffer sizes, that this test will fail if the subbuffer is bigger than what the trace_seq can hold. Now the trace_marker does not always utilize the full subbuffer but the size of the trace_seq instead. As that size isn't available to user space, we can only just make sure all content is there. .../ftrace/test.d/00basic/trace_marker.tc | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100755 tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc
Comments
The REs used in the sed commands below may be simplified as shown if desired. On Wed, Dec 13, 2023 at 2:22 AM Steven Rostedt <rostedt@goodmis.org> wrote: > > From: "Steven Rostedt (Google)" <rostedt@goodmis.org> > > Add a test that writes longs strings, some over the size of the sub buffer > and make sure that the entire content is there. > > Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> > --- > Changes since v2: https://lore.kernel.org/linux-trace-kernel/20231212151632.25c9b67d@gandalf.local.home > > - Realized with the upcoming change of the dynamic subbuffer sizes, that > this test will fail if the subbuffer is bigger than what the trace_seq > can hold. Now the trace_marker does not always utilize the full subbuffer > but the size of the trace_seq instead. As that size isn't available to > user space, we can only just make sure all content is there. > > .../ftrace/test.d/00basic/trace_marker.tc | 82 +++++++++++++++++++ > 1 file changed, 82 insertions(+) > create mode 100755 tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc > > diff --git a/tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc b/tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc > new file mode 100755 > index 000000000000..b24aff5807df > --- /dev/null > +++ b/tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc > @@ -0,0 +1,82 @@ > +#!/bin/sh > +# SPDX-License-Identifier: GPL-2.0 > +# description: Basic tests on writing to trace_marker > +# requires: trace_marker > +# flags: instance > + > +get_buffer_data_size() { > + sed -ne 's/^.*data.*size:\([0-9][0-9]*\).*/\1/p' events/header_page sed -n 's!.*data.*size:\([^;]*\).*!\1!p' events/header_page > +} > + > +get_buffer_data_offset() { > + sed -ne 's/^.*data.*offset:\([0-9][0-9]*\).*/\1/p' events/header_page sed -n 's!.*data.*offset:\([^;]*\).*!\1!p' events/header_page > +} > + > +get_event_header_size() { > + type_len=`sed -ne 's/^.*type_len.*:[^0-9]*\([0-9][0-9]*\).*/\1/p' events/header_event` type_len=`sed -n '/type_len.*bits/s![^0-9]*!!gp' events/header_event` > + time_len=`sed -ne 's/^.*time_delta.*:[^0-9]*\([0-9][0-9]*\).*/\1/p' events/header_event` time_len=`sed -n '/time_delta/s![^0-9]*!!gp' events/header_event` > + array_len=`sed -ne 's/^.*array.*:[^0-9]*\([0-9][0-9]*\).*/\1/p' events/header_event` array_len=`sed -n '/array/s![^0-9]*!!gp' events/header_event` > + total_bits=$((type_len+time_len+array_len)) > + total_bits=$((total_bits+7)) > + echo $((total_bits/8)) > +} > + > +get_print_event_buf_offset() { > + sed -ne 's/^.*buf.*offset:\([0-9][0-9]*\).*/\1/p' events/ftrace/print/format sed -n 's!.*buf.*offset:\([^;]*\).*!\1!p' events/ftrace/print/format > +} > + > +event_header_size=`get_event_header_size` > +print_header_size=`get_print_event_buf_offset` > + > +data_offset=`get_buffer_data_offset` > + > +marker_meta=$((event_header_size+print_header_size)) > + > +make_str() { > + cnt=$1 > + # subtract two for \n\0 as marker adds these > + cnt=$((cnt-2)) > + printf -- 'X%.0s' $(seq $cnt) > +} > + > +write_buffer() { > + size=$1 > + > + str=`make_str $size` > + > + # clear the buffer > + echo > trace > + > + # write the string into the marker > + echo -n $str > trace_marker > + > + echo $str > +} > + > +test_buffer() { > + > + size=`get_buffer_data_size` > + oneline_size=$((size-marker_meta)) > + echo size = $size > + echo meta size = $marker_meta > + > + # Now add a little more the meta data overhead will overflow > + > + str=`write_buffer $size` > + > + # Make sure the line was broken > + new_str=`awk ' /tracing_mark_write:/ { sub(/^.*tracing_mark_write: /,"");printf "%s", $0; exit}' trace` > + > + if [ "$new_str" = "$str" ]; then > + exit fail; > + fi > + > + # Make sure the entire line can be found > + new_str=`awk ' /tracing_mark_write:/ { sub(/^.*tracing_mark_write: */,"");printf "%s", $0; }' trace` > + > + if [ "$new_str" != "$str" ]; then > + exit fail; > + fi > +} > + > +test_buffer > -- > 2.42.0 >
On Wed, 13 Dec 2023 10:09:50 +0200 Alexander Kapshuk <alexander.kapshuk@gmail.com> wrote: > The REs used in the sed commands below may be simplified as shown if desired. > > On Wed, Dec 13, 2023 at 2:22 AM Steven Rostedt <rostedt@goodmis.org> wrote: > > > > From: "Steven Rostedt (Google)" <rostedt@goodmis.org> > > > > Add a test that writes longs strings, some over the size of the sub buffer > > and make sure that the entire content is there. > > > > Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> > > --- > > Changes since v2: https://lore.kernel.org/linux-trace-kernel/20231212151632.25c9b67d@gandalf.local.home > > > > - Realized with the upcoming change of the dynamic subbuffer sizes, that > > this test will fail if the subbuffer is bigger than what the trace_seq > > can hold. Now the trace_marker does not always utilize the full subbuffer > > but the size of the trace_seq instead. As that size isn't available to > > user space, we can only just make sure all content is there. > > > > .../ftrace/test.d/00basic/trace_marker.tc | 82 +++++++++++++++++++ > > 1 file changed, 82 insertions(+) > > create mode 100755 tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc > > > > diff --git a/tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc b/tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc > > new file mode 100755 > > index 000000000000..b24aff5807df > > --- /dev/null > > +++ b/tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc > > @@ -0,0 +1,82 @@ > > +#!/bin/sh > > +# SPDX-License-Identifier: GPL-2.0 > > +# description: Basic tests on writing to trace_marker > > +# requires: trace_marker > > +# flags: instance > > + > > +get_buffer_data_size() { > > + sed -ne 's/^.*data.*size:\([0-9][0-9]*\).*/\1/p' events/header_page > sed -n 's!.*data.*size:\([^;]*\).*!\1!p' events/header_page Not sure the above change can be considered simpler, but it also loses out showing what exactly is being done. With the original, I have: sed -ne 's/^.*data.*size:\([0-9][0-9]*\).*/\1/p' events/header_page Which is obvious that I'm grabbing a number for the size field. sed -n 's!.*data.*size:\([^;]*\).*!\1!p' events/header_page Shows that I'm grabbing something after size. > > +} > > + > > +get_buffer_data_offset() { > > + sed -ne 's/^.*data.*offset:\([0-9][0-9]*\).*/\1/p' events/header_page > sed -n 's!.*data.*offset:\([^;]*\).*!\1!p' events/header_page Same here. > > +} > > + > > +get_event_header_size() { > > + type_len=`sed -ne 's/^.*type_len.*:[^0-9]*\([0-9][0-9]*\).*/\1/p' events/header_event` > type_len=`sed -n '/type_len.*bits/s![^0-9]*!!gp' > events/header_event` Honestly, the above may be "simplier" but I can't make out what exactly that line is doing without going back and looking at the text that's in the format field. > > > + time_len=`sed -ne 's/^.*time_delta.*:[^0-9]*\([0-9][0-9]*\).*/\1/p' events/header_event` > time_len=`sed -n '/time_delta/s![^0-9]*!!gp' events/header_event` > > > + array_len=`sed -ne 's/^.*array.*:[^0-9]*\([0-9][0-9]*\).*/\1/p' events/header_event` > array_len=`sed -n '/array/s![^0-9]*!!gp' events/header_event` > > > + total_bits=$((type_len+time_len+array_len)) > > + total_bits=$((total_bits+7)) > > + echo $((total_bits/8)) > > +} > > + > > +get_print_event_buf_offset() { > > + sed -ne 's/^.*buf.*offset:\([0-9][0-9]*\).*/\1/p' events/ftrace/print/format > sed -n 's!.*buf.*offset:\([^;]*\).*!\1!p' events/ftrace/print/format > > +} > > + Yeah, thanks for the suggestions, but I rather have it be more readable than "simplified". I write perl code the same way. I do not write it like any perl developer would, because I write it like C code. I want my code to be easily understandable. RE can become extremely obfuscated. So, even though my REs are not the simplest, they tend to be rather easy to understand what they are doing, and why. Cheers, -- Steve
On Wed, Dec 13, 2023 at 4:57 PM Steven Rostedt <rostedt@goodmis.org> wrote: > > On Wed, 13 Dec 2023 10:09:50 +0200 > Alexander Kapshuk <alexander.kapshuk@gmail.com> wrote: > > > The REs used in the sed commands below may be simplified as shown if desired. > > > > On Wed, Dec 13, 2023 at 2:22 AM Steven Rostedt <rostedt@goodmis.org> wrote: > > > > > > From: "Steven Rostedt (Google)" <rostedt@goodmis.org> > > > > > > Add a test that writes longs strings, some over the size of the sub buffer > > > and make sure that the entire content is there. > > > > > > Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> > > > --- > > > Changes since v2: https://lore.kernel.org/linux-trace-kernel/20231212151632.25c9b67d@gandalf.local.home > > > > > > - Realized with the upcoming change of the dynamic subbuffer sizes, that > > > this test will fail if the subbuffer is bigger than what the trace_seq > > > can hold. Now the trace_marker does not always utilize the full subbuffer > > > but the size of the trace_seq instead. As that size isn't available to > > > user space, we can only just make sure all content is there. > > > > > > .../ftrace/test.d/00basic/trace_marker.tc | 82 +++++++++++++++++++ > > > 1 file changed, 82 insertions(+) > > > create mode 100755 tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc > > > > > > diff --git a/tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc b/tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc > > > new file mode 100755 > > > index 000000000000..b24aff5807df > > > --- /dev/null > > > +++ b/tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc > > > @@ -0,0 +1,82 @@ > > > +#!/bin/sh > > > +# SPDX-License-Identifier: GPL-2.0 > > > +# description: Basic tests on writing to trace_marker > > > +# requires: trace_marker > > > +# flags: instance > > > + > > > +get_buffer_data_size() { > > > + sed -ne 's/^.*data.*size:\([0-9][0-9]*\).*/\1/p' events/header_page > > sed -n 's!.*data.*size:\([^;]*\).*!\1!p' events/header_page > > Not sure the above change can be considered simpler, but it also loses out > showing what exactly is being done. > > With the original, I have: > > sed -ne 's/^.*data.*size:\([0-9][0-9]*\).*/\1/p' events/header_page > > Which is obvious that I'm grabbing a number for the size field. > > sed -n 's!.*data.*size:\([^;]*\).*!\1!p' events/header_page > > Shows that I'm grabbing something after size. > > > > > > +} > > > + > > > +get_buffer_data_offset() { > > > + sed -ne 's/^.*data.*offset:\([0-9][0-9]*\).*/\1/p' events/header_page > > sed -n 's!.*data.*offset:\([^;]*\).*!\1!p' events/header_page > > Same here. > > > > +} > > > + > > > +get_event_header_size() { > > > + type_len=`sed -ne 's/^.*type_len.*:[^0-9]*\([0-9][0-9]*\).*/\1/p' events/header_event` > > type_len=`sed -n '/type_len.*bits/s![^0-9]*!!gp' > > events/header_event` > > Honestly, the above may be "simplier" but I can't make out what exactly > that line is doing without going back and looking at the text that's in the > format field. > > > > > > + time_len=`sed -ne 's/^.*time_delta.*:[^0-9]*\([0-9][0-9]*\).*/\1/p' events/header_event` > > time_len=`sed -n '/time_delta/s![^0-9]*!!gp' events/header_event` > > > > > + array_len=`sed -ne 's/^.*array.*:[^0-9]*\([0-9][0-9]*\).*/\1/p' events/header_event` > > array_len=`sed -n '/array/s![^0-9]*!!gp' events/header_event` > > > > > + total_bits=$((type_len+time_len+array_len)) > > > + total_bits=$((total_bits+7)) > > > + echo $((total_bits/8)) > > > +} > > > + > > > +get_print_event_buf_offset() { > > > + sed -ne 's/^.*buf.*offset:\([0-9][0-9]*\).*/\1/p' events/ftrace/print/format > > sed -n 's!.*buf.*offset:\([^;]*\).*!\1!p' events/ftrace/print/format > > > +} > > > + > > Yeah, thanks for the suggestions, but I rather have it be more readable > than "simplified". I write perl code the same way. I do not write it like > any perl developer would, because I write it like C code. I want my code to > be easily understandable. > > RE can become extremely obfuscated. So, even though my REs are not the > simplest, they tend to be rather easy to understand what they are doing, > and why. > > Cheers, > > -- Steve Fair enough. Thanks.
diff --git a/tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc b/tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc new file mode 100755 index 000000000000..b24aff5807df --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc @@ -0,0 +1,82 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# description: Basic tests on writing to trace_marker +# requires: trace_marker +# flags: instance + +get_buffer_data_size() { + sed -ne 's/^.*data.*size:\([0-9][0-9]*\).*/\1/p' events/header_page +} + +get_buffer_data_offset() { + sed -ne 's/^.*data.*offset:\([0-9][0-9]*\).*/\1/p' events/header_page +} + +get_event_header_size() { + type_len=`sed -ne 's/^.*type_len.*:[^0-9]*\([0-9][0-9]*\).*/\1/p' events/header_event` + time_len=`sed -ne 's/^.*time_delta.*:[^0-9]*\([0-9][0-9]*\).*/\1/p' events/header_event` + array_len=`sed -ne 's/^.*array.*:[^0-9]*\([0-9][0-9]*\).*/\1/p' events/header_event` + total_bits=$((type_len+time_len+array_len)) + total_bits=$((total_bits+7)) + echo $((total_bits/8)) +} + +get_print_event_buf_offset() { + sed -ne 's/^.*buf.*offset:\([0-9][0-9]*\).*/\1/p' events/ftrace/print/format +} + +event_header_size=`get_event_header_size` +print_header_size=`get_print_event_buf_offset` + +data_offset=`get_buffer_data_offset` + +marker_meta=$((event_header_size+print_header_size)) + +make_str() { + cnt=$1 + # subtract two for \n\0 as marker adds these + cnt=$((cnt-2)) + printf -- 'X%.0s' $(seq $cnt) +} + +write_buffer() { + size=$1 + + str=`make_str $size` + + # clear the buffer + echo > trace + + # write the string into the marker + echo -n $str > trace_marker + + echo $str +} + +test_buffer() { + + size=`get_buffer_data_size` + oneline_size=$((size-marker_meta)) + echo size = $size + echo meta size = $marker_meta + + # Now add a little more the meta data overhead will overflow + + str=`write_buffer $size` + + # Make sure the line was broken + new_str=`awk ' /tracing_mark_write:/ { sub(/^.*tracing_mark_write: /,"");printf "%s", $0; exit}' trace` + + if [ "$new_str" = "$str" ]; then + exit fail; + fi + + # Make sure the entire line can be found + new_str=`awk ' /tracing_mark_write:/ { sub(/^.*tracing_mark_write: */,"");printf "%s", $0; }' trace` + + if [ "$new_str" != "$str" ]; then + exit fail; + fi +} + +test_buffer