1#
2# Timer subsystem related configuration options
3#
4
5# Options selectable by arch Kconfig
6
7# Watchdog function for clocksources to detect instabilities
8config CLOCKSOURCE_WATCHDOG
9	bool
10
11# Architecture has extra clocksource data
12config ARCH_CLOCKSOURCE_DATA
13	bool
14
15# Clocksources require validation of the clocksource against the last
16# cycle update - x86/TSC misfeature
17config CLOCKSOURCE_VALIDATE_LAST_CYCLE
18	bool
19
20# Timekeeping vsyscall support
21config GENERIC_TIME_VSYSCALL
22	bool
23
24# Timekeeping vsyscall support
25config GENERIC_TIME_VSYSCALL_OLD
26	bool
27
28# Old style timekeeping
29config ARCH_USES_GETTIMEOFFSET
30	bool
31
32# The generic clock events infrastructure
33config GENERIC_CLOCKEVENTS
34	bool
35
36# Architecture can handle broadcast in a driver-agnostic way
37config ARCH_HAS_TICK_BROADCAST
38	bool
39
40# Clockevents broadcasting infrastructure
41config GENERIC_CLOCKEVENTS_BROADCAST
42	bool
43	depends on GENERIC_CLOCKEVENTS
44
45# Automatically adjust the min. reprogramming time for
46# clock event device
47config GENERIC_CLOCKEVENTS_MIN_ADJUST
48	bool
49
50# Generic update of CMOS clock
51config GENERIC_CMOS_UPDATE
52	bool
53
54if GENERIC_CLOCKEVENTS
55menu "Timers subsystem"
56
57# Core internal switch. Selected by NO_HZ_COMMON / HIGH_RES_TIMERS. This is
58# only related to the tick functionality. Oneshot clockevent devices
59# are supported independ of this.
60config TICK_ONESHOT
61	bool
62
63config NO_HZ_COMMON
64	bool
65	depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
66	select TICK_ONESHOT
67
68choice
69	prompt "Timer tick handling"
70	default NO_HZ_IDLE if NO_HZ
71
72config HZ_PERIODIC
73	bool "Periodic timer ticks (constant rate, no dynticks)"
74	help
75	  This option keeps the tick running periodically at a constant
76	  rate, even when the CPU doesn't need it.
77
78config NO_HZ_IDLE
79	bool "Idle dynticks system (tickless idle)"
80	depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
81	select NO_HZ_COMMON
82	help
83	  This option enables a tickless idle system: timer interrupts
84	  will only trigger on an as-needed basis when the system is idle.
85	  This is usually interesting for energy saving.
86
87	  Most of the time you want to say Y here.
88
89config NO_HZ_FULL
90	bool "Full dynticks system (tickless)"
91	# NO_HZ_COMMON dependency
92	depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
93	# We need at least one periodic CPU for timekeeping
94	depends on SMP
95	# RCU_USER_QS dependency
96	depends on HAVE_CONTEXT_TRACKING
97	# VIRT_CPU_ACCOUNTING_GEN dependency
98	depends on HAVE_VIRT_CPU_ACCOUNTING_GEN
99	select NO_HZ_COMMON
100	select RCU_USER_QS
101	select RCU_NOCB_CPU
102	select VIRT_CPU_ACCOUNTING_GEN
103	select IRQ_WORK
104	help
105	 Adaptively try to shutdown the tick whenever possible, even when
106	 the CPU is running tasks. Typically this requires running a single
107	 task on the CPU. Chances for running tickless are maximized when
108	 the task mostly runs in userspace and has few kernel activity.
109
110	 You need to fill up the nohz_full boot parameter with the
111	 desired range of dynticks CPUs.
112
113	 This is implemented at the expense of some overhead in user <-> kernel
114	 transitions: syscalls, exceptions and interrupts. Even when it's
115	 dynamically off.
116
117	 Say N.
118
119endchoice
120
121config NO_HZ_FULL_ALL
122       bool "Full dynticks system on all CPUs by default (except CPU 0)"
123       depends on NO_HZ_FULL
124       help
125         If the user doesn't pass the nohz_full boot option to
126	 define the range of full dynticks CPUs, consider that all
127	 CPUs in the system are full dynticks by default.
128	 Note the boot CPU will still be kept outside the range to
129	 handle the timekeeping duty.
130
131config NO_HZ_FULL_SYSIDLE
132	bool "Detect full-system idle state for full dynticks system"
133	depends on NO_HZ_FULL
134	default n
135	help
136	 At least one CPU must keep the scheduling-clock tick running for
137	 timekeeping purposes whenever there is a non-idle CPU, where
138	 "non-idle" also includes dynticks CPUs as long as they are
139	 running non-idle tasks.  Because the underlying adaptive-tick
140	 support cannot distinguish between all CPUs being idle and
141	 all CPUs each running a single task in dynticks mode, the
142	 underlying support simply ensures that there is always a CPU
143	 handling the scheduling-clock tick, whether or not all CPUs
144	 are idle.  This Kconfig option enables scalable detection of
145	 the all-CPUs-idle state, thus allowing the scheduling-clock
146	 tick to be disabled when all CPUs are idle.  Note that scalable
147	 detection of the all-CPUs-idle state means that larger systems
148	 will be slower to declare the all-CPUs-idle state.
149
150	 Say Y if you would like to help debug all-CPUs-idle detection.
151
152	 Say N if you are unsure.
153
154config NO_HZ_FULL_SYSIDLE_SMALL
155	int "Number of CPUs above which large-system approach is used"
156	depends on NO_HZ_FULL_SYSIDLE
157	range 1 NR_CPUS
158	default 8
159	help
160	 The full-system idle detection mechanism takes a lazy approach
161	 on large systems, as is required to attain decent scalability.
162	 However, on smaller systems, scalability is not anywhere near as
163	 large a concern as is energy efficiency.  The sysidle subsystem
164	 therefore uses a fast but non-scalable algorithm for small
165	 systems and a lazier but scalable algorithm for large systems.
166	 This Kconfig parameter defines the number of CPUs in the largest
167	 system that will be considered to be "small".
168
169	 The default value will be fine in most cases.	Battery-powered
170	 systems that (1) enable NO_HZ_FULL_SYSIDLE, (2) have larger
171	 numbers of CPUs, and (3) are suffering from battery-lifetime
172	 problems due to long sysidle latencies might wish to experiment
173	 with larger values for this Kconfig parameter.  On the other
174	 hand, they might be even better served by disabling NO_HZ_FULL
175	 entirely, given that NO_HZ_FULL is intended for HPC and
176	 real-time workloads that at present do not tend to be run on
177	 battery-powered systems.
178
179	 Take the default if you are unsure.
180
181config NO_HZ
182	bool "Old Idle dynticks config"
183	depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
184	help
185	  This is the old config entry that enables dynticks idle.
186	  We keep it around for a little while to enforce backward
187	  compatibility with older config files.
188
189config HIGH_RES_TIMERS
190	bool "High Resolution Timer Support"
191	depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
192	select TICK_ONESHOT
193	help
194	  This option enables high resolution timer support. If your
195	  hardware is not capable then this option only increases
196	  the size of the kernel image.
197
198endmenu
199endif
200