aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2019-06-16 22:14:17 -0700
committerKhem Raj <raj.khem@gmail.com>2019-06-16 22:25:54 -0700
commit5673dae7b2b9f87197c6d24b4687b03959b0d7e7 (patch)
tree7ff448240f969d744a15f3aeb73cd880f597df91
parent36fcb1a8d1fcabcfd8bbd6772c6f2837799b8ec3 (diff)
downloadmeta-openembedded-5673dae7b2b9f87197c6d24b4687b03959b0d7e7.tar.gz
stressapptest: Implement reading sysfs and use it if sysconf is not there
This helps in building on musl platform where _SC_LEVEL1_DCACHE_LINESIZE is not available Signed-off-by: Khem Raj <raj.khem@gmail.com>
-rw-r--r--meta-oe/recipes-benchmark/stressapptest/stressapptest/read_sysfs_for_cachesize.patch72
-rw-r--r--meta-oe/recipes-benchmark/stressapptest/stressapptest_1.0.9.bb1
2 files changed, 73 insertions, 0 deletions
diff --git a/meta-oe/recipes-benchmark/stressapptest/stressapptest/read_sysfs_for_cachesize.patch b/meta-oe/recipes-benchmark/stressapptest/stressapptest/read_sysfs_for_cachesize.patch
new file mode 100644
index 0000000000..8c251aeb97
--- /dev/null
+++ b/meta-oe/recipes-benchmark/stressapptest/stressapptest/read_sysfs_for_cachesize.patch
@@ -0,0 +1,72 @@
+sysconf params like _SC_LEVEL1_DCACHE_LINESIZE are not universally
+implemented, therefore check for them being available, if not there
+then read the sysfs directly to get the value
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+--- a/src/sat.cc
++++ b/src/sat.cc
+@@ -1482,15 +1482,47 @@ int Sat::CpuCount() {
+ return sysconf(_SC_NPROCESSORS_CONF);
+ }
+
++int Sat::ReadInt(const char *filename, int *value) {
++ char line[64];
++ int fd = open(filename, O_RDONLY), err = -1;
++
++ if (fd < 0)
++ return -1;
++ if (read(fd, line, sizeof(line)) > 0) {
++ *value = atoi(line);
++ err = 0;
++ }
++
++ close(fd);
++ return err;
++}
++
+ // Return the worst case (largest) cache line size of the various levels of
+ // cache actually prsent in the machine.
+ int Sat::CacheLineSize() {
+- int max_linesize = sysconf(_SC_LEVEL1_DCACHE_LINESIZE);
+- int linesize = sysconf(_SC_LEVEL2_CACHE_LINESIZE);
++ int max_linesize, linesize;
++#ifdef _SC_LEVEL1_DCACHE_LINESIZE
++ max_linesize = sysconf(_SC_LEVEL1_DCACHE_LINESIZE);
++#else
++ ReadInt("/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size", &max_linesize);
++#endif
++#ifdef _SC_LEVEL2_DCACHE_LINESIZE
++ linesize = sysconf(_SC_LEVEL2_DCACHE_LINESIZE);
++#else
++ ReadInt("/sys/devices/system/cpu/cpu0/cache/index1/coherency_line_size", &linesize);
++#endif
+ if (linesize > max_linesize) max_linesize = linesize;
+- linesize = sysconf(_SC_LEVEL3_CACHE_LINESIZE);
++#ifdef _SC_LEVEL3_DCACHE_LINESIZE
++ linesize = sysconf(_SC_LEVEL3_DCACHE_LINESIZE);
++#else
++ ReadInt("/sys/devices/system/cpu/cpu0/cache/index2/coherency_line_size", &linesize);
++#endif
+ if (linesize > max_linesize) max_linesize = linesize;
+- linesize = sysconf(_SC_LEVEL4_CACHE_LINESIZE);
++#ifdef _SC_LEVEL4_DCACHE_LINESIZE
++ linesize = sysconf(_SC_LEVEL4_DCACHE_LINESIZE);
++#else
++ ReadInt("/sys/devices/system/cpu/cpu0/cache/index3/coherency_line_size", &linesize);
++#endif
+ if (linesize > max_linesize) max_linesize = linesize;
+ return max_linesize;
+ }
+--- a/src/sat.h
++++ b/src/sat.h
+@@ -136,7 +136,8 @@ class Sat {
+ int CpuCount();
+ // Return the worst-case (largest) cache line size of the system.
+ int CacheLineSize();
+-
++ // Read int values from kernel file system e.g. sysfs
++ int ReadInt(const char *filename, int *value);
+ // Collect error counts from threads.
+ int64 GetTotalErrorCount();
+
diff --git a/meta-oe/recipes-benchmark/stressapptest/stressapptest_1.0.9.bb b/meta-oe/recipes-benchmark/stressapptest/stressapptest_1.0.9.bb
index 679201c528..aa1bf1cd32 100644
--- a/meta-oe/recipes-benchmark/stressapptest/stressapptest_1.0.9.bb
+++ b/meta-oe/recipes-benchmark/stressapptest/stressapptest_1.0.9.bb
@@ -11,6 +11,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=55ea9d559f985fb4834317d8ed6b9e58"
SRC_URI = "https://github.com/${PN}/${PN}/archive/v${PV}.tar.gz \
file://libcplusplus-compat.patch \
+ file://read_sysfs_for_cachesize.patch \
"
SRC_URI[md5sum] = "d3a526c174c049dd7a1068dc74a62be2"