kernel/sched: Optimize deadline comparison
Needing to check the current cycle time (which involves a spinlock and register read on most architectures) is wasteful in the scheduler priority predicate, which is a hot path. If we "burn" one bit of precision (and document the rule), we can do the comparison without knowing the current time. 2^31 cycles is still far longer than a live deadline thread in any legitimate realtime app should ever live before being scheduled. Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
This commit is contained in:
parent
912914a915
commit
ef626571b2
2 changed files with 15 additions and 14 deletions
|
@ -718,11 +718,12 @@ __syscall void k_thread_priority_set(k_tid_t thread, int prio);
|
|||
* static priority. Threads at different priorities will be scheduled
|
||||
* according to their static priority.
|
||||
*
|
||||
* @note Deadlines that are negative (i.e. in the past) are still seen
|
||||
* as higher priority than others, even if the thread has "finished"
|
||||
* its work. If you don't want it scheduled anymore, you have to
|
||||
* reset the deadline into the future, block/pend the thread, or
|
||||
* modify its priority with k_thread_priority_set().
|
||||
* @note Deadlines are stored internally using 32 bit unsigned
|
||||
* integers. The number of cycles between the "first" deadline in the
|
||||
* scheduler queue and the "last" deadline must be less than 2^31 (i.e
|
||||
* a signed non-negative quantity). Failure to adhere to this rule
|
||||
* may result in scheduled threads running in an incorrect dealine
|
||||
* order.
|
||||
*
|
||||
* @note Despite the API naming, the scheduler makes no guarantees the
|
||||
* the thread WILL be scheduled within that deadline, nor does it take
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue