This repo offers several version of the patch needed to enable CPU-specific compile option in the Linux kernel. These are versioned based on which version of gcc you are using and also which version of the kernel you wish to build.
This kernel patch adds additional CPU options to the Linux kernel accessible under: Processor type and features ---> Processor family --->
Why a specific patch? The kernel uses its own set of CFLAGS, KCFLAGS. For exmaple, see:
|CPU Family||GCC Optimization|
|Native optimizations autodetected by GCC||-march=native|
|AMD Improved K8-family||-march=k8-sse3|
|AMD Family 10h (Barcelona)||-march=barcelona|
|AMD Family 14h (Bobcat)||-march=btver1|
|AMD Family 15h (Bulldozer)||-march=bdver1|
|AMD Piledriver Family 15h (Piledriver)||-march=bdver2|
|AMD Family 16h (Jaguar)||-march=btver2|
|Intel 1st Gen Core i3/i5/i7-family (Nehalem)||-march=nehalem|
|Intel 1.5 Gen Core i3/i5/i7-family (Westmere)||-march=westmere|
|Intel 2nd Gen Core i3/i5/i7-family (Sandybridge)||-march=sandybridge|
|Intel 3rd Gen Core i3/i5/i7-family (Ivybridge)||-march=ivybridge|
|Intel 4th Gen Core i3/i5/i7-family (Haswell)||-march=haswell|
|Intel 5th Gen Core i3/i5/i7-family (Broadwell)||-march=broadwell|
Three different machines running a generic x86-64 kernel and an otherwise identical kernel running with the optimized gcc options were tested using a make based endpoint.
There are small but real speed increases to running with this patch as judged by a make endpoint. The increases are on par with the speed increase that the upstream sanctioned core2 option gives users, so not including additional options seems somewhat arbitrary to me.
- Three test machines: Intel Xeon X3360, Intel i7-2620M, Intel Core i7-3660K.
- All ran the make benchmark (linked below) 35 times while booted into a 'generic' kernel. Then all ran the same make benchmark 35 times after booting into an optimized kernel. Below are the optimizations chosen for each machine.
- X3360 = core2
- i7-2620M = sandybridge
- i7-3660K = ivybridge
- Results were analyzed for statistical significance via ANOVA plots that clearly show statistically significant albeit small differences.
- All the assumptions for ANOVA are met:
- Data are normally distributed as show in the normal quantile plots.
- The population variances are fairly equal (Levene and Barlett tests).
- The ANOVA plots clearly show significance.
- Pair-wise analysis by Tukey-Kramer shows significance at the 0.05 level for all CPUs compared.
Below are the differences in median values:
|CPU||Difference in median value|
- Bash script that controls the benchmark: https://github.com/graysky2/bin/blob/master/bench
- Log file generated by script: http://repo-ck.com/bench/compile_time_optimization.txt.gz
- Original author: jeroen AT linuxforge DOT net
- Link to original version: http://www.linuxforge.net/docs/linux/linux-gcc.php