| Commit message (Collapse) | Author | Age |
|
|
|
| |
This patch applies the same PGM changes made to C-EDF to C-FL.
|
|
|
|
|
|
| |
This patch adds a C-FL scheduler plugin. Original work
by Jeremy Erikson, port to latest Litmus by Namhoon Kim,
and cleanup and commit by Glenn Elliott.
|
|
|
|
|
|
|
| |
This patch boosts the priority of PGM producers while
they are sending tokens instead of boosting the priority
of consumers while they are waiting for tokens. This improves
schedulability analysis.
|
|
|
|
| |
Patch adds PGM priority boosting (and un-boosting) to C-EDF.
|
|
|
|
|
|
|
| |
PGM release/deadline adjustment is ignored if the difference between
an adjusted time and current time falls below a given threshold.
This threshold is supposed to be 200us, but was actually 200ns.
This patch resolves this--threshold is now propertly 200us.
|
|
|
|
|
|
| |
Patch adds tracing of job release/deadline adjustments
of PGM tasks. Tracing is separate from regular job tracing
so that we many observe the magnitude of adjustments/slippage.
|
|
|
|
|
|
| |
Patch enables PGM support by GSN-EDF. GSN-EDF boosts the priority
of a job waiting for inbound tokens. Likewise, boosting is removed
when inbound tokens have been received.
|
|
|
|
|
|
| |
Adds code that adjusts a jobs release and deadline
according to when the job receives the necessary
PGM tokens.
|
|
|
|
| |
Conditional compilation of PGM features. Off by default.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently, PGM token satisfaction is tracked in
userspace. However, Litmus needs to be aware of
when a PGM task is waiting for tokens in order to
avoid unbounded priority inversions. The state of
a PGM task is communicated to Litmus via the
control page.
We should be able to remove control page variables
for PGM if/when token tracking is moved from
userspace into the kernel.
|
|
|
|
|
| |
Patch updates ftrace.h to record a litmus_clock() time stamp
in ftrace records.
|
|
|
|
| |
Don't try to release slab objects that were never allocated.
|
|
|
|
| |
Signed-off-by: Roy Spliet <rspliet@mpi-sws.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch creates a new character device, uncachedev.
Pages of RAM allocated by this device are not cached by
CPUs.
Uses for such pages:
1) Determining *very* pessimistic emperical worst-
case execution times.
2) Compare against performance with caches (quantify
the avg. case benefit).
3) Deterministic memory accesses (access cannot cause a
cache eviction.)
4) Theoretically, increased performance can be achieved
by storing infrequently accessed data in uncache pages.
uncachedev allocates pages with the pgprot_noncached() page
attribute for user applications. Since pages allocated by
uncachedev are not locked in memory by default, applications
with any access level may mmap pages with uncachedev.
Limitations:
1) Uncache pages must be MAP_PRIVATE.
2) Remapping not supported.
Usage (user level):
int size = NR_PAGES*PAGE_SIZE;
int fd = open("/dev/litmus/uncache", O_RDWR);
char *data = mmap(NULL, size, PROT_READ | PROT_WRITE,
MAP_PRIVATE, fd, 0);
<...do stuff...>
munmap(data, size);
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
If a task is released on a CPU that is idle, then it is pointless to
send an IPI to another CPU just to schedule the newly released task.
This patch changes check_for_preemptions() to prefer the local CPU
first if it is idle.
|
| |
|
| |
|
|
|
|
|
| |
Assigning a nice value to LITMUS^RT tasks is meaningless. Bail out
early.
|
|
|
|
|
| |
This patch fixes a BUG_ON() in litmus/preempt.c:33 reported by Felipe
Cerqueira & Manohar Vanga.
|
|
|
|
|
|
| |
The rt scheduling class thinks it's the highest-priority scheduling
class around. It is not in LITMUS^RT. Don't go preempting remote cores
that run SCHED_LITMUS tasks.
|
| |
|
|
|
|
|
|
| |
LITMUS^RT plugins like to know who 'prev' is. pick_next_task() doesn't
expose that info, so we just cache prev in the runqueue. Could robably
be replaced by looking at 'current' instead.
|
|
|
|
| |
To keep track of stack usage and to notify plugin, if necessary.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Global plugins require that the plugin be called even if there
currently is no real-time task executing on the local core.
|
| |
|
|
|
|
|
| |
Below stop_machine tasks, as such tasks never arise during normal
operation.
|
| |
|
| |
|
| |
|
|
|
|
| |
Check whether a suspension is required at end of schedule().
|
|
|
|
| |
This patch adds context switch tracing to the main Linux scheduler.
|
|
|
|
|
|
|
|
|
|
|
| |
Whenever the kernel checks for rt_task() to avoid delaying real-time
tasks, we want it to also not delay LITMUS^RT tasks. Hence, most
calls to rt_task() should be matched by an equivalent call to
is_realtime().
Notably, this affects the implementations of select() and nanosleep(),
which use timer_slack_ns when setting up timers for non-real-time
tasks.
|
|
|
|
|
| |
Allow LITMUS^RT to do some work when a process is created or
terminated.
|
|
|
|
|
| |
Otherwise, the scheduler state machine becomes confused (and goes into
a rescheduling loop) when stop-machine is triggered.
|
|
|
|
| |
Track when a processor is going to schedule "soon".
|
|
|
|
|
|
|
|
| |
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 is required to make litmus/affinity.c compile.
|
|
|
|
|
| |
This table is similar to a file descriptor table. It keeps track of
which "objects" (locks) a real-time task holds a handle to.
|
|
|
|
|
|
|
| |
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.
|