Hello community, here is the log from the commit of package stress-ng for openSUSE:Factory checked in at 2017-08-10 14:06:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/stress-ng (Old) and /work/SRC/openSUSE:Factory/.stress-ng.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "stress-ng" Thu Aug 10 14:06:19 2017 rev:17 rq:515419 version:0.08.10 Changes: -------- --- /work/SRC/openSUSE:Factory/stress-ng/stress-ng.changes 2017-07-19 12:22:17.481502410 +0200 +++ /work/SRC/openSUSE:Factory/.stress-ng.new/stress-ng.changes 2017-08-10 14:13:37.591584069 +0200 @@ -1,0 +2,20 @@ +Tue Aug 8 06:28:58 UTC 2017 - mar...@gmx.de + +- Update to version 0.08.10: + * Makefile: bump version + * stress-dirdeep: fix warning on unused variable ret on BSD systems + * Update manual description for the --all option + * job: allow classes to be run as jobs (LP: #1706970) + * stress-dirdeep: don't remove directories in main exercise function + * return EXIT_SUCCESS for class cpu? class command + * stress-dirdeep: exercise files rather than create/delete + * manual: fix wording in memthrash table + * stress-dirdeep: Fix inode accounting, add more -v information feedback + * Add --dirdeep-inodes option to limit of inodes being consumed: + * parse-opts: don't allow negative percentages + * Add stress_get_filesystem_available_inodes to get inode number + * Add generialized percentage opt parser get_uint64_percent + * helper: remove debug message from stress_get_filesystem_size + * stress-ng: ensure --version option terminates immediately + +------------------------------------------------------------------- Old: ---- stress-ng-0.08.09.tar.gz New: ---- stress-ng-0.08.10.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ stress-ng.spec ++++++ --- /var/tmp/diff_new_pack.LHTcfz/_old 2017-08-10 14:13:38.291485521 +0200 +++ /var/tmp/diff_new_pack.LHTcfz/_new 2017-08-10 14:13:38.303483832 +0200 @@ -18,7 +18,7 @@ Name: stress-ng -Version: 0.08.09 +Version: 0.08.10 Release: 0 Summary: Tool to load and stress a computer License: GPL-2.0 ++++++ stress-ng-0.08.09.tar.gz -> stress-ng-0.08.10.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stress-ng-0.08.09/Makefile new/stress-ng-0.08.10/Makefile --- old/stress-ng-0.08.09/Makefile 2017-07-18 11:53:20.000000000 +0200 +++ new/stress-ng-0.08.10/Makefile 2017-08-07 22:34:14.000000000 +0200 @@ -16,7 +16,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # -VERSION=0.08.09 +VERSION=0.08.10 # # Codename "harmful hardware harasser" # diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stress-ng-0.08.09/helper.c new/stress-ng-0.08.10/helper.c --- old/stress-ng-0.08.09/helper.c 2017-07-18 11:53:20.000000000 +0200 +++ new/stress-ng-0.08.10/helper.c 2017-08-07 22:34:14.000000000 +0200 @@ -222,14 +222,30 @@ if (blocks > max_blocks) blocks = max_blocks; - (void)printf("stress_get_filesystem_size: %" PRIu64 " %" PRIu64 " %" PRIu64 "\n", - (uint64_t)buf.f_bsize, (uint64_t)blocks, - (uint64_t)buf.f_bsize * blocks); - return (uint64_t)buf.f_bsize * blocks; } /* + * stress_get_filesystem_available_inodes() + * get number of free inodes on the current stress + * temporary path, return 0 if failed + */ +uint64_t stress_get_filesystem_available_inodes(void) +{ + int rc; + struct statvfs buf; + + if (!stress_temp_path) + return 0; + + rc = statvfs(stress_temp_path, &buf); + if (rc < 0) + return 0; + + return (uint64_t)buf.f_favail; +} + +/* * stress_set_nonblock() * try to make fd non-blocking */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stress-ng-0.08.09/job.c new/stress-ng-0.08.10/job.c --- old/stress-ng-0.08.09/job.c 2017-07-18 11:53:20.000000000 +0200 +++ new/stress-ng-0.08.10/job.c 2017-08-07 22:34:14.000000000 +0200 @@ -64,7 +64,7 @@ !strcmp(argv[2], "seq")) { if (*flag & RUN_PARALLEL) goto err; - *flag |= RUN_PARALLEL; + *flag |= RUN_SEQUENTIAL; g_opt_flags |= OPT_FLAGS_SEQUENTIAL; return 1; } @@ -73,8 +73,9 @@ !strcmp(argv[2], "together")) { if (*flag & RUN_SEQUENTIAL) goto err; - *flag |= RUN_SEQUENTIAL; + *flag |= RUN_PARALLEL; g_opt_flags &= ~OPT_FLAGS_SEQUENTIAL; + g_opt_flags |= OPT_FLAGS_ALL; return 1; } err: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stress-ng-0.08.09/parse-opts.c new/stress-ng-0.08.10/parse-opts.c --- old/stress-ng-0.08.09/parse-opts.c 2017-07-18 11:53:20.000000000 +0200 +++ new/stress-ng-0.08.10/parse-opts.c 2017-08-07 22:34:14.000000000 +0200 @@ -210,23 +210,27 @@ } /* - * get_uint64_byte_memory() - * get memory size from string. If it contains % - * at the end, then covert it into the available - * physical memory scaled by that percentage divided - * by the number of stressor instances + * get_uint64_percent() + * get a value by whole number or by percentage */ -uint64_t get_uint64_byte_memory( +uint64_t get_uint64_percent( const char *const str, - const uint32_t instances) + const uint32_t instances, + const uint64_t max, + const char *const errmsg) { size_t len = strlen(str); - /* Convert to % of memory over N instances */ + /* Convert to % over N instances */ if ((len > 1) && (str[len - 1] == '%')) { - uint64_t phys_mem = stress_get_phys_mem_size(); double val; + /* Avoid division by zero */ + if (max == 0) { + (void)fprintf(stderr, "%s\n", errmsg); + longjmp(g_error_env, 1); + } + /* Should NEVER happen */ if (instances < 1) { (void)fprintf(stderr, "Invalid number of instances\n"); @@ -236,16 +240,33 @@ (void)fprintf(stderr, "Invalid percentage %s\n", str); longjmp(g_error_env, 1); } - if (phys_mem == 0) { - (void)fprintf(stderr, "Cannot determine physical memory size\n"); + if (val < 0.0) { + (void)fprintf(stderr, "Invalid percentage %s\n", str); longjmp(g_error_env, 1); } - return (uint64_t)((double)(phys_mem * val) / (100.0 * instances)); + return (uint64_t)((double)(max * val) / (100.0 * instances)); } return get_uint64_byte(str); } /* + * get_uint64_byte_memory() + * get memory size from string. If it contains % + * at the end, then covert it into the available + * physical memory scaled by that percentage divided + * by the number of stressor instances + */ +uint64_t get_uint64_byte_memory( + const char *const str, + const uint32_t instances) +{ + uint64_t phys_mem = stress_get_phys_mem_size(); + + return get_uint64_percent(str, instances, phys_mem, + "Cannot determine physical memory size"); +} + +/* * get_uint64_byte_filesystem() * get file size from string. If it contains % * at the end, then covert it into the available @@ -256,29 +277,10 @@ const char *const str, const uint32_t instances) { - size_t len = strlen(str); + uint64_t bytes = stress_get_filesystem_size(); - /* Convert to % of available filesystem space over N instances */ - if ((len > 1) && (str[len - 1] == '%')) { - uint64_t bytes = stress_get_filesystem_size(); - double val; - - /* Should NEVER happen */ - if (instances < 1) { - (void)fprintf(stderr, "Invalid number of instances\n"); - longjmp(g_error_env, 1); - } - if (sscanf(str, "%lf", &val) != 1) { - (void)fprintf(stderr, "Invalid percentage %s\n", str); - longjmp(g_error_env, 1); - } - if (bytes == 0) { - (void)fprintf(stderr, "Cannot determine available space on file system\n"); - longjmp(g_error_env, 1); - } - return (uint64_t)((double)(bytes * val) / (100.0 * instances)); - } - return get_uint64_byte(str); + return get_uint64_percent(str, instances, bytes, + "Cannot determine available space on file system"); } /* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stress-ng-0.08.09/stress-dirdeep.c new/stress-ng-0.08.10/stress-dirdeep.c --- old/stress-ng-0.08.09/stress-dirdeep.c 2017-07-18 11:53:20.000000000 +0200 +++ new/stress-ng-0.08.10/stress-dirdeep.c 2017-08-07 22:34:14.000000000 +0200 @@ -35,12 +35,27 @@ uint32_t dirdeep_dirs; dirdeep_dirs = get_uint32(opt); - check_range("dirdeep-dirs", dirdeep_dirs, - 1, 10); + + check_range("dirdeep-dirs", dirdeep_dirs, 1, 10); set_setting("dirdeep-dirs", TYPE_ID_UINT32, &dirdeep_dirs); } /* + * stress_set_dirdeep_inodes() + * set max number of inodes to consume + */ +void stress_set_dirdeep_inodes(const char *opt) +{ + uint64_t inodes = stress_get_filesystem_available_inodes(); + uint64_t dirdeep_inodes; + + dirdeep_inodes = get_uint64_percent(opt, 1, inodes, + "Cannot determine number of available free inodes"); + set_setting("dirdeep-inodes", TYPE_ID_UINT64, &dirdeep_inodes); +} + + +/* * stress_dir_make() * depth-first tree creation, create lots of sub-trees with * dirdeep_dir number of subtress per level. @@ -52,11 +67,20 @@ const size_t len, const size_t path_len, const uint32_t dirdeep_dirs, - uint32_t *depth) + const uint64_t dirdeep_inodes, + const uint64_t inodes_target_free, + uint64_t *min_inodes_free, + uint32_t depth) { uint32_t i; int ret; + uint64_t inodes_avail = stress_get_filesystem_available_inodes(); + + if (*min_inodes_free > inodes_avail) + *min_inodes_free = inodes_avail; + if (inodes_avail <= inodes_target_free) + return; if (len + 2 >= path_len) return; if (!keep_stressing()) @@ -77,7 +101,7 @@ /* * Top level, create file to symlink and link to */ - if (!(*depth)) { + if (!depth) { int fd; fd = creat(linkpath, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); @@ -88,24 +112,96 @@ (void)close(fd); } - (*depth)++; - path[len] = '/'; path[len + 1] = 's'; /* symlink */ path[len + 2] = '\0'; ret = symlink(linkpath, path); (void)ret; + path[len + 1] = 'h'; /* hardlink */ ret = link(linkpath, path); (void)ret; for (i = 0; i < dirdeep_dirs; i++) { path[len + 1] = '0' + i; - stress_dir_make(args, linkpath, path, len + 2, path_len, dirdeep_dirs, depth); + stress_dir_make(args, linkpath, path, len + 2, path_len, + dirdeep_dirs, dirdeep_inodes, inodes_target_free, + min_inodes_free, depth + 1); + } + path[len] = '\0'; +} + +/* + * stress_dir_exercise() + * exercise files and directories in the tree + */ +static void stress_dir_exercise( + const args_t *args, + char *const path, + const size_t len, + const size_t path_len) +{ + struct dirent **namelist; + int n; +#if _POSIX_C_SOURCE >= 200809L + const double now = time_now(); + const time_t sec = (time_t)now; + const long nsec = (long)((now - (double)sec) * 1000000000.0); + struct timespec times[2] = { + { sec, nsec }, + { sec, nsec } + }; +#endif + + if (len + 2 >= path_len) + return; + + n = scandir(path, &namelist, NULL, alphasort); + if (n < 0) + return; + + while (n--) { + if (namelist[n]->d_name[0] == '.') + continue; + + path[len] = '/'; + path[len + 1] = namelist[n]->d_name[0]; + path[len + 2] = '\0'; + + if (isdigit((int)namelist[n]->d_name[0])) { + stress_dir_exercise(args, path, len + 2, path_len); + } else { + int fd; + + /* This will update atime only */ + fd = open(path, O_RDONLY); + if (fd >= 0) { + const uint16_t rnd = mwc16(); +#if _POSIX_C_SOURCE >= 200809L + int ret = futimens(fd, times); + (void)ret; +#endif + /* Occasional flushing */ + if (rnd >= 0xfff0) { +#if defined(__linux__) && NEED_GLIBC(2,14,0) + (void)syncfs(fd); +#else + (void)sync(); +#endif + } else if (rnd > 0xff40) { + (void)fsync(fd); + } + (void)close(fd); + } + inc_counter(args); + } + free(namelist[n]); } path[len] = '\0'; + free(namelist); } + /* * stress_dir_tidy() * clean up all files and directories in the tree @@ -160,8 +256,16 @@ char rootpath[PATH_MAX]; size_t path_len; uint32_t dirdeep_dirs = 1; + uint64_t dirdeep_inodes = ~0ULL; + const uint64_t inodes_avail = stress_get_filesystem_available_inodes(); + uint64_t inodes_target_free; + uint64_t min_inodes_free = ~0ULL; (void)get_setting("dirdeep-dirs", &dirdeep_dirs); + (void)get_setting("dirdeep-inodes", &dirdeep_inodes); + + inodes_target_free = (inodes_avail > dirdeep_inodes) ? + inodes_avail - dirdeep_inodes : 0; (void)stress_temp_dir_args(args, rootpath, sizeof(rootpath)); path_len = strlen(rootpath); @@ -169,17 +273,26 @@ strncpy(linkpath, rootpath, sizeof(linkpath)); strncat(linkpath, "/f", sizeof(linkpath) - 3); - do { - uint32_t depth = 0; + pr_inf("%s: %" PRIu64 " inodes available, exercising up to %" PRIu64 " inodes\n", + args->name, inodes_avail, inodes_avail - inodes_target_free); + strncpy(path, rootpath, sizeof(path)); + stress_dir_make(args, linkpath, path, path_len, sizeof(path), + dirdeep_dirs, dirdeep_inodes, inodes_target_free, &min_inodes_free, 0); + do { strncpy(path, rootpath, sizeof(path)); - stress_dir_make(args, linkpath, path, path_len, sizeof(path), dirdeep_dirs, &depth); - strncpy(path, rootpath, sizeof(path)); - if (!keep_stressing()) - pr_tidy("%s: removing directories\n", args->name); - stress_dir_tidy(args, path, path_len, sizeof(path)); - sync(); + stress_dir_exercise(args, path, path_len, sizeof(path)); } while (keep_stressing()); + strncpy(path, rootpath, sizeof(path)); + pr_tidy("%s: removing directories\n", args->name); + stress_dir_tidy(args, path, path_len, sizeof(path)); + + pr_inf("%s: %" PRIu64 " inodes exercised\n", args->name, inodes_avail - min_inodes_free); + if (inodes_target_free < min_inodes_free) + pr_inf("%s: note: specifying a larger --dirdeep setting or " + "running the stressor for longer will use more " + "inodes\n", args->name); + return ret; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stress-ng-0.08.09/stress-ng.1 new/stress-ng-0.08.10/stress-ng.1 --- old/stress-ng-0.08.09/stress-ng.1 2017-07-18 11:53:20.000000000 +0200 +++ new/stress-ng-0.08.10/stress-ng.1 2017-08-07 22:34:14.000000000 +0200 @@ -2,7 +2,7 @@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) -.TH STRESS-NG 1 "July 18, 2017" +.TH STRESS-NG 1 "August 7, 2017" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -71,10 +71,10 @@ the balance of user time vs system time used depending on the type of stressor being used. .TP -.B \-a N, \-\-all N -start N instances of each stressor. If N is less than zero, then the number -of CPUs online is used for the number of instances. If N is zero, then the -number of CPUs in the system is used. +.B \-a N, \-\-all N, \-\-parallel N +start N instances of all stressors in parallel. If N is less than zero, then +the number of CPUs online is used for the number of instances. If N is zero, +then the number of CPUs in the system is used. .TP .B \-b N, \-\-backoff N wait N microseconds between the start of each stress worker process. This @@ -1081,10 +1081,16 @@ .TP .B \-\-dirdeep\-ops N stop directory depth workers after N bogo directory operations. +.TP .B \-\-dirdeep\-dirs N create N directories at each tree level. The default is just 1 but can be increased to a maximum of 10 per level. .TP +.B \-\-dirdeep\-inodes N +consume upto N inodes per dirdeep stressor while creating directories and +links. The value N can be the number of inodes or a percentage of the total +available free inodes on the filesystem being used. +.TP .B \-\-dnotify N start N workers performing file system activities such as making/deleting files/directories, renaming files, etc. to stress exercise the various dnotify @@ -1818,7 +1824,7 @@ l l. Method Description all T{ -iterate over all the below matrix stress methods +iterate over all the below memthrash methods T} chunk1 T{ memset 1 byte chunks of random data into random locations diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stress-ng-0.08.09/stress-ng.c new/stress-ng-0.08.10/stress-ng.c --- old/stress-ng-0.08.09/stress-ng.c 2017-07-18 11:53:20.000000000 +0200 +++ new/stress-ng-0.08.10/stress-ng.c 2017-08-07 22:34:14.000000000 +0200 @@ -496,6 +496,7 @@ { "dirdeep", 1, 0, OPT_DIRDEEP }, { "dirdeep-ops",1, 0, OPT_DIRDEEP_OPS }, { "dirdeep-dirs",1, 0, OPT_DIRDEEP_DIRS }, + { "dirdeep-inodes",1, 0, OPT_DIRDEEP_INODES }, { "dry-run", 0, 0, OPT_DRY_RUN }, { "dnotify", 1, 0, OPT_DNOTIFY }, { "dnotify-ops",1, 0, OPT_DNOTIFY_OPS }, @@ -698,6 +699,7 @@ { "open", 1, 0, OPT_OPEN }, { "open-ops", 1, 0, OPT_OPEN_OPS }, { "page-in", 0, 0, OPT_PAGE_IN }, + { "parallel", 1, 0, OPT_ALL }, { "pathological",0, 0, OPT_PATHOLOGICAL }, { "perf", 0, 0, OPT_PERF_STATS }, { "personality",1, 0, OPT_PERSONALITY }, @@ -959,6 +961,7 @@ { NULL, "no-madvise", "don't use random madvise options for each mmap" }, { NULL, "no-rand-seed", "seed random numbers with the same constant" }, { NULL, "page-in", "touch allocated pages that are not in core" }, + { NULL, "parallel N", "synonym for 'all N'" }, { NULL, "pathological", "enable stressors that are known to hang a machine" }, #if defined(STRESS_PERF_STATS) { NULL, "perf", "display perf statistics" }, @@ -1080,6 +1083,7 @@ { NULL, "dirdeep N", "start N directory depth stressors" }, { NULL, "dirdeep-ops N", "stop after N directory depth bogo operations" }, { NULL, "dirdeep-dirs N", "create N directories per level" }, + { NULL, "dirdeep-inodes N", "create a maximum N inodes (N can also be %)" }, { NULL, "dnotify N", "start N workers exercising dnotify events" }, { NULL, "dnotify-ops N", "stop dnotify workers after N bogo operations" }, { NULL, "dup N", "start N workers exercising dup/close" }, @@ -2895,9 +2899,11 @@ if (ret < 0) return EXIT_FAILURE; else if (ret > 0) - return EXIT_SUCCESS; - else + exit(EXIT_SUCCESS); + else { set_setting("class", TYPE_ID_UINT32, &u32); + enable_classes(u32); + } break; case OPT_CLONE_MAX: stress_set_clone_max(optarg); @@ -2959,6 +2965,9 @@ case OPT_DIRDEEP_DIRS: stress_set_dirdeep_dirs(optarg); break; + case OPT_DIRDEEP_INODES: + stress_set_dirdeep_inodes(optarg); + break; case OPT_EPOLL_DOMAIN: if (stress_set_epoll_domain(optarg) < 0) return EXIT_FAILURE; @@ -3354,7 +3363,7 @@ break; case OPT_VERSION: version(); - return EXIT_SUCCESS; + exit(EXIT_SUCCESS); case OPT_VM_BYTES: stress_set_vm_bytes(optarg); break; @@ -3585,9 +3594,6 @@ if (ret != EXIT_SUCCESS) exit(ret); - (void)get_setting("class", &class); - enable_classes(class); - /* * Throw away excluded stressors */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stress-ng-0.08.09/stress-ng.h new/stress-ng-0.08.10/stress-ng.h --- old/stress-ng-0.08.09/stress-ng.h 2017-07-18 11:53:20.000000000 +0200 +++ new/stress-ng-0.08.10/stress-ng.h 2017-08-07 22:34:14.000000000 +0200 @@ -1510,6 +1510,7 @@ OPT_DIRDEEP, OPT_DIRDEEP_OPS, OPT_DIRDEEP_DIRS, + OPT_DIRDEEP_INODES, OPT_DNOTIFY, OPT_DNOTIFY_OPS, @@ -2291,13 +2292,11 @@ extern int stress_mlock_region(const void *addr_start, const void *addr_end); /* Argument parsing and range checking */ -extern WARN_UNUSED int32_t get_opt_sched(const char *const str); -extern WARN_UNUSED int32_t get_opt_ionice_class(const char *const str); -extern WARN_UNUSED uint32_t get_uint32(const char *const str); -extern WARN_UNUSED int32_t get_int32(const char *const str); extern WARN_UNUSED uint64_t get_uint64(const char *const str); extern WARN_UNUSED uint64_t get_uint64_scale(const char *const str, const scale_t scales[], const char *const msg); +extern WARN_UNUSED uint64_t get_uint64_percent(const char *const str, + const uint32_t instances, const uint64_t max, const char *const errmsg); extern WARN_UNUSED uint64_t get_uint64_byte(const char *const str); extern WARN_UNUSED uint64_t get_uint64_byte_memory(const char *const str, const uint32_t instances); @@ -2310,6 +2309,10 @@ extern void check_range_bytes(const char *const opt, const uint64_t val, const uint64_t lo, const uint64_t hi); extern WARN_UNUSED int set_cpu_affinity(char *const arg); +extern WARN_UNUSED uint32_t get_uint32(const char *const str); +extern WARN_UNUSED int32_t get_int32(const char *const str); +extern WARN_UNUSED int32_t get_opt_sched(const char *const str); +extern WARN_UNUSED int32_t get_opt_ionice_class(const char *const str); /* Misc helper funcs */ extern void stress_unmap_shared(void); @@ -2352,6 +2355,7 @@ extern WARN_UNUSED int mmap_check(uint8_t *buf, const size_t sz, const size_t page_size); extern WARN_UNUSED uint64_t stress_get_phys_mem_size(void); extern WARN_UNUSED uint64_t stress_get_filesystem_size(void); +extern WARN_UNUSED uint64_t stress_get_filesystem_available_inodes(void); extern char *stress_uint64_to_str(char *str, size_t len, const uint64_t val); /* @@ -2480,6 +2484,7 @@ extern int stress_set_dentry_order(const char *opt); extern void stress_set_dir_dirs(const char *opt); extern void stress_set_dirdeep_dirs(const char *opt); +extern void stress_set_dirdeep_inodes(const char *opt); extern void stress_set_epoll_port(const char *opt); extern int stress_set_epoll_domain(const char *opt); extern void stress_set_exec_max(const char *opt);