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>
This commit is contained in:
parent
77d0871c76
commit
de5077c4e3
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
#ifndef SMT_H
|
||||
#define SMT_H 1
|
||||
|
||||
int smt_on(void);
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue