On 08/02/2017 11:34 PM, Daniel Santos wrote: > I'm working on a patch to modify the testsuite to obey the > --load-average value if one is passed to make. It seems to work pretty > well, except for libstdc++ which doesn't load gcc/libs/gcc-defs.exp > since it defines it's own ${tool}_functions. I haven't dug too deeply > into libstdc++'s testsuite yet, but how does it manage parallelization > if it isn't using the routines in gcc-defs.exp? I'm thinking I will > need a separate load-limit.exp file or some such. > > This feature would be very helpful since you cannot interrupt a test run > and restart from where you left off. Also, if you suspend the job, then > you will get timeouts. So it would be helpful to have a way to have it > yield when you need to do something else on your machine, or if you're > using a shared test machine and you want to use all available CPU, but > not crowd out other users. > > Due to not having actual interprocess communication, the check_cpu_load > procedure uses an algo that gives lower numbered jobs slightly more > priority than higher numbered jobs. When the load average is exceeded, > the job sleeps an amount of time based upon the "priority" (lower > numbered jobs sleep less) and a random number - this helps prevent feast > or famine cycles where all jobs stop when the load is too high and then > all jobs start again and saturate the CPUs, bouncing back and forth. > > gcc/testsuite/ChangeLog > > * gcc/Makefile.in (check-parallel-%): Export job number to environment. > * gcc/testsuite/lib/gcc-defs.exp (num_jobs, load_max, getloadavg_exe): > New global variables. > (check_cpu_load): New proc to check speed limit. > (gcc_parallel_test_run_p): Modify to call check_cpu_load before > acquiring a new lock file. So does this perform better than make -j X -l X? I use that with good success.
jeff