New stressors
- filehole - exercise randomized file holes/extents
- crc - cyclic redundancy check using gcc builtins and non-gcc CRC builtin alternatives
New options
- --schedpolicy-cpumix - move shedpolicy stressors to a randomly chosen CPUs
- --filehole-defrag - reduce file hole fragmentation
- --cachehammer-method - select between permuted or randomized cache operations
New build options
- BUILD_SMALL=1 option to build small unoptimized executable
Notable bugfixes
- lsm stressor now works on S390x systems
- fix builds where termio.h does not exist
- fix fsize stressor false positives on 32 bit systems (don't set _LARGEFILE_SOURCE)
- lockmix: add timer to interrupt any blocked file locks
- pthread: fix racy SIGSEGV during interrupted stressor termination
- stress-af-alg: handle ENOSYS errno on setsockopt ALG_SET_KEY
Notable improvements
- timerfd: also use CLOCK_MONOTONIC and CLOCK_BOOTTIME
- clock: use CLOCK_AUX
- sockabuse: add more exercising of socket and getsockopt calls
- workload: add vecint workload method (for x86 CPU frequency changing)
- loop: use random enabled/disabled O_DIRECT on backing file
- easy-opcode: add some more x86 simple ops
- tree: rework tree nodes, speed improvement of ~10-17%
- tree: add treap (tree/heap) method
- vm: make walk-flush stride through memory with cacheline sized gaps
Sponsors
Many thanks to the following sponsors of the project (in alphabetical order):
- Bruce Underhill (Codethink)
- Chris Wayne
- Gilbert Morgan
- kobataiwan
- nouraellm
- Paul Larson
Sponsor stress-ng via: https://github.com/sponsors/ColinIanKing
Detailed Changelog
Ethan Hsieh
- stress-af-alg: handle ENOSYS errno on setsockopt ALG_SET_KEY
Thomas Weißschuh
- stress-clock: run clock_nanosleep() for CLOCK_AUX
- core-clocks: add fallback definitions for CLOCK_AUX
- stress-clock: gracefully handle errors from CLOCK_AUX
- stress-clock: correctly check the return value of clock_nanosleep()
- stress-clock: do not test clock_nanosleep(CLOCK_THREAD_CPUTIME_ID)
- stress-clock: add missing commas at the end of all clock array elements
Colin Ian King
- debian: update changelog
- Makefile: bump version
- stress-lsm: fix size type, should be uint32_t
- stress-cache: only permute when --cache-permute is enabled
- stress-time-warp: silently ignore ENODEV on timers that are not supported
- README.md: update kernel bug list
- stress-sigxcpu: enable sanity checking with --verify option
- stress-branch: reduce optimization level to O2
- stress-sigsegv: reduce MAX_MASK_SHIFT to 49 for risc-v kernels
- README.md: add sponsor link
- stress-ng: constify us_total
- stress-ng: reduce scope of int e
- stress-sigxcpu: add RLIMIT_RTTIME for SIGXCPU signals, add verification
- stress-mmaptorture: make variable offset non-clobberable
- core-filesystem: add befs and virtualbox file system magic
- core-filesystem: add ufs magic
- kernel-coverage: add nfs
- stress-schedmix: add null check on cpus
- stress-schedmix: force more cpu affinity changes with --schedmix-cpumix option
- stress-schedpolicy: ignore E2BIG errno on sched_setscheduler
- stress-ng: don't set _LARGEFILE_SOURCE
- stress-workload: ensure each pthread has it's own buffer
- stress-fsize: ensure max_offset is not larger than rlim_max
- stress-list: cast &head to void *
- stress-filehole: assign zero_buf as 64 bit offset to buf
- stress-cache: make permute generate all permutations
- stress-timerfd: also use CLOCK_MONOTONIC and CLOCK_BOOTTIME
- stress-lockmix: voidify function argument args
- stress-lockmix: voidify millisec arg
- CITATIOBS.md: add another research paper reference
- core-lockmix: add timer to interrupt any blocked file locks
- stress-sockabuse: enable SOCK_RDM for OS X
- stress-sockabuse: use SOCK_RDM for specific systems
- stress-sockabuse: don't use SOCK_RDM for Haiku
- stress-timermix: cater for zero sized arrays for itimers and timers
- stress-sockabuse: use SOCK_DCCP and SOCK_PACKET for Linux only
- stress-sleep: remove unncessary setting/checking of eintr
- stress-schedpolicy: remove redundant initialization
- stress-close: ensure all fds are initialized
- stress-bind-mount: stash and restore errno for move_mount error value
- stress-ng: remove redundant initialization
- stress-time-warp: silently ignore ENOSYS or EINVAL on gettime calls
- stress-pty: fix builds where termio.h does not exist
- core-cachehammer: fix regression on memory increment
- core-sort: add shim_qsort for qsort
- core-sort: move qsort_bm to core-sort
- stress-vnni: only define shim_m256i_u if it is required
- README.md: update contributor list
- Makefile: add core-clock.h to Makefile HEADERS
- stress-sockabuse: add more exercising of socket and getsockopt calls
- core-sync: add missing default in switch statement
- core-hash: clean up some clang pedantic implicit conversion signness warnings
- core-cpu-cache: clean up some clang pedantic implicit conversion signness warnings
- stress-strnum: rename 'this' to 'method'
- core-bitops: cast return from builtins to expected return type
- core-cpu: prefix temp variables with tmp
- core-asm-ret: use fixed array instead of gcc flexible arrays
- core-affinity: fix clean-up of integer casts
- Makefile: add extern to core-config.h correctly
- core-affinity: use correct integer types
- stress-bad-altstack: replace function cast with void * pointer
- stress-bigheap: add void * cast for %p format specifier
- stress-bad-ioctl: cast -1 to size_t to clean up clang pedantic warning
- stress-bad-altstack: cast function pointer to void *
- stress-af-alg: use correct format specifier for size_t value
- core-workload: clean up a handful of pedantic warnings
- core-shim: clean up clang pedantic warnings
- core-parse-opts: clean up pedantic clang warning
- stress-ng: declare per stressor stessor_info_t
- Makefile: make stress_config extern
- Makefile: Add BUILD_SMALL=1 option to build small unoptimized executable
- stress-ng: add more comments
- stress-ng: add block comment for stress_stressor_names_fixup
- stress-ng: add block comment for stress_description_yamlify
- stress-ng: inline stress_verifiable
- stress-ng: get output fd using pr_fd()
- stress-ng: remove legacy proc naming from stressor items
- stress-ng: remove need to pass number of items to stress_shared_mmap
- stress-ng: remove need for stress_nth_stressor_get
- Manual: add notes about swap header warnings
- CITATIONS.md: add another research paper reference
- stress-cgroup: remove S_IRGRP | S_IWGRP mkdir flags
- stress-umount: remove S_IRGRP | S_IWGRP mkdir flags
- stress-ramfs: remove S_IRGRP | S_IWGRP mkdir flags
- stress-bind-mount: remove S_IRGRP | S_IWGRP mkdir flags
- stress-syscall: remove GRP and OTH open flags
- stress-uprobe: remove GRP and OTH open flags
- stress-zombie: remove S_IRGRP | S_IWGRP mkdir flags
- stress-dirdeep: remove S_IRGRP | S_IWGRP creat flags
- core-signal: remove blank line
- core-nt-store.h: remove blank line
- core-asm-riscv.h: remove empty line
- core-mwc.h: remove a couple of blank lines
- stress-schedmix: clean up built in help options order
- stress-schedpolicy: add --schedpolicy-cpumix
- stress-schedpolicy: where possible exercise shim_sched_setattr more
- stress-schedpolicy: make rate const
- stress-schedpolicy: set more DEADLINE attributes, add metric counters
- stress-schedmix: add cpus array free error exit path handling
- stress-fault: remove from scheduler class
- stress-eventfd: remove from scheduler class
- stress-dnotify: remove from scheduler class
- stress-netlink-task: remove from scheduler class
- stress-netlink-proc: remove from scheduler class
- Manual: add , in crypt stressor list
- stress-schedmix: replace spaces with tab in indentation
- stress-schedmix: add checks for sched_setaffinity being available
- stress-schedpolicy: remove blank line
- stress-schedmix: add --schedmix-cpumix option
- CITATIONS.md: add another paper reference
- stress-ng: remove redundant check on num_perms
- core-vmstat: rename stress_get_iostat to stess_iostat_get
- core-vmstat: rename stress_get_tz_info to stress_tz_info_get
- core-vmstat: rename netbsd_get_cpu_time to netbsd_cpu_time_get
- core-vmstat: rename freebsd_get_cpu_time to freebsd_cpu_time_get
- core-vmstat: rename stress_get_vmstat to stress_vmstat_get
- core-thermal-zone: rename stress_tz_get_temperatures to stress_tz_temperatures_get
- core-stack: rename stress_get_min_aux_sig_stack_size to stress_min_aux_sig_stack_size_get
- core-rapl: rename stress_rapl_get_power to stress_rapl_power_get
- core-net: rename stress_net_get_local_bind_ports to stress_net_local_bind_ports_get
- core-mwc: rename stress_mwc_default_seed to stress_mwc_seed_default
- core-mwc: rename stress_mwc_set_seed to stess_mwc_seed_set
- core-mwc: rename stress_mwc_get_seed to stress_mwc_seed_get
- core-helper: rename stress_get_exec_text_addr to stress_exec_text_addr
- core-helper: rename stress_get_libc_version to stress_libc_version_get
- core-ftrace: rename stress_ftrace_get_debugfs_path to stress_ftrace_debugfs_path_get
- core-affinity: rename stress_get_topology_set to stress_topology_set_get
- stress-cache: rename stress_get_cache_flags to stress_cache_flags_get
- stress-ng: inline some helper functions
- stress-ng: make metrics_lock into a metrics.lock struct/field
- stress-ng: re-order struct fields based on size
- stress-ng: rename stress_counter_info_t to stress_counter_t
- README.md: add another Linux kernel bug reference
- stress-ng: rename stress_stressors_enable_all to stress_stressors_enable
- stress-ng: rename limit_set to set_limit
- stress-ng: rename set_default to default_set
- stress-ng: rename stress_exclude_pathological to stress_pathological_set
- stress-ng: rename stressor_set_defaults to stressor_set_defaults
- stress-ng: rename stress_append_stressor to stress_list_item_append
- stress-ng: rename stress_set_proc_limits to stress_max_processes_limit_set
- stress-ng: rename stress_exclude_unimplemented to stress_unimplemented_exclude
- stress-ng: fix block comment for stress_shared_readonly
- stress-ng: rename stress_shared_map to stress_shared_mmap
- stress-ng: rename stress_map_page to stress_page_mmap
- stress-ng: rename stress_log_system_info to sytess_system_info_log
- stress-ng: rename stress_log_system_mem_info to stress_system_mem_info_log
- stress-ng: rename stress_log_args to stress_args_log
- stress-ng: rename stress_show_stressors to stress_stressors_show
- stress-ng: rename stress_run_child to stress_child_run
- stress-ng: rename stress_get_usage_stats to stress_rusage_stats_get
- stress-ng: rename stress_getrusage to stress_rusage_get
- stress-ng: rename stress_get_total_instances to stress_total_instances_get
- stress-ng: rename stress_get_num_stressors to stress_stressors_number_get
- stress-ng: rename stress_get_nth_stressor to stress_nth_stressor_get
- stress-ng: rename stress_handle_terminate to stress_terminate_handle
- stress-ng: rename stress_wait_stressors to stress_stressors_wait
- stress-ng: rename stress_wait_aggressive to stress_aggressive_wait
- stress-ng: rename stress_get_processors to stress_processors_get
- stress-ng: rename stress_opt_name to stress_opt_name_find
- stress-ng: rename stress_show_stressor_names to stress_stressor_names_show
- stress-ng: rename stress_usage_help_stressors to stress_stressors_usage_help
- stress-ng: rename stress_set_handler to stress_handler_set
- stress-ng: rename stress_block_signals to stress_signals_block
- stress-ng: rename stress_kill_stressors to stress_stressors_kill
- stress-ng: rename stress_zero_bogo_max_ops to stress_bogo_max_ops_zero
- stress-ng: rename stress_get_class to stress_class_get
- stress-ng: rename stress_get_class_id to stress_class_id_get
- stress-ng: rename stress_fixup_stressor_names to stress_stressor_name_fixup
- stress-ng: rename stress_mlock_executable to stress_executable_mlock
- stress-ng: rename stress_run_permute to stress_permute_run
- stress-ng: rename stress_run_parallel to stress_parallel_run
- stress-ng: rename stress_run_sequential to stress_sequential_run
- stress-ng: rename stress_setup_parallel to stress_parallel_setup
- stress-ng: rename stress_setup_sequential to stress_sequential_setup
- stress-ng: rename stress_set_default_timeout to stress_default_timeout_set
- stress-ng: rename stress_parse_opts to stress_opts_parse
- stress-ng: rename stress_parse_limit to stress_limit_parse
- stress-ng: rename stress_enable_classes to stress_classes_enable
- stress-ng: rename stress_enable_all_stressors to stress_stressors_enable_all
- stress-ng: rename stress_set_random_stressors to stress_random_stressors_set
- stress-ng: rename stress_setup_stats_buffers to stress_stats_buffers_setup
- stress-ng: rename stress_ignore_stressor to stress_stressor_ignore
- stress-ng: remove redundant struct stress_signal_map name
- stress-ng: re-order put elements to pack more efficiently in memory
- stress-ng: rename stress_alloc_proc_stats to stress_stats_alloc
- stress-ng: rename stress_find_proc_info to stress_list_item_find
- stress-ng: rename stress_t to stress_stressor_t
- stress-ng: rename stress_stressor_t to stress_item_list_t
- stress-ng: rename stress_metics_info to stress_metrics_info
- stress-ng: rename stress_stressor_t related struct name and fields
- stress-pthread: bail out of thread creation loop before creating next pthread
- stress-ng: write unexpected error messages to stderr/stdout
- stress-sendfile: bail out if fallocate returns EINTR
- stress-fcntl: check if parent directory has been removed
- stress-sigpipe: relax sanity check a small amount
- stress-goto: only sanity check counters after 1 bogo op
- stress-ng: remove debug total
- stress-open: don't close fds if min/max not set
- stress-ng: restructure metrics data and descriptions
- CITAIONS.md: add another reference
- stress-ng: remove debug for total metrics count
- stress-strnum: constify pointer ptr
- core-workload: fix missing L for long double constant value
- stress-crc: add pointer constifications
- strress-cachehammer: no need to pass global ctxt to stress_cachehammer_exercise
- stress-ng: re-work metrics array allocation and sizing
- stress-ng: remove redundant pointer metrics from args struct
- stress-mmaptorture: mmap onto same offset or random offset
- stress-filehole: add --filehole-defrag option to reduce extents
- stress-cached-hammer: add a random or permute cache method
- core-workload: add vecint workload method
- Manual: sort varyload methods alphabetically
- core-workload: sort workload methods alphabetically
- CITATIONS.md: add some more paper links
- stress-ng: make stress_stressor_t field run bool type
- stress-ng: add padding to make all fields in stress_checksum_t 64 byte padded
- core-shim: use uintptr_t casts on void * pointers on void * pointer arithmetic
- stress-crc: pass crc data to crc functions
- stress-crc: make polynomial const
- stress-crc: implement CRCs without __builtin_crc helpers
- stress-crc: add CRC bit rate to metrics
- stress-af-alg: turn bunch of if statements into switch statements
- Manual: explain how the 1024 bits of data are processed
- README.md: add reference to another kernel issue found with stress-ng
- stress-crc: add some crc function comment blocks
- stress-crc: use crc_metrics_t for cache aligned compact metrics
- stress-crc: add register hint, remove empty line
- stress-crc: ensure data is 64 byte aligned
- stress-crc: rename loop counter to loop
- stress-crc: add checks for __builtin_crc functions
- stress-crc: add gcc CRC builtin stressor
- stress-loop: use random enabled/disabled O_DIRECT on backing file
- core-cpu: add OPTIMIZE3 annotation
- core-cpu: cache cpuid flag checks using a macro
- core-shim: shim_cacheflush: enable more arch specific cache flushing
- core-shim: shim_flush_icache: use shim_cacheflush as a fallback
- stress-sockabuse: use shim_posix_fadvise
- stress-revio: use shim_posix_fadvise
- stress-readahead: use shim_posix_fadvise
- stress-iomix: use shim_posix_fadvise
- stress-hdd: use shim_posix_fadvise
- stress-filerace: use shim_posix_fadvise
- stress-fd-race: use shim_posix_fadvise
- stress-fd-abuse: use shim_posix_fadvise
- stress-filehole: use SHIM_* posix_fadvise advise only if it is defined
- stress-filehole: use shim_posix_fadvise hints
- core-shim: add shim for posix_fadvise
- stress-fileholes: add termination check in stress_filehole_non_zeros_to_holes
- stress-filehole: clean up cast
- stress-filehole: punch holes in non-zero data
- stress-filehole: only report extents metrics when they are non-zero
- stress-filehole: add mmap'd read error check, report errors with pr_fail
- stress-filehole: add missing comment block
- stress-filehole: perform non-pread read after lseek
- stress-filehole: add fallocate specific flag checks
- stress-filehole: use shim_msync, move msync flags into function
- stress-filehole: fix fsync counter, make less frequent too
- stress-filehole: fix up copyright
- stress-filehole: add random lseeks+reads with SEEK_SET, SEEK_HOLE and SEEK_DATA
- stress-filehole: a new file hole/extent stressor
- stress-str: use shim_strnlen instead of strlen
- CITATIONS.md: Add another reference link
- CITATIONS.md: Add another reference link
- stress-vm: make walk-flush stride through memory with cacheline sized gaps
- core-parse-opts: add integer to numeric error message
- stress-dev: use shim_strnlen instead of strlen
- stress-set: use shim_strnlen instead of strlen
- stress-af-alg: use shim_strnlen instead of strlen
- core-helper: replace strlen with the size of the str
- core-helper: refactor strlen of parent_ld_path
- core-filesystem: remove duplicated strlen call
- core-filesystem: use shim_strnlen instead of strlen
- core-interrupts: use shim_strnlen instead of strlen
- core-shim: constify str ptr arg in shim_strnlen
- stress-rdrand: stress-ng: report message without capitalization
- stress-ng: report errors without capitalization
- core-parse-opts: report errors without capitalization
- core-job: report errors without capitalization
- core-helper: report build info without capitalization
- stress-cpu-sched: use shim_strnlen instead of strlen
- stress-dir: use shim_strnlen instead of strlen
- stress-dirdeep: use shim_strnlen instead of strlen
- stress-dirmany: use shim_strnlen instead of strlen
- stress-filename: use shim_strnlen instead of strlen
- stress-fstat: use shim_strnlen instead of strlen
- stress-hsearch: use shim_strnlen instead of strlen
- stress-key: use shim_strnlen instead of strlen
- stress-led: use shim_strnlen instead of strlen
- stress-link: use shim_strnlen instead of strlen
- stress-module: use shim_strnlen instead of strlen
- stress-ng: use shim_strnlen instead of strlen
- stress-procfs: use shim_strnlen instead of strlen
- stress-syscall: use shim_strnlen instead of strlen
- stress-tmpfs: use shim_strnlen instead of strlen
- stress-workload: use shim_strnlen instead of strlen
- stress-xattr: use shim_strnlen instead of strlen
- core-shim: use shim_strnlen
- core-resctrl: use shim_strnlen
- core-numa: use shim_strnlen
- core-log: use shim_strnlen
- core-ignite-cpu: use shim_strnlen
- core-ftrace: use shim_strnlen
- core-filesystem: use shim_strnlen
- core-shim: add shim for strnlen, a "safer" strlen
- core-log: use use strscpy instead of strncpy
- core-ftrace: use strscpy instead of strcpy
- test/test-mq-sysv: use strncpy instead of strcpy
- stress-ng: fix incorrect type setting for sched-reclaim
- stress-ng: show global settings with -v verbose debug option
- stress-tree: minor code clean-ups
- stress-tree: add treap tree method
- stress-tree: name node structs with _node tag
- CITATIONS.md: add another research paper reference
- stress-tree: remove more unncessary pragmas
- stress-tree: adjust avl tree balance values
- stress-tree: remove temp pointer res
- stress-tree: improve inlining of btree_insert_node
- stress-tree: minor optimization of btree
- stress-tree: minor clean up of btree search
- stress-tree: remove find
- stress-tree: add UNLIKELY hint on binary tree comparison
- stress-tree: remove struct packing and warning pragmas
- stress-tree: unroll btree tree forward find
- stress-tree: unroll binary tree forward find
- stress-tree: unroll splay tree forward find
- stress-tree: add unlikely hint in btree find, ~0.2% speedup
- stress-tree: update q->bf and root before updating balance factors
- sterss-tree: add minor hints to improve avl insertion
- stress-tree: use per tree sized nodes rather than union of tree nodes
- stress-tree: replace cache/memory heavy shuffle with random value setting
- stress-monte-carlo: Use ULL for 64 bit constant
- test-asm-riscv-cbom.c: use explicit memset
- test-asm-riscv-cbo_zero.c: use explicit memset, ensure sched_getaffinity is defined
- stress-udp: remove unused variable j
- core-workload: ensure val is put so that it's not optimized out
- stress-easy-opcode: add some more x86 simple ops
- stress-sockfd: check for null return from CMSG_FIRSTHDR
- stress-sock: add null check on ctrls, keeps infer happy
- stress-resources: explicity free resources before _exit
- stress-fd-race: check for null return from CMSG_FIRSTHDR
- stress-ng: fetch cpu count as late as possible
- stress-ng: ensure stress_stats_hash_table_alloc failure is reported as a failure
- core-mmap: zero info to silence infer static analysis warning