From patchwork Tue Dec 12 18:54:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 177515 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7932451vqy; Tue, 12 Dec 2023 10:54:05 -0800 (PST) X-Google-Smtp-Source: AGHT+IEBgLMM4Q9vo6k4rZeGom95umneiuR+YPHiIIDoai9e8U2OAW1/3m9FeAwb0vJxAbecbk1t X-Received: by 2002:a17:902:f94f:b0:1d3:44ae:7b11 with SMTP id kx15-20020a170902f94f00b001d344ae7b11mr674267plb.68.1702407245168; Tue, 12 Dec 2023 10:54:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702407245; cv=none; d=google.com; s=arc-20160816; b=vaHl/gGVesQ7mTB2W8QnaMjUnOLCbRjqPV1nBxgGBQcEYUZQS87dUVDss5w46ZJPvp wr5ZxXp9aNkQogruemDdy+qTGh8XBTOS0DTuIAExcdaAN3hq47d+sc4WUyXc73ZQ+Tqt 0rXdqncJMCLA30wbX5EzDuN98KlTZDGzHpk7holWr1rdC3bmzIafRPvml3pTVhWWB8Bf d20RrkIwYHjFiVNAhL9ithRpbv2RIqI7Zy7Wt52+wwwYH34CF/8xamThunkMpHroLAZ8 A0kHSAnGPNYQwUbgw2WmKBlyuRfWG5aL96i6c2IUSedDX6vAUYmUsoRsqoo5jEmn4HVe C12Q== 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=eBVkvSOJRdbjU5Wdp0zvFdxr4JzWaHANVFoWfdp2qQY=; fh=NdLKlkF21tthkjg7TFYsCcVE9+mNBwBIZGGjccGgMeM=; b=gCs3TNH49wf8ZAJKWv5g97/XUQYCcrxWW8aHYG/4jD2+YD4CSeX/H3kqXLDt6uU9r6 /GBUprHxrLZT3zgPbU2R9ORRz0z3WZGb7auYySj3bnYbbtjwkmtlWOig/g0u0Xocmh/G UhlPQAcPc/7Hxx6AAAhKRL3xI6gPulv3gy/085Zg2kmBwTZE1gZmWFusi0pCEonzZw7L +j7NqezpM+mRr0eeUZ5w+st5TeZ37KLHb2B9acAdEvZ80Tez9XcISwZxsOb212xpsFj2 86P8S5KoYDY77n2Gha0oN0lw9B1sJYdcPg7jntmIzWT4kxN6b6PAVL8QQkc3sQQ4nwhS 9X2w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id z16-20020a63c050000000b005a9b0fe6afbsi8038976pgi.144.2023.12.12.10.54.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 10:54:05 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 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 snail.vger.email (Postfix) with ESMTP id 0F05080564A6; Tue, 12 Dec 2023 10:54:04 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1376723AbjLLSxz (ORCPT + 99 others); Tue, 12 Dec 2023 13:53:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52526 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1376703AbjLLSxy (ORCPT ); Tue, 12 Dec 2023 13:53:54 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 32117CF for ; Tue, 12 Dec 2023 10:54:00 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id F1DDBC433C8; Tue, 12 Dec 2023 18:53:58 +0000 (UTC) Date: Tue, 12 Dec 2023 13:54:41 -0500 From: Steven Rostedt To: LKML , Linux Trace Kernel Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Shuah Khan , linux-kselftest@vger.kernel.org Subject: [PATCH] tracing/selftests: Add test to test max subbuf size with trace_marker Message-ID: <20231212135441.0337c3e9@gandalf.local.home> X-Mailer: Claws Mail 3.19.1 (GTK+ 2.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no 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-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Tue, 12 Dec 2023 10:54:04 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785103379257132766 X-GMAIL-MSGID: 1785103379257132766 From: "Steven Rostedt (Google)" Now that the trace_marker can write up to the max size of the sub buffer. Add a test to see if it actually can happen. The README is updated to state that the trace_marker writes can be broken up, and the test checks the README for that statement so that it does not fail on older kernels that does not support this. If the README does not have the specified update, the test will still test if all the string is written (although it would be broken up), as that should work with older kernels. Cc: Shuah Khan Cc: linux-kselftest@vger.kernel.org Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 1 + .../ftrace/test.d/00basic/trace_marker.tc | 112 ++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100755 tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 2f8d59834c00..cbfcdd882590 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -5595,6 +5595,7 @@ static const char readme_msg[] = " delta: Delta difference against a buffer-wide timestamp\n" " absolute: Absolute (standalone) timestamp\n" "\n trace_marker\t\t- Writes into this file writes into the kernel buffer\n" + "\n May be broken into multiple events based on sub-buffer size.\n" "\n trace_marker_raw\t\t- Writes into this file writes binary data into the kernel buffer\n" " tracing_cpumask\t- Limit which CPUs to trace\n" " instances\t\t- Make sub-buffers with: mkdir instances/foo\n" 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..bcb2dc6b8a66 --- /dev/null +++ b/tools/testing/selftests/ftrace/test.d/00basic/trace_marker.tc @@ -0,0 +1,112 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# description: Change the ringbuffer sub-buffer size +# 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` + +# Find the README +README="" +if [ -f README ]; then + README="README" +# instance? +elif [ -f ../../README ]; then + README="../../README" +fi + +testone=0 +if [ ! -z "$README" ]; then + if grep -q "May be broken into multiple events based on sub-buffer size" $README; then + testone=1 + fi +fi + +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 + + if [ $testone -eq 1 ]; then + echo oneline size = $oneline_size + + str=`write_buffer $oneline_size` + + # Should be in one single event + new_str=`awk ' /tracing_mark_write:/ { sub(/^.*tracing_mark_write: */,"");printf "%s", $0; exit}' trace` + + if [ "$new_str" != "$str" ]; then + exit fail; + fi + fi + + # 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 +