Messages in this thread | | | From | Namhyung Kim <> | Date | Mon, 6 Nov 2023 07:21:35 -0800 | Subject | Re: [PATCH v2 PING] perf test: Adjust test case perf record offcpu profiling tests for s390 |
| |
Hello,
On Mon, Nov 6, 2023 at 1:16 AM Thomas Richter <tmricht@linux.ibm.com> wrote: > > On s390 using linux-next the test case > 87: perf record offcpu profiling tests > fails. The root cause is this command > > # ./perf record --off-cpu -e dummy -- ./perf bench sched messaging -l 10 > # Running 'sched/messaging' benchmark: > # 20 sender and receiver processes per group > # 10 groups == 400 processes run > > Total time: 0.231 [sec] > [ perf record: Woken up 1 times to write data ] > [ perf record: Captured and wrote 0.077 MB perf.data (401 samples) ] > # > > It does not generate 800+ sample entries, on s390 usually around 40[1-9], > sometimes a few more, but never more than 450. The higher the number > of CPUs the lower the number of samples. > > Looking at function chain > bench_sched_messaging() > +--> group() > the senders and receiver threads are created. The senders and receivers > call function ready() which writes one bytes and wait for a reply using > poll system() call. > > As context switches are counted, the function ready() will trigger > a context switch when no input data is available after the write > system call. The write system call does not trigger context switches > when the data size is small. And writing 1000 bytes (10 iterations with > 100 bytes) is not much and certainly won't block. > > The 400+ context switch on s390 occur when the some receiver/sender > threads call ready() and wait for the response from function > bench_sched_messaging() being kicked off. > > Lower the number of expected context switches to 400 to succeed on > s390. > > Suggested-by: Namhyung Kim <namhyung@kernel.org> > Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> > Co-developed-by: Ilya Leoshkevich <iii@linux.ibm.com> > Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Thanks, Namhyung
> --- > tools/perf/tests/shell/record_offcpu.sh | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/tests/shell/record_offcpu.sh b/tools/perf/tests/shell/record_offcpu.sh > index a1ef8f0d2b5c..67c925f3a15a 100755 > --- a/tools/perf/tests/shell/record_offcpu.sh > +++ b/tools/perf/tests/shell/record_offcpu.sh > @@ -77,9 +77,9 @@ test_offcpu_child() { > err=1 > return > fi > - # each process waits for read and write, so it should be more than 800 events > + # each process waits at least for poll, so it should be more than 400 events > if ! perf report -i ${perfdata} -s comm -q -n -t ';' --percent-limit=90 | \ > - awk -F ";" '{ if (NF > 3 && int($3) < 800) exit 1; }' > + awk -F ";" '{ if (NF > 3 && int($3) < 400) exit 1; }' > then > echo "Child task off-cpu test [Failed invalid output]" > err=1 > -- > 2.41.0 >
| |