lkml.org 
[lkml]   [2017]   [Aug]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/core] perf tools: Add utility function to detect SMT status
    Commit-ID:  de5077c4e38f2a51f50d28bdd5e4a0f14b3d16ff
    Gitweb: http://git.kernel.org/tip/de5077c4e38f2a51f50d28bdd5e4a0f14b3d16ff
    Author: Andi Kleen <ak@linux.intel.com>
    AuthorDate: Fri, 11 Aug 2017 16:26:22 -0700
    Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
    CommitDate: Tue, 22 Aug 2017 12:09:04 -0300

    perf tools: Add utility function to detect SMT status

    Add an smt_on() function to return if SMT is enabled or disabled. Used
    in the next patch.

    Signed-off-by: Andi Kleen <ak@linux.intel.com>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Link: http://lkml.kernel.org/r/20170811232634.30465-7-andi@firstfloor.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/util/Build | 1 +
    tools/perf/util/smt.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
    tools/perf/util/smt.h | 6 ++++++
    3 files changed, 51 insertions(+)

    diff --git a/tools/perf/util/Build b/tools/perf/util/Build
    index 8d49a98..94518c1 100644
    --- a/tools/perf/util/Build
    +++ b/tools/perf/util/Build
    @@ -22,6 +22,7 @@ libperf-y += rbtree.o
    libperf-y += libstring.o
    libperf-y += bitmap.o
    libperf-y += hweight.o
    +libperf-y += smt.o
    libperf-y += quote.o
    libperf-y += strbuf.o
    libperf-y += string.o
    diff --git a/tools/perf/util/smt.c b/tools/perf/util/smt.c
    new file mode 100644
    index 0000000..453f6f6
    --- /dev/null
    +++ b/tools/perf/util/smt.c
    @@ -0,0 +1,44 @@
    +#include <stdio.h>
    +#include <stdlib.h>
    +#include <unistd.h>
    +#include <linux/bitops.h>
    +#include "api/fs/fs.h"
    +#include "smt.h"
    +
    +int smt_on(void)
    +{
    + static bool cached;
    + static int cached_result;
    + int cpu;
    + int ncpu;
    +
    + if (cached)
    + return cached_result;
    +
    + ncpu = sysconf(_SC_NPROCESSORS_CONF);
    + for (cpu = 0; cpu < ncpu; cpu++) {
    + unsigned long long siblings;
    + char *str;
    + size_t strlen;
    + char fn[256];
    +
    + snprintf(fn, sizeof fn,
    + "devices/system/cpu/cpu%d/topology/thread_siblings",
    + cpu);
    + if (sysfs__read_str(fn, &str, &strlen) < 0)
    + continue;
    + /* Entry is hex, but does not have 0x, so need custom parser */
    + siblings = strtoull(str, NULL, 16);
    + free(str);
    + if (hweight64(siblings) > 1) {
    + cached_result = 1;
    + cached = true;
    + break;
    + }
    + }
    + if (!cached) {
    + cached_result = 0;
    + cached = true;
    + }
    + return cached_result;
    +}
    diff --git a/tools/perf/util/smt.h b/tools/perf/util/smt.h
    new file mode 100644
    index 0000000..b8414b7
    --- /dev/null
    +++ b/tools/perf/util/smt.h
    @@ -0,0 +1,6 @@
    +#ifndef SMT_H
    +#define SMT_H 1
    +
    +int smt_on(void);
    +
    +#endif
    \
     
     \ /
      Last update: 2017-08-24 10:22    [W:4.985 / U:0.188 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site