[tip:perf/urgent] perf llvm: Pass number of configured CPUs to clang compiler

2015-11-07 Thread tip-bot for Wang Nan
Commit-ID:  59f41af980f95cbd556a6dc2e064b412abc439cf
Gitweb: http://git.kernel.org/tip/59f41af980f95cbd556a6dc2e064b412abc439cf
Author: Wang Nan 
AuthorDate: Wed, 4 Nov 2015 11:20:04 +
Committer:  Arnaldo Carvalho de Melo 
CommitDate: Thu, 5 Nov 2015 12:47:02 -0300

perf llvm: Pass number of configured CPUs to clang compiler

This patch introduces a new macro "__NR_CPUS__" to perf's embedded clang
compiler, which represent the number of configured CPUs in this system.
BPF programs can use this macro to create a map with the same number of
system CPUs. For example:

 struct bpf_map_def SEC("maps") pmu_map = {
 .type = BPF_MAP_TYPE_PERF_EVENT_ARRAY,
 .key_size = sizeof(int),
 .value_size = sizeof(u32),
 .max_entries = __NR_CPUS__,
 };

Signed-off-by: Wang Nan 
Cc: Alexei Starovoitov 
Cc: Namhyung Kim 
Cc: Zefan Li 
Cc: pi3or...@163.com
Link: 
http://lkml.kernel.org/r/1446636007-239722-2-git-send-email-wangn...@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo 
---
 tools/perf/util/llvm-utils.c | 24 ++--
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/tools/perf/util/llvm-utils.c b/tools/perf/util/llvm-utils.c
index 4f6a478..80eecef 100644
--- a/tools/perf/util/llvm-utils.c
+++ b/tools/perf/util/llvm-utils.c
@@ -11,10 +11,11 @@
 #include "cache.h"
 
 #define CLANG_BPF_CMD_DEFAULT_TEMPLATE \
-   "$CLANG_EXEC -D__KERNEL__ $CLANG_OPTIONS "  \
-   "$KERNEL_INC_OPTIONS -Wno-unused-value "\
-   "-Wno-pointer-sign -working-directory " \
-   "$WORKING_DIR -c \"$CLANG_SOURCE\" -target bpf -O2 -o -"
+   "$CLANG_EXEC -D__KERNEL__ -D__NR_CPUS__=$NR_CPUS "\
+   "$CLANG_OPTIONS $KERNEL_INC_OPTIONS "   \
+   "-Wno-unused-value -Wno-pointer-sign "  \
+   "-working-directory $WORKING_DIR "  \
+   "-c \"$CLANG_SOURCE\" -target bpf -O2 -o -"
 
 struct llvm_param llvm_param = {
.clang_path = "clang",
@@ -326,8 +327,8 @@ get_kbuild_opts(char **kbuild_dir, char 
**kbuild_include_opts)
 int llvm__compile_bpf(const char *path, void **p_obj_buf,
  size_t *p_obj_buf_sz)
 {
-   int err;
-   char clang_path[PATH_MAX];
+   int err, nr_cpus_avail;
+   char clang_path[PATH_MAX], nr_cpus_avail_str[64];
const char *clang_opt = llvm_param.clang_opt;
const char *template = llvm_param.clang_bpf_cmd_template;
char *kbuild_dir = NULL, *kbuild_include_opts = NULL;
@@ -354,6 +355,17 @@ int llvm__compile_bpf(const char *path, void **p_obj_buf,
 */
get_kbuild_opts(_dir, _include_opts);
 
+   nr_cpus_avail = sysconf(_SC_NPROCESSORS_CONF);
+   if (nr_cpus_avail <= 0) {
+   pr_err(
+"WARNING:\tunable to get available CPUs in this system: %s\n"
+"\tUse 128 instead.\n", strerror(errno));
+   nr_cpus_avail = 128;
+   }
+   snprintf(nr_cpus_avail_str, sizeof(nr_cpus_avail_str), "%d",
+nr_cpus_avail);
+
+   force_set_env("NR_CPUS", nr_cpus_avail_str);
force_set_env("CLANG_EXEC", clang_path);
force_set_env("CLANG_OPTIONS", clang_opt);
force_set_env("KERNEL_INC_OPTIONS", kbuild_include_opts);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[tip:perf/urgent] perf llvm: Pass number of configured CPUs to clang compiler

2015-11-07 Thread tip-bot for Wang Nan
Commit-ID:  59f41af980f95cbd556a6dc2e064b412abc439cf
Gitweb: http://git.kernel.org/tip/59f41af980f95cbd556a6dc2e064b412abc439cf
Author: Wang Nan 
AuthorDate: Wed, 4 Nov 2015 11:20:04 +
Committer:  Arnaldo Carvalho de Melo 
CommitDate: Thu, 5 Nov 2015 12:47:02 -0300

perf llvm: Pass number of configured CPUs to clang compiler

This patch introduces a new macro "__NR_CPUS__" to perf's embedded clang
compiler, which represent the number of configured CPUs in this system.
BPF programs can use this macro to create a map with the same number of
system CPUs. For example:

 struct bpf_map_def SEC("maps") pmu_map = {
 .type = BPF_MAP_TYPE_PERF_EVENT_ARRAY,
 .key_size = sizeof(int),
 .value_size = sizeof(u32),
 .max_entries = __NR_CPUS__,
 };

Signed-off-by: Wang Nan 
Cc: Alexei Starovoitov 
Cc: Namhyung Kim 
Cc: Zefan Li 
Cc: pi3or...@163.com
Link: 
http://lkml.kernel.org/r/1446636007-239722-2-git-send-email-wangn...@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo 
---
 tools/perf/util/llvm-utils.c | 24 ++--
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/tools/perf/util/llvm-utils.c b/tools/perf/util/llvm-utils.c
index 4f6a478..80eecef 100644
--- a/tools/perf/util/llvm-utils.c
+++ b/tools/perf/util/llvm-utils.c
@@ -11,10 +11,11 @@
 #include "cache.h"
 
 #define CLANG_BPF_CMD_DEFAULT_TEMPLATE \
-   "$CLANG_EXEC -D__KERNEL__ $CLANG_OPTIONS "  \
-   "$KERNEL_INC_OPTIONS -Wno-unused-value "\
-   "-Wno-pointer-sign -working-directory " \
-   "$WORKING_DIR -c \"$CLANG_SOURCE\" -target bpf -O2 -o -"
+   "$CLANG_EXEC -D__KERNEL__ -D__NR_CPUS__=$NR_CPUS "\
+   "$CLANG_OPTIONS $KERNEL_INC_OPTIONS "   \
+   "-Wno-unused-value -Wno-pointer-sign "  \
+   "-working-directory $WORKING_DIR "  \
+   "-c \"$CLANG_SOURCE\" -target bpf -O2 -o -"
 
 struct llvm_param llvm_param = {
.clang_path = "clang",
@@ -326,8 +327,8 @@ get_kbuild_opts(char **kbuild_dir, char 
**kbuild_include_opts)
 int llvm__compile_bpf(const char *path, void **p_obj_buf,
  size_t *p_obj_buf_sz)
 {
-   int err;
-   char clang_path[PATH_MAX];
+   int err, nr_cpus_avail;
+   char clang_path[PATH_MAX], nr_cpus_avail_str[64];
const char *clang_opt = llvm_param.clang_opt;
const char *template = llvm_param.clang_bpf_cmd_template;
char *kbuild_dir = NULL, *kbuild_include_opts = NULL;
@@ -354,6 +355,17 @@ int llvm__compile_bpf(const char *path, void **p_obj_buf,
 */
get_kbuild_opts(_dir, _include_opts);
 
+   nr_cpus_avail = sysconf(_SC_NPROCESSORS_CONF);
+   if (nr_cpus_avail <= 0) {
+   pr_err(
+"WARNING:\tunable to get available CPUs in this system: %s\n"
+"\tUse 128 instead.\n", strerror(errno));
+   nr_cpus_avail = 128;
+   }
+   snprintf(nr_cpus_avail_str, sizeof(nr_cpus_avail_str), "%d",
+nr_cpus_avail);
+
+   force_set_env("NR_CPUS", nr_cpus_avail_str);
force_set_env("CLANG_EXEC", clang_path);
force_set_env("CLANG_OPTIONS", clang_opt);
force_set_env("KERNEL_INC_OPTIONS", kbuild_include_opts);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/