TWIMC: I released version 0.9.0 of kcbench, a simple Linux kernel compile benchmark. It basically downloads a Linux version (which one depends on the compiler used), extracts it, creates a configuration ('defconfig' by default), before it compiles a kernel ('vmlinux') in a temporary directory ('O=/tmp/foo/') while measuring the time it takes to build. It compiles a few kernels that way using different number of jobs (make -j #). After each run kcbench prints the time it took and how many kernels the machine can build per hour at this rate.
This is how it looks: > [cttest@localhost ~]$ kcbench > Processor: Intel(R) Core(TM) i5-3350P CPU @ 3.10GHz [4 CPUs] > Cpufreq; Memory: powersave [intel_pstate]; 7895 MiB > Linux running: 5.6.2-125.vanilla.knurd.1.fc31.x86_64 [x86_64] > Compiler: gcc (GCC) 9.3.1 20200317 (Red Hat 9.3.1-1) > Linux compiled: 4.19.0 [/home/thl/.cache/kcbench/linux-4.19/] > Config; Environment: defconfig; CCACHE_DISABLE="1" > Build command: make vmlinux > Filling caches: This might take a while... Done > Run 1 (-j 4): 288.16 seconds / 12.49 kernels/hour [P:384%] > Run 2 (-j 4): 288.19 seconds / 12.49 kernels/hour [P:384%] > Run 3 (-j 6): 291.01 seconds / 12.37 kernels/hour [P:384%] > Run 4 (-j 6): 291.28 seconds / 12.36 kernels/hour [P:385%] You can use the benchmark to compare different machines, just make sure they use a similar compiler. Kcbench can be useful for stress tests, too. It's also a good tool to find the optimal number of jobs for compiling source code, as 'just use all cores' sometimes is not the fastest setting, as a quick test on an AMD Ryzen Threadripper 3990X (64 cores/128 threads) recently showed: > [cttest@localhost ~]$ kcbench -s 5.3 -n 1 -m > Processor: AMD Ryzen Threadripper 3990X 64-Core Processor [128 > CPUs] > Cpufreq; Memory: Unknown; 63736 MByte RAM > Linux running: 5.6.0-0.rc2.git0.1.vanilla.knurd.2.fc31.x86_64 > Compiler used: gcc (GCC) 9.2.1 20190827 (Red Hat 9.2.1-1) > Linux compiled: 5.3.0 [/home/cttest/.cache/kcbench/linux-5.3/] > Config; Environment: defconfig; CCACHE_DISABLE="1" > Build command: make vmlinux > Run 1 (-j 128): 260.43 seconds / 13.82 kernels/hour > Run 2 (-j 136): 262.67 seconds / 13.71 kernels/hour > Run 3 (-j 64): 215.54 seconds / 16.70 kernels/hour > Run 4 (-j 72): 215.97 seconds / 16.67 kernels/hour (this is a quote from the man-page, which has a few more results) For more general information about kcbench see: * its project page: https://gitlab.com/knurd42/kcbench/ * its README: https://gitlab.com/knurd42/kcbench/-/blob/master/README.md * the man-page for kcbench, which tries to compile one Linux kernel really fast by using many jobs: https://gitlab.com/knurd42/kcbench/-/raw/master/kcbench.man1.md * the man-page for kcbenchrate (which is new with 0.9.0 [thx arnd for the suggestion]), which by default compiles one kernel on each CPU using one job to measure the rate and keep the all cores busy all the time: https://gitlab.com/knurd42/kcbench/-/raw/master/kcbenchrate.man1.md * the release page for kcbench 0.9.0, which list all its major improvements: https://gitlab.com/knurd42/kcbench/-/releases/v0.9.0 To quickly outline the potential briefly, here is what a 'kcbench --help' will show: > Usage: kcbench [options] > > Compile a Linux kernel and measure the time it takes. > > Available options: > -b, --bypass -- bypass cache fill run and measure immediately > -d, --detailedresults -- print more detailed results > -i, --iterations <int> -- number or iterations per job > -j, --jobs <int> (*) -- number of jobs to use ('make -j #') > -m, --modconfig -- build using 'allmodconfig vmlinux modules' > -o, --outputdir <dir> -- compile in <dir>/kcbench/ ('make O=#') > -q, --quiet -- quiet > -s, --src (<dir>|<version>) -- take Linux sources from <dir>; if not found > try ~/.cache/kcbench/linux-<version>/ and > /usr/share/kcdata/linux-<version>/; if still > not found download <version> automatically. > -v, --verbose (*) -- increase verboselevel > > --add-make-args <str> -- pass <str> to make call ('make <str> > vmlinux') > --cc <exec> -- use specified target compiler ('CC=#') > --cross-compile <arch> -- cross compile for <arch> > --crosscomp-scheme <str> -- naming scheme for cross compiler > --hostcc <exec> -- use specified host compiler ('HOSTCC=#') > --infinite -- run endlessly > --llvm -- sets 'LLVM=1' to use clang and LLVM tools > --no-download -- never download anything automatically > --savefailedlogs <dir> -- save log from failed compilations in <dir> > > -h, --help -- show this text > -V, --version -- output program version > > (*) -- option can be passed multiple times Ciao, Thorsten P.S.: kcbench is written in Bash, as it started quite small and grew a lot over time. Maybe at this point bash might not be the best choice, but OTOH it's something that runs nearly everywhere; it also understood by a lot of people, which makes it easy to adjust to specific needs.