-***transparent_hugepage=never*** do not scan for small pages to combine to hugepages. We have no issues with memory usage, spare us of this periodic jitter.
-***transparent_hugepage=never*** do not scan for small pages to combine to hugepages. We have no issues with memory usage, spare us of this periodic jitter.
-***processor.max_cstate=1 idle=poll*** do not switch to CPU power saving modes (c-states). Just run all cores at full speed all the time (we do not care about energy during our tests).
-***processor.max_cstate=1 idle=poll*** do not switch to CPU power saving modes (c-states). Just run all cores at full speed all the time (we do not care about energy during our tests).
-***nohz=on nohz_full=1-7*** disable houskeeping os ticks on our isolated benchmark cores. core 0 will handle these when needed.
-***nohz=on nohz_full=1-7*** disable houskeeping os ticks on our isolated benchmark cores. core 0 will handle these when needed.
-***isolcpus=1-7*** ignores cores 1 to 7 for scheduling processes (expect system processes that are bound to cores).
### Pin all other processes to core 0 (crgoups)
### Pin all other processes to core 0 (crgoups)
We want to isolate our measurements to cores 1 to 7 and use core 0 for all non benchmark related processes.
We want to isolate our measurements to cores 1 to 7 and use core 0 for all non benchmark related processes.
isolcpus does some of this during startup (TODO: see if there are issues with task migration if we use isolcpus),
isolcpus is often used for this, however, we found that it disables the scheduler from balancing tasks
however, we need to configure the system to schedule our threads specifically onto the isolated cores.
between the isolated cores. A better approach is to use cgroups.
See the tutorial for further information: https://github.com/lpechacek/cpuset/blob/master/doc/tutorial.txt
cgroups is a tool well suited for this. See the tutorial for further information: https://github.com/lpechacek/cpuset/blob/master/doc/tutorial.txt
Essentially, we can partition our cores into two isolated groups, then map all tasks that can be moved away from
Essentially, we can partition our cores into two isolated groups, then map all tasks that can be moved away from
our benchmark cores, to ensure low influence of background tasks. Cgroups also nicely interact with
our benchmark cores, to ensure low influence of background tasks. Cgroups also nicely interact with
the real time scheduler, as described here https://www.linuxjournal.com/article/10165, because
the real time scheduler, as described here https://www.linuxjournal.com/article/10165, because
...
@@ -196,6 +194,7 @@ echo "Some might fail because they can not be mapped (e.g. core specific timers
...
@@ -196,6 +194,7 @@ echo "Some might fail because they can not be mapped (e.g. core specific timers