2019-01-29 01:32:48 +08:00
|
|
|
Scheduler Microbenchmark
|
|
|
|
########################
|
|
|
|
|
|
|
|
This is a scheduler microbenchmark, designed to measure minimum
|
|
|
|
latencies (not scaling performance) of specific low level scheduling
|
|
|
|
primitives independent of overhead from application or API
|
|
|
|
abstractions. It works very simply: a main thread creates a "partner"
|
|
|
|
thread at a higher priority, the partner then sleeps using
|
2018-07-25 04:37:59 +08:00
|
|
|
_pend_curr_irqlock(). From this initial state:
|
2019-01-29 01:32:48 +08:00
|
|
|
|
|
|
|
1. The main thread calls _unpend_first_thread()
|
|
|
|
2. The main thread calls _ready_thread()
|
|
|
|
3. The main thread calls k_yield()
|
|
|
|
(the kernel switches to the partner thread)
|
2018-07-25 04:37:59 +08:00
|
|
|
4. The partner thread then runs and calls _pend_curr_irqlock() again
|
2019-01-29 01:32:48 +08:00
|
|
|
(the kernel switches to the main thread)
|
|
|
|
5. The main thread returns from k_yield()
|
|
|
|
|
|
|
|
It then iterates this many times, reporting timestamp latencies
|
|
|
|
between each numbered step and for the whole cycle, and a running
|
|
|
|
average for all cycles run.
|