temci exec¶
This page explains temci exec
and temci short exec
that allow you to run the actual benchmarks.
The basic concept is that there are
- run drivers
that support a specific benchmarking concept (like benchmarking whole programs that can be executed in the shell), these run drivers use
- runners
for the actual benchmarking and
- plugins
to setup up the benchmarking environment
Currently only one run driver is implemented, the exec run driver that supports benchmarking programs executed in a shell.
The benchmarking process produces a YAML file with the benchmarking results.
There are multiple features that require root privileges. To use these features, call temci with
the --sudo
option. It will run only temci in super user mode, but not the benchmarked programs
themself. Notable features that require these rights are cpu sets (for separating the benchmarked programs
from the rest of the system), disabling hyperthreading and setting the CPU governor.
temci short exec¶
Supports basic benchmarks, without creating a configuration file. It supports the same command line options
as temci exec
:
Usage: temci short exec [OPTIONS] COMMANDS
-wd, --without_description COMMAND:
Benchmark the command and use
itself as its description. Appends
'$ARGUMENT' to the command if the string
isn't present. Use the '--argument' option
to set the value that this string is
replaced with.
-d, --with_description DESCRIPTION COMMAND:
Benchmark the command
and set its description attribute.Appends
'$ARGUMENT' to the command if the string
isn't present. Use the '--argument' option
to set the value that this string is
replaced with.
…
(options of temci exec)
Usage¶
Basic benchmarking of two programs using the time:
# compare the run times of two programs, running them each 20 times
> temci short exec "sleep 0.1" "sleep 0.2" --runs 20
Benchmark 20 times [####################################] 100%
Report for single runs
sleep 0.1 ( 20 single benchmarks)
avg_mem_usage mean = 0.000, deviation = 0.0
avg_res_set mean = 0.000, deviation = 0.0
etime mean = 100.00000m, deviation = 0.00000%
max_res_set mean = 2.1800k, deviation = 3.86455%
stime mean = 0.000, deviation = 0.0
utime mean = 0.000, deviation = 0.0
sleep 0.2 ( 20 single benchmarks)
avg_mem_usage mean = 0.000, deviation = 0.0
avg_res_set mean = 0.000, deviation = 0.0
etime mean = 200.00000m, deviation = 0.00000%
max_res_set mean = 2.1968k, deviation = 3.82530%
stime mean = 0.000, deviation = 0.0
utime mean = 0.000, deviation = 0.0
Use –watch to display the report continuously, every –watch_every (default is 1) seconds.
The produced run_output.yaml
file is:
- attributes: {__description: sleep 0.1, description: sleep 0.1}
data:
max_res_set: [2148.0, 2288.0, 2152.0, 2120.0, 2340.0, 2076.0, 2152.0, 2280.0,
2080.0, 2276.0, 2124.0, 2120.0, 2136.0, 2156.0, 2272.0, 2280.0, 2284.0, 2060.0,
2120.0, 2136.0]
…
- attributes: {__description: sleep 0.2, description: sleep 0.2}
data:
max_res_set: [2080.0, 2284.0, 2140.0, 2124.0, 2156.0, 2096.0, 2096.0, 2284.0,
2288.0, 2120.0, 2284.0, 2280.0, 2284.0, 2272.0, 2272.0, 2152.0, 2152.0, 2328.0,
2152.0, 2092.0]
…
- property_descriptions: {avg_mem_usage: average total mem usage (in K), …}
More information on the format of the result file can be found in the documentation for temci report.
This documentation focuses on temci exec
and its input file and options.
Presets¶
temci has the --preset
option (and the setting run/exec_misc/preset
) that enables a specific
combination of plugins:
- none
no plugins are enabled, the default for non super user benchmarking
- all
Use all available plugins and render the system partially unusable by stopping all unnecessary processes etc., enables: cpu_governor, disable_swap, sync, stop_start, other_nice, nice, disable_aslr, disable_ht, disable_intel_turbo, cpuset
- usable
Use all plugins that do not affect other processes (besides restricting them to a single CPU), covers essentially the benchmarking tips of the LLVM project and enables: cpu_governor, disable_swap, sync, nice, disable_aslr, disable_ht, cpuset, disable_intel_turbo. This preset is used by default in super user mode (with ``–sudo``option).
Important: These presets don’t include the sleep plugin. Enable it via --sleep
if needed.
An overview over all available plugins is given at Overview.
Runners¶
The runners are selected on the command line using the --runner
option and the configuration file
via run/exec_misc/runner
. They obtain the actual measurements and are configured in the run configuration.
Configuring them in temci short exec
is currently not possible.
- time
Uses the GNU time utility to measure basic properties. This is the default runner. It is relatively imprecise but gives good ball park numbers for the performance.
- rusage
Uses the
getrusage
method and a small wrapper written in C (be sure to calltemci setup
if you install temci via pip, to build the wrapper).- perf_stat
Uses
perf stat
for measurements, might require root privileges. Allows measuring a wide range of properties- output
This runner obtains the measurements by parsing the output of the benchmarked program and interpreting it as a YAML mapping of properties to measurements (
property: NUMBER
lines). It can be used in combination with the time and perf_stat runners (using the--parse_output
option or settingparse_output
to true in the run block config).
Building¶
temci exec
supports to build the programs that are then benchmarked. It supports the same format and the same options as
temci build.
In the most basic case (and the case that is thoroughly tested), just supply a build command:
- attributes: …
run_config: …
build_config:
cmd: make # a sample build command
Executing the file with temci exec
runs all available build commands.
This can be configured using the following options (set in the run
settings block):
- no_build
Do not build, default is false
- only_build:
Only build the build configs for all blocks, default is false
- abort_after_build_error
default true
If building a block fails and abort_after_build_error
is not true
(e.g. --no-abort_after_build_error
is passed), then temci
produces an EXEC_INPUT_FILE.erroneous.yaml
that contains the configurations
of all failing blocks. This file can be used to execute the missing blocks
again after the error is fixed. Use the --append
option to append the benchmarks
to the preexisting benchmark result file.
Error Codes¶
0 |
no error |
1 |
at least one benchmarked program failed |
255 |
temci itself failed |
File format¶
The input file for temci exec
consists of a list of entries per run program block:
-
# Optional build config to integrate the build step into the run step
build_config: Either(Dict(, keys=Any, values=Any, default = {})|non existent)
# Optional attributes that describe the block
attributes:
description: Optional(Str())
# Tags of this block
tags: ListOrTuple(Str())
run_config:
# Command to benchmark, adds to run_cmd
cmd: Str()
# Configuration per plugin
time:
…
…
# Command to append before the commands to benchmark
cmd_prefix: List(Str())
# Execution directories for each command
cwd: Either(List(Str())|Str())
default: .
# Disable the address space layout randomization
disable_aslr: Bool()
# Override all other max runspecifications if > -1
max_runs: Int()
default: -1
# Override all other min runspecifications if > -1
min_runs: Int()
default: -1
# Parse the program output as a YAML dictionary of that gives for a specific property a
# measurement. Not all runners support it.
parse_output: Bool()
default: False
# Used revision (or revision number).-1 is the current revision, checks out the revision
revision: Either(Int()|Str())
default: -1
# Commands to benchmark
run_cmd: Either(List(Str())|Str())
# Used runner
runner: ExactEither()
default: time
# Override min run and max runspecifications if > -1
runs: Int()
default: -1
# Environment variables
env: Dict(, keys=Str(), values=Any, default = {})
# Configuration for the output and return code validator
validator:
# Program error output without ignoring line breaks and spaces at the beginning
# and the end
expected_err_output: Optional(Str())
# Strings that should be present in the program error output
expected_err_output_contains: Either(List(Str())|Str())
# Program output without ignoring line breaks and spaces at the beginning
# and the end
expected_output: Optional(Str())
# Strings that should be present in the program output
expected_output_contains: Either(List(Str())|Str())
# Allowed return code(s)
expected_return_code: Either(List(Int())|Int())
# Strings that shouldn't be present in the program output
unexpected_err_output_contains: Either(List(Str())|Str())
# Strings that shouldn't be present in the program output
unexpected_output_contains: Either(List(Str())|Str())
A basic config file looks like:
- run_config:
run_cmd: sleep 0.1
- run_config:
run_cmd: sleep 0.2
Common options¶
These options are passed in the run
settings block
(see Settings API or directly on the command line,
flags are of the schema --SETTING/--no-SETTING
):
# Append to the output file instead of overwriting by adding new run data blocks
append: Bool()
# Disable the hyper threaded cores. Good for cpu bound programs.
disable_hyper_threading: Bool()
# Discard all run data for the failing program on error
discard_all_data_for_block_on_error: Bool()
# First n runs that are discarded
discarded_runs: Int()
default: 1
# Possible run drivers are 'exec' and 'shell'
driver: ExactEither('exec'|'shell')
default: exec
# Input file with the program blocks to benchmark
in: Str()
default: input.exec.yaml
# List of included run blocks (all: include all)
# or their tag attribute or their number in the
# file (starting with 0), can be regular expressions
included_blocks: ListOrTuple(Str())
default: [all]
# Maximum time one run block should take, -1 == no timeout,
# supports normal time span expressions
max_block_time: ValidTimespan()
default: '-1'
# Maximum number of benchmarking runs
max_runs: Int()
default: 100
# Maximum time the whole benchmarking should take
# -1 == no timeout
# supports normal time spans
# expressions
max_time: ValidTimespan()
default: '-1'
# Minimum number of benchmarking runs
min_runs: Int()
default: 20
# Output file for the benchmarking results
out: Str()
default: run_output.yaml
# Record the caught errors in the run_output file
record_errors_in_file: Bool()
default: true
# Number of benchmarking runs that are done together
run_block_size: Int()
default: 1
# if != -1 sets max and min runs to its value
runs: Int()
default: -1
# Order in which the plugins are used, plugins that do not appear in this list are used before all others
plugin_order: ListOrTuple(Str())
default: ["drop_fs_caches", "sync", "sleep", "preheat", "flush_cpu_caches"]
# If not empty, recipient of a mail after the benchmarking finished.
send_mail: Str()
# Print console report if log_level=info
show_report: Bool()
default: true
# Randomize the order in which the program blocks are benchmarked.
shuffle: Bool()
default: true
# Store the result file after each set of blocks is benchmarked
store_often: Bool()
# Show the report continuously
watch: false
# Update the screen nth run (less updates are better for benchmarks)
watch_every: 1
cpuset:
# Use cpuset functionality?
active: Bool()
# Number of cpu cores for the base (remaining part of the) system
base_core_number: Int(range=range(0, NUMBER OF CPUS))
default: 1
# 0: benchmark sequential
# > 0: benchmark parallel with n instances
# -1: determine n automatically (based on the number of cpu cores)
parallel: Int()
# Number of cpu cores per parallel running program.
sub_core_number: Int(range=range(0, NUMBER OF CPUS))
default: 1
# Place temci in the same cpu set as the rest of the system?
temci_in_base_set: Bool()
default: True
# Maximum runs per tag (block attribute 'tag'), min('max_runs', 'per_tag') is used
max_runs_per_tag: Dict(, keys=Str(), values=Int(), default = {})
# Minimum runs per tag (block attribute 'tag'), max('min_runs', 'per_tag') is used
min_runs_per_tag: Dict(, keys=Str(), values=Int(), default = {})
# Runs per tag (block attribute 'tag'), max('runs', 'per_tag') is used
runs_per_tag: Dict(, keys=Str(), values=Int(), default = {})
# Do not build, the building process should not set the working directory
no_build: Bool()
default: False
# Only build the build configs for all blocks
only_build: Bool()
default: False
# Abort after the build error
abort_after_build_error: Bool()
default: True
There also some exec run driver specific options:
# Parse the program output as a YAML dictionary of that gives for a specific property a
# measurement. Not all runners support it.
parse_output: Bool()
# Enable other plugins by default
preset: ExactEither('none'|'all'|'usable')
default: none
# Pick a random command if more than one run command is passed.
random_cmd: Bool()
default: true
# If not '' overrides the runner setting for each program block
runner: ExactEither(''|'perf_stat'|'rusage'|'spec'|'spec.py'|'time'|'output')
Number of runs¶
The number of runs per block is either fixed by the runs
settings that apply or is between
the applying min_runs
and max_runs
setting. In the latter case, the benchmarking of a program
block is stopped early as soon as there is some significance in the benchmarking results compared to all
other benchmarked programs.
Runners¶
The runners are selected on the command line using the --runner
option and the configuration file
via run/exec_misc/runner
. They are configured in the run configuration file using the settings
block named like the runner in each run block.
time runner¶
Uses the GNU time
tool and is mostly equivalent to the rusage runner but more user friendly.
The runner is configured by modifying the time
property of a run configuration.
This configuration has the following structure:
# Measured properties that are included in the benchmarking results
properties: ValidTimePropertyList()
default: [utime, stime, etime, avg_mem_usage, max_res_set, avg_res_set]
The measurable properties are:
- utime
user CPU time used (in seconds)
- stime
system (kernel) CPU time used (in seconds)
- avg_unshared_data
average unshared data size in K
- etime
elapsed real (wall clock) time (in seconds)
- major_page_faults
major page faults (required physical I/O)
- file_system_inputs
blocks wrote in the file system
- avg_mem_usage
average total mem usage (in K)
- max_res_set
maximum resident set (not swapped out) size in K
- avg_res_set
average resident set (not swapped out) size in K
- file_system_output
blocks read from the file system
- cpu_perc
percent of CPU this job got (total cpu time / elapsed time)
- minor_page_faults
minor page faults (reclaims; no physical I/O involved)
- times_swapped_out
times swapped out
- avg_shared_text
average amount of shared text in K
- page_size
page size
- invol_context_switches
involuntary context switches
- vol_context_switches
voluntary context switches
- signals_delivered
signals delivered
- avg_unshared_stack
average unshared stack size in K
- socket_msg_rec
socket messages received
- socket_msg_sent
socket messages sent
This runner is implemented in the TimeExecRunner class.
Supports the parse_output
option.
rusage runner¶
Uses the getrusage
method and a small wrapper written in C (be sure to call temci setup
if you install temci via pip, to build the wrapper).
The runner is configured by modifying the rusage
property of a run configuration.
This configuration has the following structure:
# Measured properties that are stored in the benchmarking result
properties: ValidRusagePropertyList()
default: [idrss, inblock, isrss, ixrss,
majflt, maxrss, minflt,
msgrcv, msgsnd, nivcsw, nsignals,
nswap, nvcsw, oublock, stime, utime]
The measurable properties are:
- utime
user CPU time used
- stime
system CPU time used
- maxrss
maximum resident set size
- ixrss
integral shared memory size
- idrss
integral unshared data size
- isrss
integral unshared stack size
- nswap
swaps
- minflt
page reclaims (soft page faults)
- majflt
page faults (hard page faults)
- inblock
block input operations
- oublock
block output operations
- msgsnd
IPC messages sent
- msgrcv
IPC messages received
- nsignals
signals received
- nvcsw
voluntary context switches
- nivcsw
involuntary context switches
This runner is implemented in the RusageExecRunner class.
perf_stat runner¶
This runner uses the perf stat
tool to obtain measurements. It might have to be installed separately
(see Installation <installation.html>).
perf stat
allows measuring a myriad of properties but might require root privileges.
The runner is configured by modifying the perf_stat
property of a run configuration.
This configuration has the following structure:
# Limit measurements to CPU set, if cpusets are enabled
limit_to_cpuset: Bool()
default: true
# Measured properties. The number of properties that can be measured at once is limited.
properties: List(Str())
default: [wall-clock, cycles, cpu-clock, task-clock,
instructions, branch-misses, cache-references]
# If runner=perf_stat make measurements of the program repeated n times. Therefore scale the number of
# times a program is benchmarked.
repeat: Int()
default: 1
The measureable properties can be obtained by calling perf list
. Common properties are given above, other
notable properties are cache-misses
and branch-misses
. The wall-clock
property is obtained by
parsing the non-csv style output of perf stat
which is fragile.
This runner is implemented in the PerfStatExecRunner class.
Supports the parse_output
option.
output runner¶
This runner obtains the measurements by parsing the output of the benchmarked program and interpreting
it as a YAML mapping of property to measurement (property: NUMBER
lines).
It can be used in combination with the time and the perf_stat runner,
(using the --parse_output
option), allowing benchmarking a command and parsing its result for additional
measurements.
An example output is:
time: 10
load_time: 5
It also supports lists of values if the lists of all properties have the same number of elements. This can be used return the result of multiple measurements in one call of the benchmarked program:
time: [11.0, 10.01, 8.5]
load_time: [5.0, 6.7, 4.8]
This runner is implemented in the OutputExecRunner class.
spec runner¶
This runner might not really work and is not really used.
Runner for SPEC like single benchmarking suites. It works with resulting property files, in which the properties are colon separated from their values.
The runner is configured by modifying the spec
property of a run configuration.
This configuration has the following structure:
# Base property path that all other paths are relative to.
base_path: Str()
# Code that is executed for each matched path.
# The code should evaluate to the actual measured value
# for the path. It can use the function get(sub_path: str = '')
# and the modules pytimeparse, numpy, math, random, datetime and time.
code: Str()
default: get()
# SPEC result file
file: Str()
# Regexp matching the base property path for each measured property
path_regexp: Str()
default: .*
An example configuration is given in the following:
- attributes:
description: spec
run_config:
runner: spec
spec:
file: "spec_like_result.yaml"
base_path: "abc.cde.efg"
path_regexp: 'bench\d'
code: 'get(".min") * 60 + get(".sec") + random.random()'
- attributes:
description: "spec2"
run_config:
runner: spec
spec:
file: "spec_like_result.yaml"
base_path: "abc.cde.efg"
path_regexp: 'bench\d'
code: 'get(".min") * 60 + get(".sec") + 0.5 * random.random()'
This runner is implemented in the SpecExecRunner class.
Plugins¶
Plugins setup the benchmarking environment (e.g. set the CPU governor, …). All their actions are reversible and are reversed if temci aborts or finishes.
The plugins are enabled via the command line option --NAME
, in the configuration file
via run/exec_plugins/NAME_active
or by adding the name to set of active plugins in run/exec_plugins/exec_active
. A collection of them can be activated using Presets.
All plugins are located in the temci.run.run_driver_plugin module.
Overview¶
New plugins can be added easily (see Extending temci) but there are multiple plugins already available:
- cpu_governor
Set the cpu governor
- cpuset
Uses CPUSets to separate the CPUs used for benchmarking from the CPUs that the rest of the system runs on
- disable_aslr
Disable address space randomisation
- disable_cpu_caches
Disables the L1 and L2 caches
- disable_ht
Disables hyper-threading
- disable_intel_turbo
Disables the turbo mode on Intel CPUs
- disable_swap
Disables swapping data from the RAM into a backing hard drive
- discarded_runs
Discard the first runs (sets the
run/discarded_runs
setting)- drop_fs_caches
Drops file system caches
- env_randomize
Adds random environment variables to mitigate some cache alignment effects
- flush_cpu_caches
Flush the CPU caches on x86 CPUs
- nice
Increases the CPU and IO scheduling priorities of the benchmarked program
- other_nice
Decreases the CPU scheduling priority of all other programs
- preheat
Preheats the system with a CPU bound task
- sleep
Keeps the system idle for some time before the actual benchmarking
- stop_start
Stops almost all other processes (as far as possible)
- sync
Synchronizes cached writes of the file system to a persistent storage
The order in which the plugins are used (and called) is defined by the run/plugin_order
, see
common-options.
cpu_governor¶
Sets the CPU governor of all CPU cores.
The governor can be configured by either using the --cpu_governor_governor GOVERNOR
option or by
setting run/exec_plugins/cpu_governor_misc/governor
.
The default governor is performance
which is recommended for benchmarks.
The available governors can be obtained by calling
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
Requires root privileges.
cpuset¶
Uses cpusets to separate the CPUs used for benchmarking from the CPUs that the rest of the system runs on. For more information see CPUSets.
Requires root privileges.
disable_aslr¶
Disables the address space randomisation which might lead to less variance in the benchmarks.
Requires root privileges.
disable_cpu_caches¶
Disables the L1 and L2 caches on x86 and x86-64 architectures.
It uses a small custom kernel module (be sure to compile it via temci setup --build_kernel_modules
after install the appropriate
kernel-devel
package, see Installation).
Attention: It will slow down your system by orders of magnitude, giving you essentially a Pentium I like processor. Only use it for demonstration purposes.
Requires root privileges.
disable_ht¶
Disables hyper-threading, enabling it is equivalent to using the disable_hyper_threading
option
(see Common options).
It disable a number of CPU cores so that only one core per physical CPU core is active, thereby effectively disabling hyper-threading.
Requires root privileges.
disable_intel_turbo¶
Disables the turbo mode on Intel CPUs. Might reduce the variance of benchmarks, as the CPUs cannot overclock partially.
Requires root privileges.
disable_swap¶
Disables swapping data from the RAM into a backing hard drive. Swapping during benchmarking sessions increases the variance as accessing data on a hard drive is significantly slower than accessing data in RAM.
Requires root privileges.
discarded_runs¶
Discard the first runs (sets the run/discarded_runs
setting).
As a result, the benchmark files should already be in the file system caches.
drop_fs_caches¶
Drops the page cache, directoy entries and inodes before every benchmarking run. This might improve the usability of the produced benchmarks for IO bound programs.
It can be either configured by using the run/exec_plugins/drop_fs_caches_misc
block in the settings
or by using the command line options of the same names prefixed by --drop_fs_caches_
:
# Free dentries and inodes
free_dentries_inodes: true
# Free the page cache
free_pagecache: true
Requires root privileges.
env_randomize¶
Adds random environment variables before each benchmarking run. This causes the stack frames of the called program to be aligned differently. Can mitigate effects caused by a specific cache alignment.
It can be either configured by using the run/exec_plugins/env_randomize_misc
block in the settings
or by using the command line options of the same names prefixed by --env_randomize_
:
# Maximum length of each random key
key_max: 4096
# Maximum number of added random environment variables
max: 4
# Minimum number of added random environment variables
min: 4
# Maximum length of each random value
var_max: 4096
flush_cpu_caches¶
Write back and flush Internal caches; initiate writing-back and flushing of external caches (see WBINVD).
It uses a small custom kernel module (be sure to compile it via temci setup --build_kernel_modules
after install the appropriate
kernel-devel
package, see Installation).
nice¶
Sets the nice
and ionice
values (and therefore the CPU and IO scheduler priorities) of the benchmarked program
to a specific value.
It can be either configured by using the run/exec_plugins/nice_misc
block in the settings
or by using the command line options of the same names prefixed by --nice_
:
# Specify the name or number of the scheduling class to use
# 0 for none
# 1 for realtime
# 2 for best-effort
# 3 for idle
io_nice: 1
# Niceness values range from -20 (most favorable to the process)
# to 19 (least favorable to the process).
nice: -15
nice
values lower than -15 seem to cripple Linux systems.
Requires root privileges.
other_nice¶
Sets the nice
value of processes other than the benchmarked one. Prioritises the benchmarked program over all
other processes.
It can be either configured by using the run/exec_plugins/other_nice_misc
block in the settings
or by using the command line options of the same names prefixed by --other_nice_
:
# Processes with lower nice values are ignored.
min_nice: -10
# Niceness values for other processes.
nice: 19
Requires root privileges.
preheat¶
Preheats the system with a CPU bound task (calculating the inverse of a big random matrix with numpy on all CPU cores).
The length of the preheating can be configured by either using the --preheat_time SECONDS
option or by
setting run/exec_plugins/preheat_misc/time
.
When the preheating takes place (before each run or at the beginning of the benchmarking) can
be configured via --preheat_when [before_each_run|at_setup]
or by setting
run/exec_plugins/preheat_misc/when
(accepts a list).
sleep¶
Keep the system idle for some time before the actual benchmarking.
See Gernot Heisers Systems Benchmarking Crimes:
Make sure that the system is really quiescent when starting an experiment, leave enough time to ensure all previous data is flushed out.
stop_start¶
Stops almost all other processes (as far as possible).
This plugin tries to stop most other processes on the system that aren’t really needed. By default most processes that are children (or children’s children, …) of a process whose name ends with “dm” are stopped. This is a simple heuristic to stop all processes that are not vital (i.e. created by some sort of display manager). SSH and X11 are stopped too.
Advantages of this plugin (which is used via the command line flag
--stop_start
):
No one can start other programs on the system (via ssh or the user interface)
→ fewer processes can interfere with the benchmarking
Noisy processes like Firefox don’t interfere with the benchmarking as they are stopped, this reduces the variance of benchmarks significantly
Disadvantages:
You can’t interact with the system (therefore use the send_mail option to get mails after the benchmarking finished)
Not all processes that could be safely stopped are stopped as this decision is hard to make
You can’t stop the benchmarking as all keyboard interaction is disabled (by stopping X11)
You might have to wait several minutes to be able to use your system after the benchmarking ended
Stopping a process here means to send a process a SIGSTOP signal and resume it by sending a SIGCONT signal later.
It can be either configured by using the run/exec_plugins/stop_start_misc
block in the settings
or by using the command line options of the same names prefixed by --stop_start_
:
# Each process which name (lower cased) starts with one of the prefixes is not ignored.
# Overrides the decision based on the min_id.
comm_prefixes: [ssh, xorg, bluetoothd]
# Each process which name (lower cased) starts with one of the prefixes is ignored.
# It overrides the decisions based on comm_prefixes and min_id.
comm_prefixes_ignored: [dbus, kworker]
# Just output the to be stopped processes but don't actually stop them?
dry_run: false
# Processes with lower id are ignored.
min_id: 1500
# Processes with lower nice values are ignored.
min_nice: -10
# Suffixes of processes names which are stopped.
subtree_suffixes: [dm, apache]
Requires root privileges.
sync¶
Synchronizes cached writes of the file system to a persistent storage by calling sync
.
CPUSets¶
The idea is to separate the benchmarked program from all other programs running on the system.
The usage of cpusets can be configured by using the following settings that are part of run/cpuset
and
can also be set using the options with the same names prefixed with --cpuset_
:
# Use cpuset functionality?
active: Bool()
# Number of cpu cores for the base (remaining part of the) system
base_core_number: Int(range=range(0, 8))
default: 1
# 0: benchmark sequential
# > 0: benchmark parallel with n instances
# -1: determine n automatically, based on the number of CPU cores
parallel: Int()
# Number of cpu cores per parallel running program.
sub_core_number: Int(range=range(0, 8))
default: 1
# Place temci in the same cpu set as the rest of the system?
temci_in_base_set: Bool()
default: True
This functionality can also be enabling by using the --cpuset
flag or by enabling the cpuset plugin.