tools/perf/tests/shell/stat+std_output.sh

Source file repositories/reference/linux-study-clean/tools/perf/tests/shell/stat+std_output.sh

File Facts

System
Linux kernel
Corpus path
tools/perf/tests/shell/stat+std_output.sh
Extension
.sh
Size
3228 bytes
Lines
123
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: tools
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

#!/bin/bash
# perf stat STD output linter
# SPDX-License-Identifier: GPL-2.0
# Tests various perf stat STD output commands for
# default event and metricgroup

set -e

# shellcheck source=lib/stat_output.sh
. "$(dirname $0)"/lib/stat_output.sh

stat_output=$(mktemp /tmp/__perf_test.stat_output.std.XXXXX)

event_name=(cpu-clock task-clock context-switches cpu-migrations page-faults stalled-cycles-frontend stalled-cycles-backend cycles instructions branches branch-misses)
event_metric=("CPUs_utilized" "CPUs_utilized" "cs/sec" "migrations/sec" "faults/sec" "frontend_cycles_idle" "backend_cycles_idle" "GHz" "insn_per_cycle" "/sec" "branch_miss_rate")
skip_metric=("tma_" "TopdownL1")

cleanup() {
  rm -f "${stat_output}"

  trap - EXIT TERM INT
}

trap_cleanup() {
  cleanup
  exit 1
}
trap trap_cleanup EXIT TERM INT

function commachecker()
{
	local prefix=1
	local -i metric_only=0

	case "$1"
	in "--interval")	prefix=2
	;; "--per-thread")	prefix=2
	;; "--system-wide-no-aggr")	prefix=2
	;; "--per-core")	prefix=3
	;; "--per-socket")	prefix=3
	;; "--per-node")	prefix=3
	;; "--per-die")		prefix=3
	;; "--per-cache")	prefix=3
	;; "--per-cluster")	prefix=3
	;; "--metric-only")	metric_only=1
	esac

	while read line
	do
		# Ignore initial "started on" comment.
		x=${line:0:1}
		[ "$x" = "#" ] && continue
		# Ignore initial blank line.
		[ "$line" = "" ] && continue
		# Ignore "Performance counter stats"
		x=${line:0:25}
		[ "$x" = "Performance counter stats" ] && continue
		# Ignore "seconds time elapsed" and break
		[[ "$line" == *"time elapsed"* ]] && break

		main_body=$(echo $line | cut -d' ' -f$prefix-)
		x=${main_body%#*}
		[ "$x" = "" ] && continue

		# Check metric only - if it has a non-empty result
		[ $metric_only -eq 1 ] && return 0

		# Skip metrics without event name
		y=${main_body#*#}
		for i in "${!skip_metric[@]}"; do

Annotation

Implementation Notes