| Commit message (Collapse) | Author | Age |
|
|
|
|
|
|
| |
Used to adjust position of heap node after
the key of the node was decreased
(= made more important). Cannot be used if
key was increased (= made less important).
|
|
|
|
| |
Stick get_release() to the rest of the bunch.
|
| |
|
|
|
|
| |
The flag was racy anyway and could not be used safely.
|
|
|
|
| |
Pump stuff from the TRACE() buffer to printk() on demand.
|
|
|
|
|
|
| |
Those functions are pretty huge, and used in a couple of plugins.
This should save a lot of space, make debugging with objdump much easier,
and maybe it even has some I$ benefit.
|
| |
|
|
|
|
| |
Factor out ftdev support from overhead tracing.
|
|
|
|
| |
Removes a compile warning on sparc64.
|
| |
|
|
|
|
|
| |
Let user space set which CPU should handle releases. It is up
to plugins to make use of this information.
|
|
|
|
|
| |
A release master is a CPU that takes all timer interrupts for
release of a given rt_domain_t. By default off.
|
|
|
|
| |
this removes a blatant case of copy&paste reuse
|
|
|
|
|
| |
This establishes the architectures dependent bits for hrtimer_start_on()
on x86-32.
|
|
|
|
|
| |
This depends on the ability to send the special 'pull_timers' IPI
even with IRQs disabled.
|
|\ |
|
| |\ |
|
| | |
| | |
| | |
| | | |
No plugin uses it anymore.
|
| | | |
|
| | |
| | |
| | |
| | |
| | | |
Tell Linux how much time each RT task consumed.
This fixes the behavior of CPU timers and tools like top.
|
| | |
| | |
| | |
| | | |
It won't compile with missing prototypes.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Don't multiplex one timer among all release heaps.
The hrtimer subsystem can handle many timers and is
heavily optimize; make use of this fact.
This also greatly simplifies the actual callback, which
should help to bring down release overheads.
This also saves memory as we do not need to maintain a separate
heap of (release) heaps.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This fixes a bunch of bugs:
- a memory leak (some heap nodes were never reclaimed)
- a locking rules violation (memory allocation can wake up kswapd,
which causes a circular locking dependency between the release queue lock
and the run queue locks
Also, allocating memory in a hot path was never particularly clever.
This patch pre-allocates memory at task-creation time, but does not change
how the release queue works overall.
|
| | |
| | |
| | |
| | | |
Support for Global Quantum-Driven EDF
|
| |/
|/|
| |
| |
| | |
Other quantum-based plugins also require the present flag. Hence,
move it to the core data structure
|
|/
|
|
|
| |
A simple noop system call to record kernel entry and exit
times.
|
| |
|
|
|
|
| |
Give plugins a chance to set up state and clean up.
|
|
|
|
| |
Let scheduler plugins inquire stagger offsets.
|
| |
|
|
|
|
|
| |
This provides and hooks up a new made-from-scratch sched_trace()
implementation based on Feather-Trace and ftdev.
|
|
|
|
| |
rationale: uniformity
|
|
|
|
| |
This is useful to deny opening per-cpu buffers if a CPU is not online.
|
|
|
|
|
| |
Otherwise required buffers may not be present anymore.
This patch also fixes some minor initialization issues.
|
|
|
|
| |
Much cleaner code now.
|
|
|
|
| |
This will help to redruce code duplication in the long run.
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Since some architectures don't support __udivdi3().
Signed-off-by: Segher Boessenkool <segher@kernel.crashing.org>
Cc: john stultz <johnstul@us.ibm.com>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|/
|
|
|
| |
Each record is exactly 24 bytes (= three 64bit integers) long.
We accept possibly truncated fields in order to save some space.
|
|
|
|
|
| |
This patch fixes some minor issues that inadvertedly crept in during
development. Found in John's review.
|
|
|
|
|
|
|
| |
We already have a heap_node slab in litmus.c. We can reuse it for the
other allocations.
This patch also fixes a misnaming of heap_node_alloc/free.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Instead of having hrtimers for each task, we now have only
one hrtimer per rt_domain. To-be-released tasks are grouped in
mergable heaps and presented as a bunch on each release.
This approach should allow us to reduce the worst-case overhead
at hyperperiod boundaries significantly.
1) less hrtimer overhead
2) less calls to the active plugin
3) only one CPU handles releases at a time
4) (2) & (3) should bring down lock contention significantly
|
| |
|
| |
|
|
|
|
| |
This fixes a copy&paste bug reported by John.
|
|
|
|
| |
we can disable it to improve performance when it is not needed
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This adds the PFAIR plugin. The implementation is based on an earlier version
developed by John Calandrino.
Features:
- supports aligned and staggered quanta
- supports early releasing
- uses mergable heaps to limit overheads
This version still has a couple of limitations:
- no support for sporadic; all tasks are assumed to be periodic
- tasks are limited to a maximum period of 1000 quanta
- overload (especially in the tick) is not handled gracefully
|
| |
|