Lines Matching full:and

9 back and forth trying to integrate high-resolution and high-precision
10 features into the existing timer framework, and after testing various
14 to solve this'), and spent a considerable effort trying to integrate
18 - the forced handling of low-resolution and high-resolution timers in
19 the same way leads to a lot of compromises, macro magic and #ifdef
20 mess. The timers.c code is very "tightly coded" around jiffies and
21 32-bitness assumptions, and has been honed and micro-optimized for a
23 for many years - and thus even small extensions to it easily break
25 code is very good and tight code, there's zero problems with it in its
45 error conditions in various I/O paths, such as networking and block
46 I/O. The vast majority of those timers never expire and are rarely
50 the granularity and precision tradeoffs of the timer wheel, and
56 should thus be as cheap and unintrusive as possible.
59 utilize nanosleep, posix-timers and itimer interfaces. Also, in-kernel
60 users like drivers and subsystems which require precise timed events
66 clock capabilities, and patches for that exist and are maturing quickly.
67 The increasing demand for realtime and multimedia applications along
69 separate the "timeout" and "precise timer" subsystems.
73 resolution and low precision use cases - once the precision-sensitive
74 APIs are separated from the timer wheel and are migrated over to
90 another basic requirement was the immediate enqueueing and ordering of
92 such as radix trees and hashes, we chose the red black tree as the basic
93 data structure. Rbtrees are available as a library in the kernel and are
94 used in various performance-critical areas of e.g. memory management and
100 high-resolution clocks, where we need separate pending and expired
108 settimeofday and NTP, all the timers (!) had to be dequeued, the
109 time-changing code had to fix them up one by one, and all of them had to
110 be enqueued again. The time-ordered enqueueing and the storage of the
111 expiry time in absolute time units removes all this complex and poorly
116 The locking and per-CPU behavior of hrtimers was mostly taken from the
117 existing timer wheel code, as it is mature and well suited. Sharing code
119 hrtimer functions now have clearer behavior and clearer names - such as
120 hrtimer_try_to_cancel() and hrtimer_cancel() [which are roughly
121 equivalent to timer_delete() and timer_delete_sync()] - so there's no direct
122 1:1 mapping between them on the algorithmic level, and thus no real
127 (Originally, the kernel-internal representation of ktime_t values and
128 operations was implemented via macros and inline functions, and could be
129 switched between a "hybrid union" type and a plain "scalar" 64bit
143 hrtimers - testing and verification
147 the hrtimer implementation details in praxis, and we also ran the posix
158 The conversion of nanosleep and posix-timers enabled the unification of
159 nanosleep and clock_nanosleep.
171 code got a healthy amount of testing and use in practice.