From 25ebba6d9f8e315e2adb6a499fec52ff4fc7a706 Mon Sep 17 00:00:00 2001 From: Ciro Santilli Date: Wed, 2 May 2018 09:28:37 +0100 Subject: [PATCH] br2: enable taskset, create sched_getaffinity, yet undocumented --- br2 | 2 ++ gem5-stat | 2 +- kernel_module/user/README.adoc | 1 + kernel_module/user/sched_getaffinity.c | 44 ++++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 kernel_module/user/sched_getaffinity.c diff --git a/br2 b/br2 index f31eeec..ebeba8f 100644 --- a/br2 +++ b/br2 @@ -39,6 +39,8 @@ BR2_TOOLCHAIN_BUILDROOT_WCHAR=y # lscpu: TODO not installing? BR2_PACKAGE_UTIL_LINUX=y BR2_PACKAGE_UTIL_LINUX_BINARIES=y +# taskset +BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y # Host GDB BR2_GDB_VERSION="7.11.1" diff --git a/gem5-stat b/gem5-stat index 70ec419..b1eb2fd 100755 --- a/gem5-stat +++ b/gem5-stat @@ -19,7 +19,7 @@ shift "$(($OPTIND - 1))" if [ $# -gt 0 ]; then stat="$1" else - stat=system.cpu.numCycles + stat=system.cpu[0-9]*.numCycles fi set_common_vars "$arch" true awk "/^$stat /{ print \$2 }" "${m5out_dir}/stats.txt" diff --git a/kernel_module/user/README.adoc b/kernel_module/user/README.adoc index eb623c2..ce20135 100644 --- a/kernel_module/user/README.adoc +++ b/kernel_module/user/README.adoc @@ -12,6 +12,7 @@ These programs can also be compiled and used on host. .. link:hello.c[] .. link:myinsmod.c[] .. link:myrmmod.c[] +.. link:sched_getaffinity.c[] .. link:usermem.c[] ... link:pagemap_dump.c[] .. inits diff --git a/kernel_module/user/sched_getaffinity.c b/kernel_module/user/sched_getaffinity.c new file mode 100644 index 0000000..9e8bb24 --- /dev/null +++ b/kernel_module/user/sched_getaffinity.c @@ -0,0 +1,44 @@ +/* +upstream; https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from-c/50117787#50117787 +*/ + +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include + +void print_affinity() { + cpu_set_t mask; + long nproc, i; + + if (sched_getaffinity(0, sizeof(cpu_set_t), &mask) == -1) { + perror("sched_getaffinity"); + assert(false); + } else { + nproc = sysconf(_SC_NPROCESSORS_ONLN); + printf("sched_getaffinity = "); + for (i = 0; i < nproc; i++) { + printf("%d ", CPU_ISSET(i, &mask)); + } + printf("\n"); + } +} + +int main(void) { + cpu_set_t mask; + + print_affinity(); + printf("sched_getcpu = %d\n", sched_getcpu()); + CPU_ZERO(&mask); + CPU_SET(0, &mask); + if (sched_setaffinity(0, sizeof(cpu_set_t), &mask) == -1) { + perror("sched_setaffinity"); + assert(false); + } + print_affinity(); + printf("sched_getcpu = %d\n", sched_getcpu()); + return EXIT_SUCCESS; +}