| Commit message (Collapse) | Author | Age |
| |
|
| |
|
|
|
|
|
|
| |
This patch updates the R2DGLP implementation to use
the sbinheap data structure in cases where the max
heap size is known.
|
| |
|
|
|
|
|
| |
This patch updates C-EDF to use sbinheap instead of
binheap to track the m-highest priority released jobs.
|
|
|
|
|
| |
This patch updated C-EDF to use the more efficient sbinheap
data structure (instead of binheap) to track CPU priorities.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch introduces the 'sbinheap' binary heap data structure.
Litmus's binheap data structure is inefficient when we can put
a reasonable upperbound on maximum heap size (ex. When max size
is equal to NR_CPUS). When we can put an upperbound on heap size,
then we may statically allocate (or at least kmalloc needed memory)
for the heap at compile/initialization-time. With this contiguous
buffer, we can do away with left/right/parent pointers through
standard binary-tree indexing. This also speeds up heap insert/delete
operations.
|
|
|
|
|
| |
This patch updates various parts of litmus that
utilize binheap and bheaps to use const operands.
|
|
|
|
|
|
| |
This patch changes bheaps compare function pointer
to take const parameters. Compare functions should never
modify the contents of their operands.
|
|
|
|
| |
This patch makes slight optimizations to binheap.
|
| |
|
|
|
|
|
|
| |
This patch moves the task state transition to TASK_RUNNING
for task wakup to the plugin, when the ready queue lock
has been acquired.
|
|
|
|
|
|
|
| |
Under nested priority-ordered locking protocols with dynamic group locks,
it is possible that priority inheritance can trigger the inheriting task
to acquire a resource. Thus, flush any triggered wakeups prior to suspending
for a lock.
|
| |
|
|
|
|
| |
Add mb() to recursive spinlock on the already-held code path.
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
Division in fpmath.h is implemented using kernel-only
functions. This causes compilation errors when fpmath.h
is used from user code. This patch modifies fpmath.h to
use standard division (i.e., the '/' operator) when fpmath.h
is included in non-kernel (i.e., userspace) code.
|
|
|
|
|
|
|
| |
This patch fixes two bugs introduced during rebase.
1) Double-free of per-task rt data on exit.
2) Failure to set up /proc/litmus/cpus and /litmus/proc/domains
on successful plugin activation.
|
|
|
|
|
|
| |
This patch fixes a bug where NP tasks can be dropped
by mistake by the real-time scheduler. Affects C-EDF
and G-EDF.
|
|
|
|
|
|
| |
This patch cleans up the sync-release code used by
GPUSync. The updated code leverage's Litmus's
new per-plugin wait_for_release_at().
|
| |
|
|
|
|
|
| |
This patch fixes a compilation bug that occurs
when nested locking is disabled.
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
The I-KGLP was a pre-publish name for the R^2DGLP locking protocol
developed by B. Ward et al. ("Replica-Request Priority Donation:
A Real-Time Progress Mechanism for Global Locking Protocols"
presented at RTCSA 2012). This patch renames ikglp-named identifiers
to r2dglp-named identifiers.
|
| |
|
|
|
|
|
| |
Formatting changes to make cedf_task_new() follow
the structure of cedf_task_new() in mainline Litmus.
|
|
|
|
|
|
| |
pfair does not support any budget tracking/enforcement
methods. This patch makes pfair reject any tasks that
request budget tracking/enforcement.
|
|
|
|
|
|
| |
This patch updates GSN-EDF to support basic budget tracking
implemented by the budget state machine instead of having
GSN-EDF implement its own.
|
|
|
|
|
|
|
|
| |
This patch updates PSN-EDF to support basic budget tracking
implemented by the budget state machine instead of having
PSN-EDF implement its own tracking.
(Also fixes some bad formatting in sched_pfp.c.)
|
|
|
|
|
|
| |
This patch updates P-FP to support basic budget tracking
implemented by the budget state machine. (As opposed to P-FP
implementing its own budget tracking.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The changes to C-EDF to support GPUSync are numerous and
interdependent. Unfortunatly, things are a bit too complex
(given time constraints) to break GPUSync integration
into C-EDF into smaller parts. This patch is just a dump
of prior development in one big chunk. Changes include:
1) Support for three different budget tracking/enforcement policies
2) Nested priority inheritance
3) Support for klmirqd
4) Support for auxiliary tasks
5) Several locking protocols: FIFO, PRIOQ, IKGLP, and KFMLP
6) GPU-to-CPU-cluster mapping
|
|
|
|
|
| |
This patch adds calls to trace tasklet/workqueue
releases, begin-execution, and end-execution events.
|
|
|
|
|
| |
Adds job backlog information to Litmus's litmus_task_completion
kernel shark trace event.
|
|
|
|
|
| |
Adds Litmus kernel shark trace event to record changes in
task scheduling priority.
|
|
|
|
|
|
| |
Extends Litmus's litmus_task_block kernel shark
tracing event to include information about blocking
for I/O (versus blocking for a Litmus lock).
|
|
|
|
|
|
|
|
|
| |
This patch modifies lockdep to support nested locking
protocols--specifically allow keys allocated in dynamic
memory. We need to allow spinlocks to be acquired in a
nested fashion without triggering complaints from
lockdep. This is needed to support chained/transitive
priority inheritance.
|
|
|
|
|
| |
Add macros for period comparisons. Useful for
implementing rate-monotonic schedulers.
|
|
|
|
|
|
|
| |
This patch allows (at compile-time) for schedulers to use
recurive locks on the ready queue. Recursive locks are useful
for implementing complicated budget enforcement policies where
locking protocol priority inheritance is concerned.
|
|
|
|
|
|
|
|
|
|
| |
Export symbols for the following functions so that they
may be called from modules:
* is_nvidia_func
* nv_schedule_work
* nv_tasklet_schedule
* nv_tasklet_hi_schedule
* nv_tasklet_hi_schedule_first
|
|
|
|
|
| |
A few definitions were missing or misplaced. This patch
puts them in the right places.
|
| |
|
|
|
|
|
|
|
|
|
| |
This patch forces auxiliary and klmirqd tasks to run with
a priority statically below any normal real-time tasks
when the auxiliary or klmirqd thread is not inheriting
a priority. This allows auxiliary and klmirqd threads to
still do work in the background when no real-time threads
are waiting on them to finish work (better throughput).
|
|
|
|
|
|
|
|
| |
This patch updates litmus.c to integrate prior GPUSync
patches. Fixes include:
1) klmirqd-aware plugin switching
2) sched_trace event injection from user space
3) proper (re-)initialization of GPUSync data structures in task_struct
|
|
|
|
|
| |
Earlier patches forgot to update the arch-specific syscall
tables. That is done here.
|
|
|
|
|
|
|
|
| |
This patch adds more feature-rich budget tracking/enforcement
features. Budget tracking is now controlled by a state machine.
Each task can elect to use a different budget policy. Hooks
are in place to implement bandwidth inheritance (BWI) and
virtually exclusive resources.
|
|
|
|
| |
Clean up formatting in locking.c
|
|
|
|
|
|
|
|
|
|
| |
Auxiliary tasks helper threads to real-time tasks. These helper
tasks may inherit the priority of the real-time task(s) in the
process only if that real-time task is blocked/suspended (and it
is not suspending because the job has completed). Otherwise,
these threads are scheduled with a default priority greater than
normal Linux threads, but lower than any other real-time task, including
klmirqd threads.
|