lkml.org 
[lkml]   [2015]   [Nov]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH 1/4] perf tools: Pass available CPU number to clang compiler
    Em Wed, Nov 04, 2015 at 11:20:04AM +0000, Wang Nan escreveu:
    > This patch introduces a new macro "__NR_CPUS__" to perf's embedded
    > clang compiler, which represent the available CPU counters in this

    available "CPU counters"? ENOPARSE :-)

    > system. BPF program can use this macro to create a map with same
    > number of system CPUs. For exmaple:
    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__,
    > };

    I wonder if we shouldn't use the getconf() parameter here, i.e. define
    _SC_NPROCESSORS_CONF and also provide _SC_NPROCESSORS_ONLN.

    The kernel uses NR_CPUS, for accessing CONFIG_NR_CPUS, Alexei, what do
    you think?

    - Arnaldo

    > Signed-off-by: Wang Nan <wangnan0@huawei.com>
    > Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    > Cc: Alexei Starovoitov <ast@kernel.org>
    > Cc: Namhyung Kim <namhyung@kernel.org>
    > Cc: Zefan Li <lizefan@huawei.com>
    > Cc: pi3orama@163.com
    > ---
    > 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(&kbuild_dir, &kbuild_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);
    > --
    > 1.8.3.4


    \
     
     \ /
      Last update: 2015-11-04 23:21    [W:2.286 / U:0.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site