| Commit message (Collapse) | Author | Age |
| |
|
|
|
|
|
|
|
|
| |
Patched using Namhoon's implementation of reservation for MC^2 to
support global multiprocessor scheduling.
Patched compiler-gcc5 to support gcc v5 compiler.
Bug fixed regarding user input big cpu id number causing kernel crash.
|
|
|
|
|
| |
Don't set a release timer for jobs that are tardy and already
released.
|
|
|
|
|
|
| |
Don't forget to ask for a scheduler update when a reservation is
replenished but enters state ACTIVE_IDLE and there's nothing else
going on that triggers the scheduler by chance.
|
|
|
|
|
|
| |
Keep track of the current slot and major cycle explicitly to avoid
ambiguity when the budget charging is delayed into the next major
cycle due to a late interrupt or other sources of delay.
|
|
|
|
|
| |
Checking state->scheduled is not accurate when bandwidth inheritance
is applied.
|
|
|
|
|
|
|
| |
The P-RES plugin is currently not compatible with the per-thread
budget enforcement logic, which can trigger assertion failures. For
now, let's simply disable per-thread timeslice enforcement. (P-RES's
reservations are a much better mechanism anyway.)
|
|
|
|
|
|
| |
The kernel codepath calling into pres_admit_task() is holding some
lock unrelated to LITMUS^RT. As a result, we need to pass GFP_ATOMIC,
not just GFP_KERNEL, to kzalloc().
|
|
|
|
| |
This can be a useful stat for userspace.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There's a rare condition under which the current call to hrtimer_start()
in pres_update_timer() may result in deadlock.
pres_update_timer() // holds runqueue lock and state->lock
-> hrtimer_start()
-> raise_softirq_irqoff()
-> wakeup_softirqd()
-> wake_up_process()
-> acquires runqueue lock()
To avoid this, we need to call __hrtimer_start_range_ns() with the
'wakeup' flag set to zero.
While at it, also drop the state->lock before calling into hrtimer(),
to avoid making the scheduler critical section longer than necessary.
|
|
|
|
|
|
| |
This makes it a lot easier to write generic code for thread arrival /
thread departure in plugins with multiple types of reservation
clients.
|
|
|
|
|
|
| |
Make sure we don't accidentally bleed past the current reservation
scheduling slot (due to jitter) by determining the remaining budget
precisely when replenishing the reservation budget.
|
|
|
|
|
|
| |
Accidentally setting up the timer on the wrong CPU when a thread
resumes is problematic can lead (potentially) to deadlock and to
missed scheduling events.
|
|
|
|
|
| |
Instead of counting how much budget has been consumed, determine
budget based on actual time slots.
|
| |
|
|
|
|
|
|
| |
A simple partitioned scheduler that provides a reservation environment
on each core, based on the generic reservations code. Hierarchical
scheduling is not supported in this version.
|
| |
|
| |
|
|
|
|
|
|
|
| |
Instead of calling complete_job() directly, the default implementation
of wait_for_release_at() should invoke the plugin-provided
complete_job() method to support plugins that happen to override
complete_job(), but not wait_for_release_at().
|
|
|
|
|
|
|
|
|
|
| |
Without a proper release time, the job will be considered "lagging
behind" for quite a while, which breaks the period enforcement. This
bug manifested only in the absence of a synchronous release (which set
a proper release time).
This patch simply sets the beginning of the next quantum as the
release time of the first job of a newly added task.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
If !CONFIG_SCHED_TASK_TRACE, but CONFIG_SCHED_LITMUS_TRACEPOINT, then
we still need to define the tracepoint structures.
This patch should be integrated with the earlier sched_task_trace.c
patches during one of the next major rebasing efforts.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch adds the core of LITMUS^RT:
- library functionality (heaps, rt_domain, prioritization, etc.)
- budget enforcement logic
- job management
- system call backends
- virtual devices (control page, etc.)
- scheduler plugin API (and dummy plugin)
This code compiles, but is not yet integrated with the rest of Linux.
|
|
|
|
|
|
|
| |
This patch integrates LITMUS^RT's sched_trace_XXX() macros with
Linux's notion of tracepoints. This is useful to visualize schedules
in kernel shark and similar tools. Historically, LITMUS^RT's
sched_trace predates Linux's tracepoint infrastructure.
|
|
|
|
|
|
| |
This patch introduces the sched_trace infrastructure, which in
principle allows tracing the generated schedule. However, this patch
does not yet integrate the callbacks with the kernel.
|
|
|
|
|
| |
This patch exports the interrupt counter to userspace via the control
page.
|
|
|
|
| |
Remove dummy implementation of is_realtime() in trace.c.
|
|
|
|
| |
This patch adds the infrastructure for the TRACE() debug macro.
|
|
|
|
|
| |
This patch adds the main infrastructure for tracing overheads in
LITMUS^RT. It does not yet introduce any tracepoints into the kernel.
|
|
|
|
|
| |
This patch adds the ftdev device driver, which is used to export
samples collected with Feather-Trace to userspace.
|
|
|
|
|
| |
This patch adds the x86-specific implementation of Feather-Trace
triggers that works by rewriting jump instructions.
|
|
|
|
|
| |
This patch adds the simple fallback implementation and creates dummy
hooks in the x86 and ARM Kconfig files.
|
|
Hookup litmus/ with kernel and add extra version.
|