All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
To: Jiri Olsa <jolsa@kernel.org>
Cc: lkml <linux-kernel@vger.kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Michael Petlan <mpetlan@redhat.com>,
	Andi Kleen <ak@linux.intel.com>,
	Stephane Eranian <eranian@google.com>,
	Jin Yao <yao.jin@linux.intel.com>,
	Alexey Budankov <alexey.budankov@linux.intel.com>
Subject: Re: [PATCH 07/10] libperf: Add tests_mmap_cpus test
Date: Fri, 18 Oct 2019 15:16:31 -0300	[thread overview]
Message-ID: <20191018181631.GF1797@kernel.org> (raw)
In-Reply-To: <20191018181429.GE1797@kernel.org>

Em Fri, Oct 18, 2019 at 03:14:29PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Thu, Oct 17, 2019 at 12:59:15PM +0200, Jiri Olsa escreveu:
> > Adding mmaping tests that generates prctl call on
> > every cpu validates it gets all the related events
> > in ring buffer.
> 
> So _here_ we need _GNU_SOURCE, for this specific test:

Added, to this test:

[acme@quaco perf]$ git diff
diff --git a/tools/perf/lib/tests/test-evlist.c b/tools/perf/lib/tests/test-evlist.c
index d8c52ebfa53a..741bc1bb4524 100644
--- a/tools/perf/lib/tests/test-evlist.c
+++ b/tools/perf/lib/tests/test-evlist.c
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0
-#include <stdio.h>
+#define _GNU_SOURCE // needed for sched.h to get sched_[gs]etaffinity and CPU_(ZERO,SET)
 #include <sched.h>
+#include <stdio.h>
 #include <stdarg.h>
 #include <unistd.h>
 #include <stdlib.h>
[acme@quaco perf]$

We can go the big hammer way if this is more generally needed, but first
lets try to use it only when needed, ok?

- Arnaldo
 
>   LINK     test-evlist-a
> test-evlist.c: In function ‘test_mmap_cpus’:
> test-evlist.c:352:8: warning: implicit declaration of function ‘sched_getaffinity’ [-Wimplicit-function-declaration]
>   352 |  err = sched_getaffinity(0, sizeof(saved_mask), &saved_mask);
>       |        ^~~~~~~~~~~~~~~~~
> test-evlist.c:358:3: warning: implicit declaration of function ‘CPU_ZERO’ [-Wimplicit-function-declaration]
>   358 |   CPU_ZERO(&mask);
>       |   ^~~~~~~~
> test-evlist.c:359:3: warning: implicit declaration of function ‘CPU_SET’ [-Wimplicit-function-declaration]
>   359 |   CPU_SET(cpu, &mask);
>       |   ^~~~~~~
> test-evlist.c:361:9: warning: implicit declaration of function ‘sched_setaffinity’ [-Wimplicit-function-declaration]
>   361 |   err = sched_setaffinity(0, sizeof(mask), &mask);
>       |         ^~~~~~~~~~~~~~~~~
> /usr/bin/ld: /tmp/ccOhNrLC.o: in function `test_mmap_cpus':
> /home/acme/git/perf/tools/perf/lib/tests/test-evlist.c:358: undefined reference to `CPU_ZERO'
> /usr/bin/ld: /home/acme/git/perf/tools/perf/lib/tests/test-evlist.c:359: undefined reference to `CPU_SET'
> collect2: error: ld returned 1 exit status
> make[1]: *** [Makefile:22: test-evlist-a] Error 1
> make: *** [Makefile:143: tests] Error 2
> make: Leaving directory '/home/acme/git/perf/tools/perf/lib'
> [root@quaco perf]#
>  
> > Link: http://lkml.kernel.org/n/tip-9qdckblmgjm42ofd7haflso0@git.kernel.org
> > Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> > ---
> >  tools/perf/lib/tests/test-evlist.c | 97 ++++++++++++++++++++++++++++++
> >  1 file changed, 97 insertions(+)
> > 
> > diff --git a/tools/perf/lib/tests/test-evlist.c b/tools/perf/lib/tests/test-evlist.c
> > index 90a1869ba4b1..d8c52ebfa53a 100644
> > --- a/tools/perf/lib/tests/test-evlist.c
> > +++ b/tools/perf/lib/tests/test-evlist.c
> > @@ -1,5 +1,6 @@
> >  // SPDX-License-Identifier: GPL-2.0
> >  #include <stdio.h>
> > +#include <sched.h>
> >  #include <stdarg.h>
> >  #include <unistd.h>
> >  #include <stdlib.h>
> > @@ -299,6 +300,101 @@ static int test_mmap_thread(void)
> >  	return 0;
> >  }
> >  
> > +static int test_mmap_cpus(void)
> > +{
> > +	struct perf_evlist *evlist;
> > +	struct perf_evsel *evsel;
> > +	struct perf_mmap *map;
> > +	struct perf_cpu_map *cpus;
> > +	struct perf_event_attr attr = {
> > +		.type             = PERF_TYPE_TRACEPOINT,
> > +		.sample_period    = 1,
> > +		.wakeup_watermark = 1,
> > +		.disabled         = 1,
> > +	};
> > +	cpu_set_t saved_mask;
> > +	char path[PATH_MAX];
> > +	int id, err, cpu, tmp;
> > +	union perf_event *event;
> > +	int count = 0;
> > +
> > +	snprintf(path, PATH_MAX, "%s/kernel/debug/tracing/events/syscalls/sys_enter_prctl/id",
> > +		 sysfs__mountpoint());
> > +
> > +	if (filename__read_int(path, &id)) {
> > +		fprintf(stderr, "error: failed to get tracepoint id: %s\n", path);
> > +		return -1;
> > +	}
> > +
> > +	attr.config = id;
> > +
> > +	cpus = perf_cpu_map__new(NULL);
> > +	__T("failed to create cpus", cpus);
> > +
> > +	evlist = perf_evlist__new();
> > +	__T("failed to create evlist", evlist);
> > +
> > +	evsel = perf_evsel__new(&attr);
> > +	__T("failed to create evsel1", evsel);
> > +
> > +	perf_evlist__add(evlist, evsel);
> > +
> > +	perf_evlist__set_maps(evlist, cpus, NULL);
> > +
> > +	err = perf_evlist__open(evlist);
> > +	__T("failed to open evlist", err == 0);
> > +
> > +	err = perf_evlist__mmap(evlist, 4);
> > +	__T("failed to mmap evlist", err == 0);
> > +
> > +	perf_evlist__enable(evlist);
> > +
> > +	err = sched_getaffinity(0, sizeof(saved_mask), &saved_mask);
> > +	__T("sched_getaffinity failed", err == 0);
> > +
> > +	perf_cpu_map__for_each_cpu(cpu, tmp, cpus) {
> > +		cpu_set_t mask;
> > +
> > +		CPU_ZERO(&mask);
> > +		CPU_SET(cpu, &mask);
> > +
> > +		err = sched_setaffinity(0, sizeof(mask), &mask);
> > +		__T("sched_setaffinity failed", err == 0);
> > +
> > +		prctl(0, 0, 0, 0, 0);
> > +	}
> > +
> > +	err = sched_setaffinity(0, sizeof(saved_mask), &saved_mask);
> > +	__T("sched_setaffinity failed", err == 0);
> > +
> > +	perf_evlist__disable(evlist);
> > +
> > +	perf_evlist__for_each_mmap(evlist, map, false) {
> > +		if (perf_mmap__read_init(map) < 0)
> > +			continue;
> > +
> > +		while ((event = perf_mmap__read_event(map)) != NULL) {
> > +			count++;
> > +			perf_mmap__consume(map);
> > +		}
> > +
> > +		perf_mmap__read_done(map);
> > +	}
> > +
> > +	/* calls perf_evlist__munmap/perf_evlist__close */
> > +	perf_evlist__delete(evlist);
> > +
> > +	/*
> > +	 * The generated prctl events should match the
> > +	 * number of cpus or be bigger (we are system-wide).
> > +	 */
> > +	__T("failed count", count >= perf_cpu_map__nr(cpus));
> > +
> > +	perf_cpu_map__put(cpus);
> > +
> > +	return 0;
> > +}
> > +
> >  int main(int argc, char **argv)
> >  {
> >  	__T_START;
> > @@ -309,6 +405,7 @@ int main(int argc, char **argv)
> >  	test_stat_thread();
> >  	test_stat_thread_enable();
> >  	test_mmap_thread();
> > +	test_mmap_cpus();
> >  
> >  	__T_OK;
> >  	return 0;
> > -- 
> > 2.21.0
> 
> -- 
> 
> - Arnaldo

-- 

- Arnaldo

  reply	other threads:[~2019-10-18 18:16 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-17 10:59 [PATCHv3 00/10] libperf: Add sampling interface (leftover) Jiri Olsa
2019-10-17 10:59 ` [PATCH 01/10] libperf: Add perf_evlist__for_each_mmap function Jiri Olsa
2019-10-21 23:18   ` [tip: perf/core] libperf: Introduce perf_evlist__for_each_mmap() tip-bot2 for Jiri Olsa
2019-10-17 10:59 ` [PATCH 02/10] libperf: Move mmap allocation to perf_evlist__mmap_ops::get Jiri Olsa
2019-10-21 23:18   ` [tip: perf/core] " tip-bot2 for Jiri Olsa
2019-10-17 10:59 ` [PATCH 03/10] libperf: Move mask setup to perf_evlist__mmap_ops function Jiri Olsa
2019-10-21 23:18   ` [tip: perf/core] libperf: Move mask setup to perf_evlist__mmap_ops() tip-bot2 for Jiri Olsa
2019-10-17 10:59 ` [PATCH 04/10] libperf: Link static tests with libapi.a Jiri Olsa
2019-10-21 23:18   ` [tip: perf/core] " tip-bot2 for Jiri Olsa
2019-10-17 10:59 ` [PATCH 05/10] libperf: Add _GNU_SOURCE define to compilation Jiri Olsa
2019-10-18 18:07   ` Arnaldo Carvalho de Melo
2019-10-19 17:37     ` Jiri Olsa
2019-10-17 10:59 ` [PATCH 06/10] libperf: Add tests_mmap_thread test Jiri Olsa
2019-10-21 23:18   ` [tip: perf/core] " tip-bot2 for Jiri Olsa
2019-10-17 10:59 ` [PATCH 07/10] libperf: Add tests_mmap_cpus test Jiri Olsa
2019-10-18 18:14   ` Arnaldo Carvalho de Melo
2019-10-18 18:16     ` Arnaldo Carvalho de Melo [this message]
2019-10-19 17:42       ` Jiri Olsa
2019-10-21 23:18   ` [tip: perf/core] " tip-bot2 for Jiri Olsa
2019-10-17 10:59 ` [PATCH 08/10] libperf: Keep count of failed tests Jiri Olsa
2019-10-21 23:18   ` [tip: perf/core] " tip-bot2 for Jiri Olsa
2019-10-17 10:59 ` [PATCH 09/10] libperf: Do not export perf_evsel__init/perf_evlist__init Jiri Olsa
2019-10-21 23:18   ` [tip: perf/core] libperf: Do not export perf_evsel__init()/perf_evlist__init() tip-bot2 for Jiri Olsa
2019-10-17 10:59 ` [PATCH 10/10] libperf: Add pr_err macro Jiri Olsa
2019-10-21 23:18   ` [tip: perf/core] libperf: Add pr_err() macro tip-bot2 for Jiri Olsa
2019-10-18 18:29 ` [PATCHv3 00/10] libperf: Add sampling interface (leftover) Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191018181631.GF1797@kernel.org \
    --to=arnaldo.melo@gmail.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=alexey.budankov@linux.intel.com \
    --cc=eranian@google.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=mpetlan@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=yao.jin@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.