File: test_perf_raw.in

package info (click to toggle)
ltt-control 2.13.15-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 17,656 kB
  • sloc: ansic: 167,287; sh: 27,018; makefile: 2,828; python: 1,380; yacc: 692; lex: 129; java: 109; perl: 99; cpp: 35; xml: 23
file content (164 lines) | stat: -rw-r--r-- 3,582 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#!/bin/bash
#
# Copyright (C) 2016 Julien Desfossez <jdesfossez@efficios.com>
#
# SPDX-License-Identifier: GPL-2.0-only
#

TEST_DESC="Perf counters"

CURDIR=$(dirname $0)/
TESTDIR=$CURDIR/..
LTTNG_BIN="lttng"
SESSION_NAME="perf_counters"
NUM_TESTS=21
NR_ITER=1
NR_USEC_WAIT=1
TESTAPP_PATH="$TESTDIR/utils/testapp"
TESTAPP_NAME="gen-ust-events"
TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
# Empty if libpfm is installed, "#" otherwise
HAVE_LIBPFM="@LTTNG_TOOLS_BUILD_WITH_LIBPFM_TRUE@"

source $TESTDIR/utils/utils.sh

function enable_ust_lttng_event_per_chan()
{
	sess_name="$1"
	event_name="$2"
	chan_name="$3"

	$TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" -s $sess_name -c $chan_name -u >/dev/null 2>&1
	ok $? "Enable event $event_name for session $sess_name in channel $chan_name"
}

function have_libpfm()
{
	test -z $HAVE_LIBPFM
	ok $? "Have libpfm installed"
}

function test_ust_raw()
{
	local SESSION_NAME="ust_perf"
	local CHAN_NAME="mychan"
	local EVENT_NAME="tp:tptest"
	local PMU="UNHALTED_REFERENCE_CYCLES"
	local tests_to_skip=9
	local ret
	local TRACE_PATH

	# Find the raw perf id of the event.
	PERFID=$("$CURDIR/find_event" "$PMU")
	ret=$?
	if [ "$ret" -eq "0" ]; then
		pass "Find PMU $PMU"
	elif [ "$ret" -eq "1" ]; then
		skip 0 "PMU event not found." $tests_to_skip
		return
	elif [ "$ret" -eq "2" ]; then
		skip 0 "PMU event not actionable." $tests_to_skip
		return
	else
		fail "find_event returned $ret."
		return
	fi

	TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX")

	create_lttng_session_ok $SESSION_NAME $TRACE_PATH

	enable_ust_lttng_channel_ok $SESSION_NAME $CHAN_NAME

	enable_ust_lttng_event_per_chan $SESSION_NAME $EVENT_NAME $CHAN_NAME

	add_context_ust_ok $SESSION_NAME $CHAN_NAME "perf:thread:raw:${PERFID}:test"

	start_lttng_tracing_ok

	$TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT >/dev/null 2>&1

	stop_lttng_tracing_ok

	destroy_lttng_session_ok $SESSION_NAME

	validate_trace "perf_thread_raw_${PERFID}_test" $TRACE_PATH

	rm -rf $TRACE_PATH
}

function test_kernel_raw()
{
	local SESSION_NAME="kernel_perf"
	local CHAN_NAME="mychan"
	local EVENT_NAME="lttng_test_filter_event"
	local PMU="UNHALTED_REFERENCE_CYCLES"
	local PERFID=""
	local tests_to_skip=9
	local ret
	local TRACE_PATH

	# Find the raw perf id of the event.
	PERFID=$("$CURDIR/find_event" "$PMU")
	ret=$?
	if [ "$ret" -eq "0" ]; then
		pass "Find PMU $PMU"
	elif [ "$ret" -eq "1" ]; then
		skip 0 "PMU event not found." $tests_to_skip
		return
	elif [ "$ret" -eq "2" ]; then
		skip 0 "PMU event not actionable." $tests_to_skip
		return
	else
		fail "find_event returned $ret."
		return
	fi

	TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX")

	create_lttng_session_ok $SESSION_NAME $TRACE_PATH

	lttng_enable_kernel_channel_ok $SESSION_NAME $CHAN_NAME

	enable_kernel_lttng_event_ok $SESSION_NAME $EVENT_NAME $CHAN_NAME

	add_context_kernel_ok $SESSION_NAME $CHAN_NAME "perf:cpu:raw:${PERFID}:test"

	start_lttng_tracing_ok

	echo -n 10 > /proc/lttng-test-filter-event

	stop_lttng_tracing_ok

	destroy_lttng_session_ok $SESSION_NAME

	validate_trace "perf_cpu_raw_${PERFID}_test" $TRACE_PATH

	rm -rf $TRACE_PATH
}

if [ "$(id -u)" == "0" ]; then
	isroot=1
else
	isroot=0
fi

# MUST set TESTDIR before calling those functions
plan_tests $NUM_TESTS

print_test_banner "$TEST_DESC"

start_lttng_sessiond

have_libpfm

test_ust_raw

skip $isroot "Root access is needed for kernel testing, skipping." 9 ||
{
	modprobe lttng-test
	test_kernel_raw
	modprobe --remove lttng-test
}

stop_lttng_sessiond