123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- # SPDX-License-Identifier: GPL-2.0-only
- #
- # Timer subsystem related configuration options
- #
- # Options selectable by arch Kconfig
- # Watchdog function for clocksources to detect instabilities
- config CLOCKSOURCE_WATCHDOG
- bool
- # Architecture has extra clocksource data
- config ARCH_CLOCKSOURCE_DATA
- bool
- # Architecture has extra clocksource init called from registration
- config ARCH_CLOCKSOURCE_INIT
- bool
- # Clocksources require validation of the clocksource against the last
- # cycle update - x86/TSC misfeature
- config CLOCKSOURCE_VALIDATE_LAST_CYCLE
- bool
- # Timekeeping vsyscall support
- config GENERIC_TIME_VSYSCALL
- bool
- # Old style timekeeping
- config ARCH_USES_GETTIMEOFFSET
- bool
- # The generic clock events infrastructure
- config GENERIC_CLOCKEVENTS
- bool
- # Architecture can handle broadcast in a driver-agnostic way
- config ARCH_HAS_TICK_BROADCAST
- bool
- # Clockevents broadcasting infrastructure
- config GENERIC_CLOCKEVENTS_BROADCAST
- bool
- depends on GENERIC_CLOCKEVENTS
- # Automatically adjust the min. reprogramming time for
- # clock event device
- config GENERIC_CLOCKEVENTS_MIN_ADJUST
- bool
- # Generic update of CMOS clock
- config GENERIC_CMOS_UPDATE
- bool
- # Select to handle posix CPU timers from task_work
- # and not from the timer interrupt context
- config HAVE_POSIX_CPU_TIMERS_TASK_WORK
- bool
- config POSIX_CPU_TIMERS_TASK_WORK
- bool
- default y if POSIX_TIMERS && HAVE_POSIX_CPU_TIMERS_TASK_WORK
- if GENERIC_CLOCKEVENTS
- menu "Timers subsystem"
- # Core internal switch. Selected by NO_HZ_COMMON / HIGH_RES_TIMERS. This is
- # only related to the tick functionality. Oneshot clockevent devices
- # are supported independent of this.
- config TICK_ONESHOT
- bool
- config NO_HZ_COMMON
- bool
- depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
- select TICK_ONESHOT
- choice
- prompt "Timer tick handling"
- default NO_HZ_IDLE if NO_HZ
- config HZ_PERIODIC
- bool "Periodic timer ticks (constant rate, no dynticks)"
- help
- This option keeps the tick running periodically at a constant
- rate, even when the CPU doesn't need it.
- config NO_HZ_IDLE
- bool "Idle dynticks system (tickless idle)"
- depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
- select NO_HZ_COMMON
- help
- This option enables a tickless idle system: timer interrupts
- will only trigger on an as-needed basis when the system is idle.
- This is usually interesting for energy saving.
- Most of the time you want to say Y here.
- config NO_HZ_FULL
- bool "Full dynticks system (tickless)"
- # NO_HZ_COMMON dependency
- depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
- # We need at least one periodic CPU for timekeeping
- depends on SMP
- depends on HAVE_CONTEXT_TRACKING
- # VIRT_CPU_ACCOUNTING_GEN dependency
- depends on HAVE_VIRT_CPU_ACCOUNTING_GEN
- select NO_HZ_COMMON
- select RCU_NOCB_CPU
- select VIRT_CPU_ACCOUNTING_GEN
- select IRQ_WORK
- select CPU_ISOLATION
- help
- Adaptively try to shutdown the tick whenever possible, even when
- the CPU is running tasks. Typically this requires running a single
- task on the CPU. Chances for running tickless are maximized when
- the task mostly runs in userspace and has few kernel activity.
- You need to fill up the nohz_full boot parameter with the
- desired range of dynticks CPUs.
- This is implemented at the expense of some overhead in user <-> kernel
- transitions: syscalls, exceptions and interrupts. Even when it's
- dynamically off.
- Say N.
- endchoice
- config CONTEXT_TRACKING
- bool
- config CONTEXT_TRACKING_FORCE
- bool "Force context tracking"
- depends on CONTEXT_TRACKING
- default y if !NO_HZ_FULL
- help
- The major pre-requirement for full dynticks to work is to
- support the context tracking subsystem. But there are also
- other dependencies to provide in order to make the full
- dynticks working.
- This option stands for testing when an arch implements the
- context tracking backend but doesn't yet fullfill all the
- requirements to make the full dynticks feature working.
- Without the full dynticks, there is no way to test the support
- for context tracking and the subsystems that rely on it: RCU
- userspace extended quiescent state and tickless cputime
- accounting. This option copes with the absence of the full
- dynticks subsystem by forcing the context tracking on all
- CPUs in the system.
- Say Y only if you're working on the development of an
- architecture backend for the context tracking.
- Say N otherwise, this option brings an overhead that you
- don't want in production.
- config NO_HZ
- bool "Old Idle dynticks config"
- depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
- help
- This is the old config entry that enables dynticks idle.
- We keep it around for a little while to enforce backward
- compatibility with older config files.
- config HIGH_RES_TIMERS
- bool "High Resolution Timer Support"
- depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
- select TICK_ONESHOT
- help
- This option enables high resolution timer support. If your
- hardware is not capable then this option only increases
- the size of the kernel image.
- endmenu
- endif
|