Skip to content
Snippets Groups Projects
Commit 6f707f1c authored by Florian Schmaus's avatar Florian Schmaus
Browse files

Merge branch 'improve-default-worker-count' into 'master'

[Runtime] use pthread_getaffinity_np to determine default worker count

Closes #19

See merge request !211
parents 7dd95bcc 7cb1a828
No related branches found
No related tags found
1 merge request!211[Runtime] use pthread_getaffinity_np to determine default worker count
Pipeline #65201 passed
...@@ -264,6 +264,23 @@ auto Runtime::getDefaultWorkerCount() -> workerid_t { ...@@ -264,6 +264,23 @@ auto Runtime::getDefaultWorkerCount() -> workerid_t {
return static_cast<workerid_t>(workerCountInt); return static_cast<workerid_t>(workerCountInt);
} }
// The CPU count reported by sysconf(_SC_NPROCESSORS_ONLN), sysconf(_SC_NPROCESSORS_CONF)
// or std::thread::hardware_concurrency() may not match the CPU count available
// to the emper process.
// This can happen for example if we run EMPER in a container or qemu.o
// GNU nproc(1) does report the correct CPU count using pthread_getaffinity_np
// which fills a cpu_set with the CPUs the current process can be scheduled on
// therefore we use this more precise CPU count if possible.
// Code inspiration taken from:
// https://github.com/coreutils/gnulib/blob/90e79512d8b385801218d6e9c4d88ff77186560b/lib/nproc.c#L206
cpu_set_t set;
if (pthread_getaffinity_np(pthread_self(), sizeof(set), &set) == 0) {
unsigned long count = CPU_COUNT(&set);
if (count > 0) {
return count;
}
}
return std::thread::hardware_concurrency(); return std::thread::hardware_concurrency();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment