Re: [PATCH v2 4/4] perf record: implement --affinity=node|cpu option

From: Alexey Budankov
Date: Wed Jan 09 2019 - 04:15:26 EST


Hi,

On 02.01.2019 0:39, Jiri Olsa wrote:
> On Mon, Dec 24, 2018 at 03:28:33PM +0300, Alexey Budankov wrote:
>>
>> Implement --affinity=node|cpu option for the record mode defaulting
>> to system affinity mask bouncing.
>>
>> Signed-off-by: Alexey Budankov <alexey.budankov@xxxxxxxxxxxxxxx>
>> ---
>> tools/perf/Documentation/perf-record.txt | 5 +++++
>> tools/perf/builtin-record.c | 18 ++++++++++++++++++
>> 2 files changed, 23 insertions(+)
>>
>> diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt
>> index d232b13ea713..efb839784f32 100644
>> --- a/tools/perf/Documentation/perf-record.txt
>> +++ b/tools/perf/Documentation/perf-record.txt
>> @@ -440,6 +440,11 @@ Use <n> control blocks in asynchronous (Posix AIO) trace writing mode (default:
>> Asynchronous mode is supported only when linking Perf tool with libc library
>> providing implementation for Posix AIO API.
>>
>> +--affinity=mode::
>> +Set affinity mask of trace reading thread according to the policy defined by 'mode' value:
>> + node - thread affinity mask is set to NUMA node cpu mask of the processed mmap buffer
>> + cpu - thread affinity mask is set to cpu of the processed mmap buffer
>> +
>> --all-kernel::
>> Configure all used events to run in kernel space.
>>
>> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
>> index eea96794ee45..57dc3a45d16f 100644
>> --- a/tools/perf/builtin-record.c
>> +++ b/tools/perf/builtin-record.c
>> @@ -1653,6 +1653,21 @@ static int parse_clockid(const struct option *opt, const char *str, int unset)
>> ui__warning("unknown clockid %s, check man page\n", ostr);
>> return -1;
>> }
>> +static int record__parse_affinity(const struct option *opt, const char *str, int unset)
>> +{
>> + struct record_opts *opts = (struct record_opts *)opt->value;
>> +
>> + if (!unset) {
>> + if (str) {
>> + if (!strcasecmp(str, "node"))
>> + opts->affinity = PERF_AFFINITY_NODE;
>> + else if (!strcasecmp(str, "cpu"))
>> + opts->affinity = PERF_AFFINITY_CPU;
>> + }
>> + }
>> +
>> + return 0;
>> +}
>>
>> static int record__parse_mmap_pages(const struct option *opt,
>> const char *str,
>> @@ -1961,6 +1976,9 @@ static struct option __record_options[] = {
>> &nr_cblocks_default, "n", "Use <n> control blocks in asynchronous trace writing mode (default: 1, max: 4)",
>> record__aio_parse),
>> #endif
>> + OPT_CALLBACK(0, "affinity", &record.opts, "node|cpu",
>> + "Set affinity mask of trace reading thread to NUMA node cpu mask or cpu of processed mmap buffer",
>> + record__parse_affinity),
>
> so this makes sense only when there's --aio and LIBNUMA
> in place.. we should check for those and allow this only
> for these

Serial trace streaming also benefits from that.

Thanks,
Alexey

>
> jirka
>