179bf2bb3SThomas Gleixner# 279bf2bb3SThomas Gleixner# Timer subsystem related configuration options 379bf2bb3SThomas Gleixner# 43872c48bSThomas Gleixner 5b5e498adSThomas Gleixner# Options selectable by arch Kconfig 6b5e498adSThomas Gleixner 7b5e498adSThomas Gleixner# Watchdog function for clocksources to detect instabilities 8b5e498adSThomas Gleixnerconfig CLOCKSOURCE_WATCHDOG 9b5e498adSThomas Gleixner bool 10b5e498adSThomas Gleixner 11b5e498adSThomas Gleixner# Architecture has extra clocksource data 12b5e498adSThomas Gleixnerconfig ARCH_CLOCKSOURCE_DATA 13b5e498adSThomas Gleixner bool 14b5e498adSThomas Gleixner 15*09ec5442SThomas Gleixner# Clocksources require validation of the clocksource against the last 16*09ec5442SThomas Gleixner# cycle update - x86/TSC misfeature 17*09ec5442SThomas Gleixnerconfig CLOCKSOURCE_VALIDATE_LAST_CYCLE 18*09ec5442SThomas Gleixner bool 19*09ec5442SThomas Gleixner 20b5e498adSThomas Gleixner# Timekeeping vsyscall support 21576094b7SJohn Stultzconfig GENERIC_TIME_VSYSCALL 22576094b7SJohn Stultz bool 23576094b7SJohn Stultz 24576094b7SJohn Stultz# Timekeeping vsyscall support 2570639421SJohn Stultzconfig GENERIC_TIME_VSYSCALL_OLD 26b5e498adSThomas Gleixner bool 27b5e498adSThomas Gleixner 28b5e498adSThomas Gleixner# Old style timekeeping 29b5e498adSThomas Gleixnerconfig ARCH_USES_GETTIMEOFFSET 30b5e498adSThomas Gleixner bool 31b5e498adSThomas Gleixner 32b5e498adSThomas Gleixner# The generic clock events infrastructure 33b5e498adSThomas Gleixnerconfig GENERIC_CLOCKEVENTS 34b5e498adSThomas Gleixner bool 35b5e498adSThomas Gleixner 36764e0da1SThomas Gleixner# Migration helper. Builds, but does not invoke 37764e0da1SThomas Gleixnerconfig GENERIC_CLOCKEVENTS_BUILD 38764e0da1SThomas Gleixner bool 39764e0da1SThomas Gleixner default y 40764e0da1SThomas Gleixner depends on GENERIC_CLOCKEVENTS 41764e0da1SThomas Gleixner 4212ad1000SMark Rutland# Architecture can handle broadcast in a driver-agnostic way 4312ad1000SMark Rutlandconfig ARCH_HAS_TICK_BROADCAST 4412ad1000SMark Rutland bool 4512ad1000SMark Rutland 46b5e498adSThomas Gleixner# Clockevents broadcasting infrastructure 47b5e498adSThomas Gleixnerconfig GENERIC_CLOCKEVENTS_BROADCAST 48b5e498adSThomas Gleixner bool 49b5e498adSThomas Gleixner depends on GENERIC_CLOCKEVENTS 50b5e498adSThomas Gleixner 51764e0da1SThomas Gleixner# Automatically adjust the min. reprogramming time for 52764e0da1SThomas Gleixner# clock event device 53764e0da1SThomas Gleixnerconfig GENERIC_CLOCKEVENTS_MIN_ADJUST 54764e0da1SThomas Gleixner bool 55764e0da1SThomas Gleixner 56b5e498adSThomas Gleixner# Generic update of CMOS clock 57b5e498adSThomas Gleixnerconfig GENERIC_CMOS_UPDATE 58b5e498adSThomas Gleixner bool 59764e0da1SThomas Gleixner 60764e0da1SThomas Gleixnerif GENERIC_CLOCKEVENTS 61764e0da1SThomas Gleixnermenu "Timers subsystem" 62764e0da1SThomas Gleixner 633451d024SFrederic Weisbecker# Core internal switch. Selected by NO_HZ_COMMON / HIGH_RES_TIMERS. This is 64764e0da1SThomas Gleixner# only related to the tick functionality. Oneshot clockevent devices 65764e0da1SThomas Gleixner# are supported independ of this. 66764e0da1SThomas Gleixnerconfig TICK_ONESHOT 67764e0da1SThomas Gleixner bool 68764e0da1SThomas Gleixner 693451d024SFrederic Weisbeckerconfig NO_HZ_COMMON 703451d024SFrederic Weisbecker bool 713451d024SFrederic Weisbecker depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS 723451d024SFrederic Weisbecker select TICK_ONESHOT 733451d024SFrederic Weisbecker 743ca277e4SFrederic Weisbeckerchoice 753ca277e4SFrederic Weisbecker prompt "Timer tick handling" 763ca277e4SFrederic Weisbecker default NO_HZ_IDLE if NO_HZ 773ca277e4SFrederic Weisbecker 785b533f4fSFrederic Weisbeckerconfig HZ_PERIODIC 793ca277e4SFrederic Weisbecker bool "Periodic timer ticks (constant rate, no dynticks)" 803ca277e4SFrederic Weisbecker help 813ca277e4SFrederic Weisbecker This option keeps the tick running periodically at a constant 823ca277e4SFrederic Weisbecker rate, even when the CPU doesn't need it. 833ca277e4SFrederic Weisbecker 843ca277e4SFrederic Weisbeckerconfig NO_HZ_IDLE 853ca277e4SFrederic Weisbecker bool "Idle dynticks system (tickless idle)" 86764e0da1SThomas Gleixner depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS 873451d024SFrederic Weisbecker select NO_HZ_COMMON 88764e0da1SThomas Gleixner help 893ca277e4SFrederic Weisbecker This option enables a tickless idle system: timer interrupts 903ca277e4SFrederic Weisbecker will only trigger on an as-needed basis when the system is idle. 913ca277e4SFrederic Weisbecker This is usually interesting for energy saving. 923ca277e4SFrederic Weisbecker 933ca277e4SFrederic Weisbecker Most of the time you want to say Y here. 94764e0da1SThomas Gleixner 95c5bfece2SFrederic Weisbeckerconfig NO_HZ_FULL 96fae30dd6SFrederic Weisbecker bool "Full dynticks system (tickless)" 973451d024SFrederic Weisbecker # NO_HZ_COMMON dependency 98ab71d36dSFrederic Weisbecker depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS 99fae30dd6SFrederic Weisbecker # We need at least one periodic CPU for timekeeping 100fae30dd6SFrederic Weisbecker depends on SMP 101fae30dd6SFrederic Weisbecker # RCU_USER_QS dependency 102fae30dd6SFrederic Weisbecker depends on HAVE_CONTEXT_TRACKING 103c58b0df1SFrederic Weisbecker # VIRT_CPU_ACCOUNTING_GEN dependency 104554b0004SKevin Hilman depends on HAVE_VIRT_CPU_ACCOUNTING_GEN 1053451d024SFrederic Weisbecker select NO_HZ_COMMON 106ab71d36dSFrederic Weisbecker select RCU_USER_QS 107ab71d36dSFrederic Weisbecker select RCU_NOCB_CPU 108c58b0df1SFrederic Weisbecker select VIRT_CPU_ACCOUNTING_GEN 10976c24fb0SFrederic Weisbecker select IRQ_WORK 110a831881bSFrederic Weisbecker help 111a831881bSFrederic Weisbecker Adaptively try to shutdown the tick whenever possible, even when 112a831881bSFrederic Weisbecker the CPU is running tasks. Typically this requires running a single 113a831881bSFrederic Weisbecker task on the CPU. Chances for running tickless are maximized when 114a831881bSFrederic Weisbecker the task mostly runs in userspace and has few kernel activity. 115a831881bSFrederic Weisbecker 116c5bfece2SFrederic Weisbecker You need to fill up the nohz_full boot parameter with the 117a831881bSFrederic Weisbecker desired range of dynticks CPUs. 118a831881bSFrederic Weisbecker 119a831881bSFrederic Weisbecker This is implemented at the expense of some overhead in user <-> kernel 120a831881bSFrederic Weisbecker transitions: syscalls, exceptions and interrupts. Even when it's 121a831881bSFrederic Weisbecker dynamically off. 122a831881bSFrederic Weisbecker 123a831881bSFrederic Weisbecker Say N. 124a831881bSFrederic Weisbecker 1253ca277e4SFrederic Weisbeckerendchoice 1263ca277e4SFrederic Weisbecker 127f98823acSFrederic Weisbeckerconfig NO_HZ_FULL_ALL 128f96a34e2SPaul Gortmaker bool "Full dynticks system on all CPUs by default (except CPU 0)" 129f98823acSFrederic Weisbecker depends on NO_HZ_FULL 130f98823acSFrederic Weisbecker help 131f98823acSFrederic Weisbecker If the user doesn't pass the nohz_full boot option to 132f98823acSFrederic Weisbecker define the range of full dynticks CPUs, consider that all 133f98823acSFrederic Weisbecker CPUs in the system are full dynticks by default. 134f98823acSFrederic Weisbecker Note the boot CPU will still be kept outside the range to 135f98823acSFrederic Weisbecker handle the timekeeping duty. 136f98823acSFrederic Weisbecker 137b44379afSPaul E. McKenneyconfig NO_HZ_FULL_SYSIDLE 138b44379afSPaul E. McKenney bool "Detect full-system idle state for full dynticks system" 139b44379afSPaul E. McKenney depends on NO_HZ_FULL 140b44379afSPaul E. McKenney default n 141b44379afSPaul E. McKenney help 142b44379afSPaul E. McKenney At least one CPU must keep the scheduling-clock tick running for 143b44379afSPaul E. McKenney timekeeping purposes whenever there is a non-idle CPU, where 144b44379afSPaul E. McKenney "non-idle" also includes dynticks CPUs as long as they are 145b44379afSPaul E. McKenney running non-idle tasks. Because the underlying adaptive-tick 146b44379afSPaul E. McKenney support cannot distinguish between all CPUs being idle and 147b44379afSPaul E. McKenney all CPUs each running a single task in dynticks mode, the 148b44379afSPaul E. McKenney underlying support simply ensures that there is always a CPU 149b44379afSPaul E. McKenney handling the scheduling-clock tick, whether or not all CPUs 150b44379afSPaul E. McKenney are idle. This Kconfig option enables scalable detection of 151b44379afSPaul E. McKenney the all-CPUs-idle state, thus allowing the scheduling-clock 152b44379afSPaul E. McKenney tick to be disabled when all CPUs are idle. Note that scalable 153b44379afSPaul E. McKenney detection of the all-CPUs-idle state means that larger systems 154b44379afSPaul E. McKenney will be slower to declare the all-CPUs-idle state. 155b44379afSPaul E. McKenney 156b44379afSPaul E. McKenney Say Y if you would like to help debug all-CPUs-idle detection. 157b44379afSPaul E. McKenney 158b44379afSPaul E. McKenney Say N if you are unsure. 159b44379afSPaul E. McKenney 1600edd1b17SPaul E. McKenneyconfig NO_HZ_FULL_SYSIDLE_SMALL 1610edd1b17SPaul E. McKenney int "Number of CPUs above which large-system approach is used" 1620edd1b17SPaul E. McKenney depends on NO_HZ_FULL_SYSIDLE 1630edd1b17SPaul E. McKenney range 1 NR_CPUS 1640edd1b17SPaul E. McKenney default 8 1650edd1b17SPaul E. McKenney help 1660edd1b17SPaul E. McKenney The full-system idle detection mechanism takes a lazy approach 1670edd1b17SPaul E. McKenney on large systems, as is required to attain decent scalability. 1680edd1b17SPaul E. McKenney However, on smaller systems, scalability is not anywhere near as 1690edd1b17SPaul E. McKenney large a concern as is energy efficiency. The sysidle subsystem 1700edd1b17SPaul E. McKenney therefore uses a fast but non-scalable algorithm for small 1710edd1b17SPaul E. McKenney systems and a lazier but scalable algorithm for large systems. 1720edd1b17SPaul E. McKenney This Kconfig parameter defines the number of CPUs in the largest 1730edd1b17SPaul E. McKenney system that will be considered to be "small". 1740edd1b17SPaul E. McKenney 1750edd1b17SPaul E. McKenney The default value will be fine in most cases. Battery-powered 1760edd1b17SPaul E. McKenney systems that (1) enable NO_HZ_FULL_SYSIDLE, (2) have larger 1770edd1b17SPaul E. McKenney numbers of CPUs, and (3) are suffering from battery-lifetime 1780edd1b17SPaul E. McKenney problems due to long sysidle latencies might wish to experiment 1790edd1b17SPaul E. McKenney with larger values for this Kconfig parameter. On the other 1800edd1b17SPaul E. McKenney hand, they might be even better served by disabling NO_HZ_FULL 1810edd1b17SPaul E. McKenney entirely, given that NO_HZ_FULL is intended for HPC and 1820edd1b17SPaul E. McKenney real-time workloads that at present do not tend to be run on 1830edd1b17SPaul E. McKenney battery-powered systems. 1840edd1b17SPaul E. McKenney 1850edd1b17SPaul E. McKenney Take the default if you are unsure. 1860edd1b17SPaul E. McKenney 1870644ca5cSFrederic Weisbeckerconfig NO_HZ 1880644ca5cSFrederic Weisbecker bool "Old Idle dynticks config" 1890644ca5cSFrederic Weisbecker depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS 1900644ca5cSFrederic Weisbecker help 1910644ca5cSFrederic Weisbecker This is the old config entry that enables dynticks idle. 1920644ca5cSFrederic Weisbecker We keep it around for a little while to enforce backward 1930644ca5cSFrederic Weisbecker compatibility with older config files. 1940644ca5cSFrederic Weisbecker 195764e0da1SThomas Gleixnerconfig HIGH_RES_TIMERS 196764e0da1SThomas Gleixner bool "High Resolution Timer Support" 197764e0da1SThomas Gleixner depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS 198764e0da1SThomas Gleixner select TICK_ONESHOT 199764e0da1SThomas Gleixner help 200764e0da1SThomas Gleixner This option enables high resolution timer support. If your 201764e0da1SThomas Gleixner hardware is not capable then this option only increases 202764e0da1SThomas Gleixner the size of the kernel image. 203764e0da1SThomas Gleixner 204764e0da1SThomas Gleixnerendmenu 205764e0da1SThomas Gleixnerendif 206