From: Christoph Lameter <christoph@lameter.com> Make the timer frequency selectable. The timer interrupt may cause bus and memory contention in large NUMA systems since the interrupt occurs on each processor HZ times per second. Signed-off-by: Christoph Lameter <christoph@lameter.com> Signed-off-by: Shai Fultheim <shai@scalex86.org> Signed-off-by: Andrew Morton <akpm@osdl.org> --- arch/i386/Kconfig | 2 + arch/x86_64/Kconfig | 2 + include/asm-i386/param.h | 4 ++- include/asm-x86_64/param.h | 6 +++-- kernel/Kconfig.hz | 46 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 57 insertions(+), 3 deletions(-) diff -puN arch/i386/Kconfig~i386-selectable-frequency-of-the-timer-interrupt arch/i386/Kconfig --- 25/arch/i386/Kconfig~i386-selectable-frequency-of-the-timer-interrupt 2005-06-06 00:14:02.000000000 -0700 +++ 25-akpm/arch/i386/Kconfig 2005-06-06 00:14:02.000000000 -0700 @@ -1117,6 +1117,8 @@ config APM_REAL_MODE_POWER_OFF a work-around for a number of buggy BIOSes. Switch this option on if your computer crashes instead of powering off properly. +source kernel/Kconfig.hz + endmenu source "arch/i386/kernel/cpu/cpufreq/Kconfig" diff -puN arch/x86_64/Kconfig~i386-selectable-frequency-of-the-timer-interrupt arch/x86_64/Kconfig --- 25/arch/x86_64/Kconfig~i386-selectable-frequency-of-the-timer-interrupt 2005-06-06 00:14:02.000000000 -0700 +++ 25-akpm/arch/x86_64/Kconfig 2005-06-06 00:14:02.000000000 -0700 @@ -402,6 +402,8 @@ config SECCOMP If unsure, say Y. Only embedded should say N here. +source kernel/Kconfig.hz + endmenu # diff -puN include/asm-i386/param.h~i386-selectable-frequency-of-the-timer-interrupt include/asm-i386/param.h --- 25/include/asm-i386/param.h~i386-selectable-frequency-of-the-timer-interrupt 2005-06-06 00:14:02.000000000 -0700 +++ 25-akpm/include/asm-i386/param.h 2005-06-06 00:14:02.000000000 -0700 @@ -1,8 +1,10 @@ +#include <linux/config.h> + #ifndef _ASMi386_PARAM_H #define _ASMi386_PARAM_H #ifdef __KERNEL__ -# define HZ 1000 /* Internal kernel timer frequency */ +# define HZ CONFIG_HZ /* Internal kernel timer frequency */ # define USER_HZ 100 /* .. some user interfaces are in "ticks" */ # define CLOCKS_PER_SEC (USER_HZ) /* like times() */ #endif diff -puN include/asm-x86_64/param.h~i386-selectable-frequency-of-the-timer-interrupt include/asm-x86_64/param.h --- 25/include/asm-x86_64/param.h~i386-selectable-frequency-of-the-timer-interrupt 2005-06-06 00:14:02.000000000 -0700 +++ 25-akpm/include/asm-x86_64/param.h 2005-06-06 00:14:02.000000000 -0700 @@ -1,9 +1,11 @@ +#include <linux/config.h> + #ifndef _ASMx86_64_PARAM_H #define _ASMx86_64_PARAM_H #ifdef __KERNEL__ -# define HZ 1000 /* Internal kernel timer frequency */ -# define USER_HZ 100 /* .. some user interfaces are in "ticks */ +# define HZ CONFIG_HZ /* Internal kernel timer frequency */ +# define USER_HZ 100 /* .. some user interfaces are in "ticks */ #define CLOCKS_PER_SEC (USER_HZ) /* like times() */ #endif diff -puN /dev/null kernel/Kconfig.hz --- /dev/null 2003-09-15 06:40:47.000000000 -0700 +++ 25-akpm/kernel/Kconfig.hz 2005-06-06 00:14:02.000000000 -0700 @@ -0,0 +1,46 @@ +# +# Timer Interrupt Frequency Configuration +# + +choice + prompt "Timer frequency" + default HZ_250 + help + Allows the configuration of the timer frequency. It is customary + to have the timer interrupt run at 1000 HZ but 100 HZ may be more + beneficial for servers and NUMA systems that do not need to have + a fast response for user interaction and that may experience bus + contention and cacheline bounces as a result of timer interrupts. + Note that the timer interrupt occurs on each processor in an SMP + environment leading to NR_CPUS * HZ number of timer interrupts + per second. + + + config HZ_100 + bool "100 HZ" + help + 100 HZ is a typical choice for servers, SMP and NUMA systems + with lots of processors that may show reduced performance if + too many timer interrupts are occurring. + + config HZ_250 + bool "250 HZ" + help + 250 HZ is a good compromise choice allowing server performance + while also showing good interactive responsiveness even + on SMP and NUMA systems. + + config HZ_1000 + bool "1000 HZ" + help + 1000 HZ is the preferred choice for desktop systems and other + systems requiring fast interactive responses to events. + +endchoice + +config HZ + int + default 100 if HZ_100 + default 250 if HZ_250 + default 1000 if HZ_1000 + _