From: Namhyung Kim <namhyung@gmail.com>
To: Don Zickus <dzickus@redhat.com>
Cc: acme@ghostprotocols.net, LKML <linux-kernel@vger.kernel.org>,
jolsa@redhat.com, jmario@redhat.com, fowles@inreach.com,
bp@alien8.de
Subject: Re: [PATCH 1/4] perf: Allow ability to map cpus to nodes easily
Date: Thu, 03 Apr 2014 14:48:51 +0900 [thread overview]
Message-ID: <874n2byncs.fsf@sejong.aot.lge.com> (raw)
In-Reply-To: <1395689577-214654-2-git-send-email-dzickus@redhat.com> (Don Zickus's message of "Mon, 24 Mar 2014 15:32:54 -0400")
Hi Don,
(Adding Boris to CC as he might be interested)
On Mon, 24 Mar 2014 15:32:54 -0400, Don Zickus wrote:
> This patch figures out the max number of cpus and nodes that are on the
> system and creates a map of cpu to node. This allows us to provide a cpu
> and quickly get the node associated with it.
>
> It was mostly copied from builtin-kmem.c and tweaked slightly to use less memory
> (use possible cpus instead of max). It also calculates the max number of nodes.
>
> V3: simplify function names
>
> Signed-off-by: Don Zickus <dzickus@redhat.com>
> ---
> tools/perf/util/cpumap.c | 139 +++++++++++++++++++++++++++++++++++++++++++++++
> tools/perf/util/cpumap.h | 35 ++++++++++++
> 2 files changed, 174 insertions(+)
>
> diff --git a/tools/perf/util/cpumap.c b/tools/perf/util/cpumap.c
> index 7fe4994..2eb528e 100644
> --- a/tools/perf/util/cpumap.c
> +++ b/tools/perf/util/cpumap.c
> @@ -317,3 +317,142 @@ int cpu_map__build_core_map(struct cpu_map *cpus, struct cpu_map **corep)
> {
> return cpu_map__build_map(cpus, corep, cpu_map__get_core);
> }
> +
> +/* setup simple routines to easily access node numbers given a cpu number */
> +static int __set_max_num(FILE *fp, int *max)
> +{
> + int num;
> + char buf[256];
> +
> + num = fread(&buf, 1, sizeof(buf), fp);
> + if (!num)
> + return -1;
> +
> + buf[num] = '\0';
> +
> + /* start on the right, to find highest node num */
> + while (--num) {
> + if ((buf[num] == ',') || (buf[num] == '-')) {
> + num++;
> + break;
> + }
> + }
> + if (sscanf(&buf[num], "%d", max) < 1)
> + return -1;
> +
> + /* convert from 0-based to 1-based */
> + (*max)++;
> +
> + return 0;
> +}
> +
> +/* Determine highest possible cpu in the system for sparse allocation */
> +static void set_max_cpu_num(void)
> +{
> + FILE *fp;
> + int ret = -1;
> +
> + /* set up default */
> + max_cpu_num = 4096;
> +
> + /* get the highest possible cpu number for a sparse allocation */
> + fp = fopen("/sys/devices/system/cpu/possible", "r");
More generally, this sysfs access needs to check actual mountpoint using
sysfs__mountpoint() IMHO.
Also this API can be generalized like reading int value from a sysfs
file as the filename itself represents the content in most cases.
So how about changing this way? It might reside on somewhere in tools/lib/api/fs/.
max_cpu_num = sysfs__read_int("devices/system/cpu/possible");
max_node_num = sysfs__read_int("devices/system/node/possible");
Hmm.. looking at the code, perf already has filename__read_{int,str} API
in util/util.c. Maybe you can just use it instead.
Thanks,
Namhyung
next prev parent reply other threads:[~2014-04-03 5:48 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-24 19:32 [PATCH 0/4] perf: Make some functions generic Don Zickus
2014-03-24 19:32 ` [PATCH 1/4] perf: Allow ability to map cpus to nodes easily Don Zickus
2014-03-29 17:10 ` Jiri Olsa
2014-04-01 2:39 ` Don Zickus
2014-04-06 12:19 ` Jiri Olsa
2014-04-03 5:48 ` Namhyung Kim [this message]
2014-04-06 12:15 ` Jiri Olsa
2014-04-07 5:28 ` Namhyung Kim
2014-04-07 18:20 ` Don Zickus
2014-03-24 19:32 ` [PATCH 2/4] perf, kmem: Utilize the new generic cpunode_map Don Zickus
2014-03-29 17:10 ` Jiri Olsa
2014-04-01 2:42 ` Don Zickus
2014-04-06 12:21 ` Jiri Olsa
2014-04-07 18:18 ` Don Zickus
2014-03-24 19:32 ` [PATCH 3/4] perf, callchain: Add generic report parse callchain callback function Don Zickus
2014-03-29 17:11 ` Jiri Olsa
2014-04-03 5:57 ` Namhyung Kim
2014-04-04 19:31 ` Don Zickus
2014-04-06 12:11 ` Jiri Olsa
2014-04-07 5:15 ` Namhyung Kim
2014-04-07 7:01 ` Jiri Olsa
2014-03-24 19:32 ` [PATCH 4/4] perf, report: Use new generic report parse callchain callback Don Zickus
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=874n2byncs.fsf@sejong.aot.lge.com \
--to=namhyung@gmail.com \
--cc=acme@ghostprotocols.net \
--cc=bp@alien8.de \
--cc=dzickus@redhat.com \
--cc=fowles@inreach.com \
--cc=jmario@redhat.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
/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.