Commit 35697c12 authored by Yonghong Song's avatar Yonghong Song Committed by Alexei Starovoitov

selftests/bpf: Fix test_progs send_signal flakiness with nmi mode

Alexei observed that test_progs send_signal may fail if run
with command line "./test_progs" and the tests will pass
if just run "./test_progs -n 40".

I observed similar issue with nmi subtest failure
and added a delay 100 us in Commit ab8b7f0c
("tools/bpf: Add self tests for bpf_send_signal_thread()")
and the problem is gone for me. But the issue still exists
in Alexei's testing environment.

The current code uses sample_freq = 50 (50 events/second), which
may not be enough. But if the sample_freq value is larger than
sysctl kernel/perf_event_max_sample_rate, the perf_event_open
syscall will fail.

This patch changed nmi perf testing to use sample_period = 1,
which means trying to sampling every event. This seems fixing
the issue.

Fixes: ab8b7f0c ("tools/bpf: Add self tests for bpf_send_signal_thread()")
Signed-off-by: default avatarYonghong Song <yhs@fb.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Acked-by: default avatarAndrii Nakryiko <andriin@fb.com>
Link: https://lore.kernel.org/bpf/20200116174004.1522812-1-yhs@fb.com
parent 858e284f
...@@ -76,9 +76,6 @@ static void test_send_signal_common(struct perf_event_attr *attr, ...@@ -76,9 +76,6 @@ static void test_send_signal_common(struct perf_event_attr *attr,
if (CHECK(!skel, "skel_open_and_load", "skeleton open_and_load failed\n")) if (CHECK(!skel, "skel_open_and_load", "skeleton open_and_load failed\n"))
goto skel_open_load_failure; goto skel_open_load_failure;
/* add a delay for child thread to ramp up */
usleep(100);
if (!attr) { if (!attr) {
err = test_send_signal_kern__attach(skel); err = test_send_signal_kern__attach(skel);
if (CHECK(err, "skel_attach", "skeleton attach failed\n")) { if (CHECK(err, "skel_attach", "skeleton attach failed\n")) {
...@@ -155,8 +152,7 @@ static void test_send_signal_perf(bool signal_thread) ...@@ -155,8 +152,7 @@ static void test_send_signal_perf(bool signal_thread)
static void test_send_signal_nmi(bool signal_thread) static void test_send_signal_nmi(bool signal_thread)
{ {
struct perf_event_attr attr = { struct perf_event_attr attr = {
.sample_freq = 50, .sample_period = 1,
.freq = 1,
.type = PERF_TYPE_HARDWARE, .type = PERF_TYPE_HARDWARE,
.config = PERF_COUNT_HW_CPU_CYCLES, .config = PERF_COUNT_HW_CPU_CYCLES,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment