From: Jiri Olsa <jolsa@redhat.com>
To: Alexey Bayduraev <alexey.v.bayduraev@linux.intel.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
linux-kernel <linux-kernel@vger.kernel.org>,
Andi Kleen <ak@linux.intel.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Alexander Antonov <alexander.antonov@linux.intel.com>,
Alexei Budankov <abudankov@huawei.com>,
Riccardo Mancini <rickyman7@gmail.com>
Subject: Re: [PATCH v10 05/24] perf record: Introduce thread local variable
Date: Sun, 12 Sep 2021 22:45:52 +0200 [thread overview]
Message-ID: <YT5nAMJ9BuKZHb+2@krava> (raw)
In-Reply-To: <afa31d66f692558e0c9c06ea2f83a62ac394097f.1626072009.git.alexey.v.bayduraev@linux.intel.com>
On Mon, Jul 12, 2021 at 09:46:05AM +0300, Alexey Bayduraev wrote:
> Introduce thread local variable and use it for threaded trace streaming.
> Use thread affinity mask instead or record affinity mask in affinity
> modes.
>
> Acked-by: Andi Kleen <ak@linux.intel.com>
> Acked-by: Namhyung Kim <namhyung@gmail.com>
> Signed-off-by: Alexey Bayduraev <alexey.v.bayduraev@linux.intel.com>
> ---
> tools/perf/builtin-record.c | 139 ++++++++++++++++++++++++------------
> 1 file changed, 93 insertions(+), 46 deletions(-)
>
> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> index a25b23affc43..dfc5db24e037 100644
> --- a/tools/perf/builtin-record.c
> +++ b/tools/perf/builtin-record.c
> @@ -110,6 +110,8 @@ struct record_thread {
> unsigned long waking;
> };
>
> +static __thread struct record_thread *thread;
> +
> struct record {
> struct perf_tool tool;
> struct record_opts opts;
> @@ -132,7 +134,6 @@ struct record {
> bool timestamp_boundary;
> struct switch_output switch_output;
> unsigned long long samples;
> - struct mmap_cpu_mask affinity_mask;
> unsigned long output_max_size; /* = 0: unlimited */
> int nr_threads;
> struct thread_mask *thread_masks;
> @@ -574,7 +575,7 @@ static int record__pushfn(struct mmap *map, void *to, void *bf, size_t size)
> bf = map->data;
> }
>
> - rec->samples++;
> + thread->samples++;
> return record__write(rec, map, bf, size);
> }
>
> @@ -1317,19 +1318,29 @@ static struct perf_event_header finished_round_event = {
> .type = PERF_RECORD_FINISHED_ROUND,
> };
>
> -static void record__adjust_affinity(struct record *rec, struct mmap *map)
> +static int record__adjust_affinity(struct record *rec, struct mmap *map)
hm, why changing the return value if the caller does not check it?
jirka
> {
> + int ret = 0;
> +
> if (rec->opts.affinity != PERF_AFFINITY_SYS &&
> - !bitmap_equal(rec->affinity_mask.bits, map->affinity_mask.bits,
> - rec->affinity_mask.nbits)) {
> - bitmap_zero(rec->affinity_mask.bits, rec->affinity_mask.nbits);
> - bitmap_or(rec->affinity_mask.bits, rec->affinity_mask.bits,
> - map->affinity_mask.bits, rec->affinity_mask.nbits);
> - sched_setaffinity(0, MMAP_CPU_MASK_BYTES(&rec->affinity_mask),
> - (cpu_set_t *)rec->affinity_mask.bits);
> - if (verbose == 2)
> - mmap_cpu_mask__scnprintf(&rec->affinity_mask, "thread");
> + !bitmap_equal(thread->mask->affinity.bits, map->affinity_mask.bits,
> + thread->mask->affinity.nbits)) {
> + bitmap_zero(thread->mask->affinity.bits, thread->mask->affinity.nbits);
> + bitmap_or(thread->mask->affinity.bits, thread->mask->affinity.bits,
> + map->affinity_mask.bits, thread->mask->affinity.nbits);
> + ret = sched_setaffinity(0, MMAP_CPU_MASK_BYTES(&thread->mask->affinity),
> + (cpu_set_t *)thread->mask->affinity.bits);
> + if (ret)
> + pr_err("threads[%d]: sched_setaffinity() call failed: %s\n",
> + thread->tid, strerror(errno));
> + if (verbose == 2) {
> + pr_debug("threads[%d]: addr=", thread->tid);
> + mmap_cpu_mask__scnprintf(&thread->mask->affinity, "thread");
> + pr_debug("threads[%d]: on cpu=%d\n", thread->tid, sched_getcpu());
> + }
> }
> +
> + return ret;
> }
SNIP
next prev parent reply other threads:[~2021-09-12 20:46 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-12 6:46 [PATCH v10 00/24] Introduce threaded trace streaming for basic perf record operation Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 01/24] perf record: Introduce thread affinity and mmap masks Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 02/24] tools lib: Introduce fdarray duplicate function Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 03/24] perf record: Introduce thread specific data array Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 04/24] perf record: Introduce function to propagate control commands Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 05/24] perf record: Introduce thread local variable Alexey Bayduraev
2021-09-12 20:43 ` Jiri Olsa
2021-09-12 20:45 ` Jiri Olsa
2021-09-12 20:45 ` Jiri Olsa
2021-09-12 20:45 ` Jiri Olsa [this message]
2021-07-12 6:46 ` [PATCH v10 06/24] perf record: Stop threads in the end of trace streaming Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 07/24] perf record: Start threads in the beginning " Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 08/24] perf record: Introduce data file at mmap buffer object Alexey Bayduraev
2021-08-11 17:24 ` Riccardo Mancini
2021-07-12 6:46 ` [PATCH v10 09/24] perf record: Introduce bytes written stats to support --max-size option Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 10/24] perf record: Introduce data transferred and compressed stats Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 11/24] perf record: Init data file at mmap buffer object Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 12/24] perf record: Introduce --threads command line option Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 13/24] perf record: Extend " Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 14/24] perf record: Implement compatibility checks Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 15/24] perf report: Output non-zero offset for decompressed records Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 16/24] perf report: Output data file name in raw trace dump Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 17/24] perf session: Move reader structure to the top Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 18/24] perf session: Introduce reader_state in reader object Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 19/24] perf session: Introduce reader objects in session object Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 20/24] perf session: Introduce decompressor into trace reader object Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 21/24] perf session: Move init into reader__init function Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 22/24] perf session: Move map/unmap into reader__mmap function Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 23/24] perf session: Load single file for analysis Alexey Bayduraev
2021-07-12 6:46 ` [PATCH v10 24/24] perf session: Load data directory files " Alexey Bayduraev
2021-08-11 17:45 ` [PATCH v10 00/24] Introduce threaded trace streaming for basic perf record operation Riccardo Mancini
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=YT5nAMJ9BuKZHb+2@krava \
--to=jolsa@redhat.com \
--cc=abudankov@huawei.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=ak@linux.intel.com \
--cc=alexander.antonov@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=alexey.v.bayduraev@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=rickyman7@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).