diff options
author | Khem Raj <raj.khem@gmail.com> | 2019-06-16 22:14:17 -0700 |
---|---|---|
committer | Khem Raj <raj.khem@gmail.com> | 2019-06-16 22:25:54 -0700 |
commit | 5673dae7b2b9f87197c6d24b4687b03959b0d7e7 (patch) | |
tree | 7ff448240f969d744a15f3aeb73cd880f597df91 /meta-oe/recipes-benchmark | |
parent | 36fcb1a8d1fcabcfd8bbd6772c6f2837799b8ec3 (diff) | |
download | meta-openembedded-contrib-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>
Diffstat (limited to 'meta-oe/recipes-benchmark')
-rw-r--r-- | meta-oe/recipes-benchmark/stressapptest/stressapptest/read_sysfs_for_cachesize.patch | 72 | ||||
-rw-r--r-- | meta-oe/recipes-benchmark/stressapptest/stressapptest_1.0.9.bb | 1 |
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" |