]> err.no Git - linux-2.6/commitdiff
[PATCH] i386: Selectable Frequency of the Timer Interrupt
authorChristoph Lameter <christoph@lameter.com>
Thu, 23 Jun 2005 07:08:25 +0000 (00:08 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Thu, 23 Jun 2005 16:45:10 +0000 (09:45 -0700)
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>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/i386/Kconfig
arch/x86_64/Kconfig
include/asm-i386/param.h
include/asm-x86_64/param.h
kernel/Kconfig.hz [new file with mode: 0644]

index bfdcedef06e180ee5c63267e346c0a6cc914789c..d4ae5f9ceae6bb0a9375c53259d77fdaa70e16a4 100644 (file)
@@ -961,6 +961,8 @@ config SECCOMP
 
          If unsure, say Y. Only embedded should say N here.
 
+source kernel/Kconfig.hz
+
 endmenu
 
 
index 61ed16652347f7b3054fbb7b89b406346f940d4b..db259757dc8a4f97af912c8d56f5e0ae8d4ab81a 100644 (file)
@@ -402,6 +402,8 @@ config SECCOMP
 
          If unsure, say Y. Only embedded should say N here.
 
+source kernel/Kconfig.hz
+
 endmenu
 
 #
index b6440526e42aa9b38d84cbd682cf8a0ac20b63c1..fa02e67ea86b7ba58f06e53032ac2aff7279c987 100644 (file)
@@ -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
index b707f0568c9ede6420abf70388d6dd7fa716a3fc..40b11937180d37afc8bd32034bba45dafd6891ec 100644 (file)
@@ -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 --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
new file mode 100644 (file)
index 0000000..248e1c3
--- /dev/null
@@ -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
+