From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DFF7D7F495 for ; Wed, 31 Jan 2024 13:47:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706708847; cv=none; b=XTZblpaTDkQd4C60Us6ziEja0HODRCvwK3/zPRPmYVWfOdIgR7ygZ9uvsPXXa0q9XcnOc8ZV4VrAB/1PeGd/jWUtQCMH53S6mZQMq8rfmqHKU3+4KyXNM39aHxC01KfLUpKKStJgKtxM/3x2c+TPOUMIuw61n0FXOfuy+EvA2hk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706708847; c=relaxed/simple; bh=KxKgbhtx26meVRTLEpsG0VTAzEyuTlN/lzTgb9Djepw=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ZC12KQ/yyZE1mXR61mfJQZKDHwOF2tjA//4xq5XuU4UzLylX5fo4hwCLnsivLi48T3BoBvHXm3MCsIlAxQQByGpLqT0nQeT4mtsDdfaI6QYiL0czDnMXy3RJ/17LXhlSFf/1ggKBeqUQTOeBRdkQXH0Sz9K2vqRCre2JrzHcL+E= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eG51h1A4; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="eG51h1A4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 09B92C433C7; Wed, 31 Jan 2024 13:47:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1706708846; bh=KxKgbhtx26meVRTLEpsG0VTAzEyuTlN/lzTgb9Djepw=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=eG51h1A4M3gVFHUcvvPM2xk8AhgeAI86dq8SQ7uVNF2LIAGf7dxnAqFhq+k4gvsGN cao5yZgVCE+yq/39m9zjy+J6J00FzOcoLJJ+mBYbIOeEK0GAoyzISO0G4Vs29fmsbg Ign34QHzMRCgCGzWuHzSBAVatyj0ADtQxSUysndN+SWhIFxwf2fTITMOTbHzXBdmSn Fu7kZhTNdejjx1yTqvRzMBFHSELhZoKLN1sXiP56VvFjj21LTZaDSkxRCOFjQ5DUNY S6brusT1z7skhF5qsTAyD2pDqaRH5BQNswCwcEuOpXwd7N5lMtaRtiH+OEuxj1XneA Zeh/rQiCyocAQ== Received: by quaco.ghostprotocols.net (Postfix, from userid 1000) id A4F5140441; Wed, 31 Jan 2024 10:47:23 -0300 (-03) Date: Wed, 31 Jan 2024 10:47:23 -0300 From: Arnaldo Carvalho de Melo To: Michael Petlan Cc: linux-perf-users@vger.kernel.org, vmolnaro@redhat.com, acme@redhat.com, mhiramat@kernel.org Subject: Re: [PATCH 1/7] perf testsuite: Add common regex patters Message-ID: References: <20240131113951.17077-1-mpetlan@redhat.com> Precedence: bulk X-Mailing-List: linux-perf-users@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20240131113951.17077-1-mpetlan@redhat.com> X-Url: http://acmel.wordpress.com Em Wed, Jan 31, 2024 at 12:39:45PM +0100, Michael Petlan escreveu: > From: Veronika Molnarova > > Unify perf regexes for checking testing output into a single file > to reduce duplicates and prevent errors when editing. > > This will be used in upcomming patches in shell tests. Thanks for working on this! The cover letter could've said that this is an effort to upstream a pre-existing test suite that is being used for quite a long time, that it is available in github, etc :-) - Arnaldo > Signed-off-by: Veronika Molnarova > Signed-off-by: Michael Petlan > --- > tools/perf/tests/shell/common/patterns.sh | 256 ++++++++++++++++++++++ > 1 file changed, 256 insertions(+) > create mode 100644 tools/perf/tests/shell/common/patterns.sh > > diff --git a/tools/perf/tests/shell/common/patterns.sh b/tools/perf/tests/shell/common/patterns.sh > new file mode 100644 > index 000000000000..919a07b8b454 > --- /dev/null > +++ b/tools/perf/tests/shell/common/patterns.sh > @@ -0,0 +1,256 @@ > +# SPDX-License-Identifier: GPL-2.0 > + > +export RE_NUMBER="[0-9\.]+" > +# Number > +# Examples: > +# 123.456 > + > + > +export RE_NUMBER_HEX="[0-9A-Fa-f]+" > +# Hexadecimal number > +# Examples: > +# 1234 > +# a58d > +# aBcD > +# deadbeef > + > + > +export RE_DATE_YYYYMMDD="[0-9]{4}-(?:(?:01|03|05|07|08|10|12)-(?:[0-2][0-9]|3[0-1])|02-[0-2][0-9]|(?:(?:04|06|09|11)-(?:[0-2][0-9]|30)))" > +# Date in YYYY-MM-DD form > +# Examples: > +# 1990-02-29 > +# 0015-07-31 > +# 2456-12-31 > +#! 2012-13-01 > +#! 1963-09-31 > + > + > +export RE_TIME="(?:[0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]" > +# Time > +# Examples: > +# 15:12:27 > +# 23:59:59 > +#! 24:00:00 > +#! 11:25:60 > +#! 17:60:15 > + > + > +export RE_DATE_TIME="\w+\s+\w+\s+$RE_NUMBER\s+$RE_TIME\s+$RE_NUMBER" > +# Time and date > +# Examples: > +# Wed Feb 12 10:46:26 2020 > +# Mon Mar 2 13:27:06 2020 > +#! St úno 12 10:57:21 CET 2020 > +#! Po úno 14 15:17:32 2010 > + > + > +export RE_ADDRESS="0x$RE_NUMBER_HEX" > +# Memory address > +# Examples: > +# 0x123abc > +# 0xffffffff9abe8ae8 > +# 0x0 > + > + > +export RE_ADDRESS_NOT_NULL="0x[0-9A-Fa-f]*[1-9A-Fa-f]+[0-9A-Fa-f]*" > +# Memory address (not NULL) > +# Examples: > +# 0xffffffff9abe8ae8 > +#! 0x0 > +#! 0x0000000000000000 > + > +export RE_PROCESS_PID="\w+\/\d+" > +# A process with PID > +# Example: > +# sleep/4102 > + > + > +export RE_EVENT_ANY="[\w\-\:\/_=,]+" > +# Name of any event (universal) > +# Examples: > +# cpu-cycles > +# cpu/event=12,umask=34/ > +# r41e1 > +# nfs:nfs_getattr_enter > + > + > +export RE_EVENT="[\w\-:_]+" > +# Name of an usual event > +# Examples: > +# cpu-cycles > + > + > +export RE_EVENT_RAW="r$RE_NUMBER_HEX" > +# Specification of a raw event > +# Examples: > +# r41e1 > +# r1a > + > + > +export RE_EVENT_CPU="cpu/(\w+=$RE_NUMBER_HEX,?)+/p*" > +# Specification of a CPU event > +# Examples: > +# cpu/event=12,umask=34/pp > + > + > +export RE_EVENT_UNCORE="uncore/[\w_]+/" > +# Specification of an uncore event > +# Examples: > +# uncore/qhl_request_local_reads/ > + > + > +export RE_EVENT_SUBSYSTEM="[\w\-]+:[\w\-]+" > +# Name of an event from subsystem > +# Examples: > +# ext4:ext4_ordered_write_end > +# sched:sched_switch > + > + > +export RE_FILE_NAME="[\w\+\.-]+" > +# A filename > +# Examples: > +# libstdc++.so.6 > +#! some/path > + > + > +export RE_PATH_ABSOLUTE="(?:\/$RE_FILE_NAME)+" > +# A full filepath > +# Examples: > +# /usr/lib64/somelib.so.5.4.0 > +# /lib/modules/4.3.0-rc5/kernel/fs/xfs/xfs.ko > +# /usr/bin/mv > +#! some/relative/path > +#! ./some/relative/path > + > + > +export RE_PATH="(?:$RE_FILE_NAME)?$RE_PATH_ABSOLUTE" > +# A filepath > +# Examples: > +# /usr/lib64/somelib.so.5.4.0 > +# /lib/modules/4.3.0-rc5/kernel/fs/xfs/xfs.ko > +# ./.emacs > +# src/fs/file.c > + > + > +export RE_DSO="(?:$RE_PATH_ABSOLUTE(?: \(deleted\))?|\[kernel\.kallsyms\]|\[unknown\]|\[vdso\]|\[kernel\.vmlinux\][\.\w]*)" > +# A DSO name in various result tables > +# Examples: > +# /usr/lib64/somelib.so.5.4.0 > +# /usr/bin/somebinart (deleted) > +# /lib/modules/4.3.0-rc5/kernel/fs/xfs/xfs.ko > +# [kernel.kallsyms] > +# [kernel.vmlinux] > +# [vdso] > +# [unknown] > + > + > +export RE_LINE_COMMENT="^#.*" > +# A comment line > +# Examples: > +# # Started on Thu Sep 10 11:43:00 2015 > + > + > +export RE_LINE_EMPTY="^\s*$" > +# An empty line with possible whitespaces > +# Examples: > +# > + > + > +export RE_LINE_RECORD1="^\[\s+perf\s+record:\s+Woken up $RE_NUMBER times? to write data\s+\].*$" > +# The first line of perf-record "OK" output > +# Examples: > +# [ perf record: Woken up 1 times to write data ] > + > + > +export RE_LINE_RECORD2="^\[\s+perf\s+record:\s+Captured and wrote $RE_NUMBER\s*MB\s+(?:[\w\+\.-]*(?:$RE_PATH)?\/)?perf\.data(?:\.\d+)?\s*\(~?$RE_NUMBER samples\)\s+\].*$" > +# The second line of perf-record "OK" output > +# Examples: > +# [ perf record: Captured and wrote 0.405 MB perf.data (109 samples) ] > +# [ perf record: Captured and wrote 0.405 MB perf.data (~109 samples) ] > +# [ perf record: Captured and wrote 0.405 MB /some/temp/dir/perf.data (109 samples) ] > +# [ perf record: Captured and wrote 0.405 MB ./perf.data (109 samples) ] > +# [ perf record: Captured and wrote 0.405 MB ./perf.data.3 (109 samples) ] > + > + > +export RE_LINE_RECORD2_TOLERANT="^\[\s+perf\s+record:\s+Captured and wrote $RE_NUMBER\s*MB\s+(?:[\w\+\.-]*(?:$RE_PATH)?\/)?perf\.data(?:\.\d+)?\s*(?:\(~?$RE_NUMBER samples\))?\s+\].*$" > +# The second line of perf-record "OK" output, even no samples is OK here > +# Examples: > +# [ perf record: Captured and wrote 0.405 MB perf.data (109 samples) ] > +# [ perf record: Captured and wrote 0.405 MB perf.data (~109 samples) ] > +# [ perf record: Captured and wrote 0.405 MB /some/temp/dir/perf.data (109 samples) ] > +# [ perf record: Captured and wrote 0.405 MB ./perf.data (109 samples) ] > +# [ perf record: Captured and wrote 0.405 MB ./perf.data.3 (109 samples) ] > +# [ perf record: Captured and wrote 0.405 MB perf.data ] > + > + > +export RE_LINE_RECORD2_TOLERANT_FILENAME="^\[\s+perf\s+record:\s+Captured and wrote $RE_NUMBER\s*MB\s+(?:[\w\+\.-]*(?:$RE_PATH)?\/)?perf\w*\.data(?:\.\d+)?\s*\(~?$RE_NUMBER samples\)\s+\].*$" > +# The second line of perf-record "OK" output > +# Examples: > +# [ perf record: Captured and wrote 0.405 MB perf.data (109 samples) ] > +# [ perf record: Captured and wrote 0.405 MB perf_ls.data (~109 samples) ] > +# [ perf record: Captured and wrote 0.405 MB perf_aNyCaSe.data (109 samples) ] > +# [ perf record: Captured and wrote 0.405 MB ./perfdata.data.3 (109 samples) ] > +#! [ perf record: Captured and wrote 0.405 MB /some/temp/dir/my_own.data (109 samples) ] > +#! [ perf record: Captured and wrote 0.405 MB ./UPPERCASE.data (109 samples) ] > +#! [ perf record: Captured and wrote 0.405 MB ./aNyKiNDoF.data.3 (109 samples) ] > +#! [ perf record: Captured and wrote 0.405 MB perf.data ] > + > + > +export RE_LINE_TRACE_FULL="^\s*$RE_NUMBER\s*\(\s*$RE_NUMBER\s*ms\s*\):\s*$RE_PROCESS_PID\s+.*\)\s+=\s+\-?$RE_NUMBER|$RE_NUMBER_HEX.*$" > +# A line of perf-trace output > +# Examples: > +# 0.115 ( 0.005 ms): sleep/4102 open(filename: 0xd09e2ab2, flags: CLOEXEC ) = 3 > +# 0.157 ( 0.005 ms): sleep/4102 mmap(len: 3932736, prot: EXEC|READ, flags: PRIVATE|DENYWRITE, fd: 3 ) = 0x7f89d0605000 > + > +export RE_LINE_TRACE_ONE_PROC="^\s*$RE_NUMBER\s*\(\s*$RE_NUMBER\s*ms\s*\):\s*\w+\(.*\)\s+=\s+(?:\-?$RE_NUMBER)|(?:0x$RE_NUMBER_HEX).*$" > +# A line of perf-trace output > +# Examples: > +# 0.115 ( 0.005 ms): open(filename: 0xd09e2ab2, flags: CLOEXEC ) = 3 > +# 0.157 ( 0.005 ms): mmap(len: 3932736, prot: EXEC|READ, flags: PRIVATE|DENYWRITE, fd: 3 ) = 0x7f89d0605000 > + > +export RE_LINE_TRACE_CONTINUED="^\s*$RE_NUMBER\s*\(\s*$RE_NUMBER\s*ms\s*\):\s*\.\.\.\s*\[continued\]:\s+\w+\(\).*\s+=\s+(?:\-?$RE_NUMBER)|(?:0x$RE_NUMBER_HEX).*$" > +# A line of perf-trace output > +# Examples: > +# 0.000 ( 0.000 ms): ... [continued]: nanosleep()) = 0 > +# 0.000 ( 0.000 ms): ... [continued]: nanosleep()) = 0x00000000 > + > +export RE_LINE_TRACE_SUMMARY_HEADER="\s*syscall\s+calls\s+(?:errors\s+)?total\s+min\s+avg\s+max\s+stddev" > +# A header of a perf-trace summary table > +# Example: > +# syscall calls total min avg max stddev > +# syscall calls errors total min avg max stddev > + > + > +export RE_LINE_TRACE_SUMMARY_CONTENT="^\s*\w+\s+(?:$RE_NUMBER\s+){5,6}$RE_NUMBER%" > +# A line of a perf-trace summary table > +# Example: > +# open 3 0.017 0.005 0.006 0.007 10.90% > +# openat 2 0 0.017 0.008 0.009 0.010 12.29% > + > + > +export RE_LINE_REPORT_CONTENT="^\s+$RE_NUMBER%\s+\w+\s+\S+\s+\S+\s+\S+" # FIXME > +# A line from typicap perf report --stdio output > +# Example: > +# 100.00% sleep [kernel.vmlinux] [k] syscall_return_slowpath > + > + > +export RE_TASK="\s+[\w~\/ \.\+:#-]+(?:\[-1(?:\/\d+)?\]|\[\d+(?:\/\d+)?\])" > +# A name of a task used for perf sched timehist -s > +# Example: > +# sleep[62755] > +# runtest.sh[62762] > +# gmain[705/682] > +# xfsaild/dm-0[495] > +# kworker/u8:1-ev[62714] > +# :-1[-1/62756] > +# :-1[-1] > +# :-1[62756] > + > + > +export RE_SEGFAULT=".*(?:Segmentation\sfault|SIGSEGV|\score\s|dumped|segfault).*" > +# Possible variations of the segfault message > +# Example: > +# /bin/bash: line 1: 32 Segmentation fault timeout 15s > +# Segmentation fault (core dumped) > +# Program terminated with signal SIGSEGV > +#! WARNING: 12323431 isn't a 'cpu_core', please use a CPU list in the 'cpu_core' range (0-15) > -- > 2.43.0 > -- - Arnaldo