zephyr/kernel
Andy Ross 40d12c142d kernel/sched: Add "thread_usage" API for thread runtime cycle monitoring
This is an alternate backend that does what THREAD_RUNTIME_STATS is
doing currently, but with a few advantages:

* Correctly synchronized: you can't race against a running thread
  (potentially on another CPU!) while querying its usage.

* Realtime results: you get the right answer always, up to timer
  precision, even if a thread has been running for a while
  uninterrupted and hasn't updated its total.

* Portable, no need for per-architecture code at all for the simple
  case. (It leverages the USE_SWITCH layer to do this, so won't work
  on older architectures)

* Faster/smaller: minimizes use of 64 bit math; lower overhead in
  thread struct (keeps the scratch "started" time in the CPU struct
  instead).  One 64 bit counter per thread and a 32 bit scratch
  register in the CPU struct.

* Standalone.  It's a core (but optional) scheduler feature, no
  dependence on para-kernel configuration like the tracing
  infrastructure.

* More precise: allows architectures to optionally call a trivial
  zero-argument/no-result cdecl function out of interrupt entry to
  avoid accounting for ISR runtime in thread totals.  No configuration
  needed here, if it's called then you get proper ISR accounting, and
  if not you don't.

For right now, pending unification, it's added side-by-side with the
older API and left as a z_*() internal symbol.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-11-08 21:32:20 -05:00
..
include kernel/sched: Add "thread_usage" API for thread runtime cycle monitoring 2021-11-08 21:32:20 -05:00
paging kernel: mmu: z_backing_store* to k_mem_paging_backing_store* 2021-05-28 11:33:22 -04:00
atomic_c.c kernel: atomic: consistently use named type for atomic pointer values 2021-04-19 15:22:13 +02:00
banner.c kernel: init: move banner handling 2020-11-27 20:08:14 -05:00
cache_handlers.c cache: Rename sys_{dcache,icache}_* to sys_{data,instr}_cache_* 2021-05-08 07:00:33 +02:00
CMakeLists.txt kernel: add support for event objects 2021-10-16 06:27:10 -04:00
compiler_stack_protect.c tests: coverage: exclude the CODE UNREACHABLE of code coverage 2021-01-15 12:42:00 -05:00
condvar.c Tracing: Conditional variable tracing 2021-05-07 22:10:21 -04:00
device.c Revert "device: supported devices visitor API" 2021-09-30 21:37:59 -04:00
errno.c kernel: support using thread local storage for errno 2020-10-24 10:52:00 -07:00
events.c kernel: add support for event objects 2021-10-16 06:27:10 -04:00
fatal.c kernel: fatal: Avoid thread api access when no multithreading 2021-04-29 14:50:35 +02:00
futex.c futex: Avoid unnecessary lock 2021-07-30 20:21:04 -04:00
idle.c pm: Better return type for pm_system_suspend 2021-11-06 10:21:53 -04:00
init.c kernel: init: remove empty lcov exclusion 2021-09-06 08:18:15 -04:00
Kconfig kernel/sched: Add "thread_usage" API for thread runtime cycle monitoring 2021-11-08 21:32:20 -05:00
kheap.c kernel: kheap: make init work with demand paging 2021-08-26 21:16:22 -04:00
mailbox.c comments: minor typo fixes 2021-10-05 07:18:13 -04:00
main_weak.c kernel: extract __weak main() into independent file 2021-08-28 08:48:03 -04:00
mem_domain.c kernel: Make both operands of operators of same essential type category 2021-04-01 05:34:17 -04:00
mem_slab.c toolchain: migrate iterable sections calls to the external API 2021-08-12 17:47:04 -04:00
mempool.c Tracing: Memory Heap tracing 2021-05-07 22:10:21 -04:00
mmu.c mmu: fix virt_region_alloc() unused region free when aligned 2021-10-13 06:24:56 -04:00
msg_q.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
mutex.c kernel: Fix negative mutex lock_count value 2021-07-06 19:19:41 -04:00
pipes.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
poll.c comments: minor typo fixes 2021-10-05 07:18:13 -04:00
queue.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
sched.c kernel/sched: Add "thread_usage" API for thread runtime cycle monitoring 2021-11-08 21:32:20 -05:00
sem.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
smp.c soc: intel_adsp/cavs_v25: Add CPU halt and relaunch APIs 2021-09-03 07:19:34 -04:00
stack.c kernel: remove object tracing 2021-05-07 22:10:21 -04:00
system_work_q.c kernel: remove old work queue implementation 2021-03-03 20:06:00 -05:00
thread.c kernel: thread.c: remove unused THREAD_COOKIE macro. 2021-10-22 18:08:56 -04:00
timeout.c kernel: fix several typos in a comment in timeout.c 2021-07-23 16:06:54 -04:00
timer.c kernel: timer: Call user handler without spinlock 2021-11-08 11:05:49 -05:00
userspace.c kernel: app_smem: allowing pinning memory partitions 2021-08-26 21:16:22 -04:00
userspace_handler.c userspace: update k_object API to support immutable objects 2020-09-02 13:48:13 +02:00
version.c zephyr: replace zephyr integer types with C99 types 2020-06-08 08:23:57 -05:00
work.c kernel: work_q: use flags_get() in work_delayable_busy_get_locked(). 2021-10-16 06:23:46 -04:00
xip.c linker: align __itcm_load_start / __dtcm_data_load_start linker symbols 2021-08-28 08:48:03 -04:00