On Mon, Jan 02, 2017 at 09:25:56PM +0100, Radim Krčmář wrote: > 2017-01-02 18:07+0100, Paolo Bonzini: > > On 01/01/2017 11:34, Peter Xu wrote: > >> run_tests.sh is getting slower. Maybe it's time to let it run faster. > >> An obvious issue is that, we were running the tests sequentially in > >> the past. > >> > >> This series provides another new "-j" parameter. "-j 8" means we run > >> the tests on 8 task queues. That'll fasten the script a lot. A very > >> quick test of mine shows 3x speed boost with 8 task queues. > >> > >> Most of the changes are in scripts/tash.bash of patch 2, which > >> implemented the main logic for task managements. Please see commit > >> message for more information. > >> > >> I did a quick "make standalone" test to make sure this series won't > >> break it. However I am not sure whether it'll break other thing that I > >> don't know... > > > > Would it work if run_tests.sh wrote a Makefile for all the tests (with > > phony targets only), and then simply ran "make -f Makefile.tmp -jN"? > > We would need to change for_each_unittest to print the command line > instead of running it and add a executable wrapper for run() from > scripts/runtime.bash to have something to pass those arguments to. > After that, we could generate a Makefile. > > I think we can do the queue with ~3 lines of bash and the Makefile would > complicate it more. > > Btw. I just leaned that xargs provides a simpler, but sufficient, > queueing functionality, e.g. > > echo "echo a\0 (sleep 1; echo b)\0 echo c\0 sleep 1\0 echo d" | > xargs -0 -L 1 -P 2 sh -c
Good to know this. :) Looks like above example didn't work, I changed it a bit: echo -e "echo a\0 sleep 1 && echo b\0 echo c\0 sleep 1 && echo d" | xargs -0 -L 1 -P 2 sh -c But I would still prefer not using it - I'll prefer "readability" over "less lines of codes" in this case. -- peterx