aboutsummaryrefslogtreecommitdiffstats
path: root/include
Commit message (Collapse)AuthorAge
* Cleanup priority tracking for budget enforcement.wip-gpusync-mergeGlenn Elliott2014-03-18
|
* Make R2DGLP use sbinheap.Glenn Elliott2014-03-14
| | | | | | This patch updates the R2DGLP implementation to use the sbinheap data structure in cases where the max heap size is known.
* More API cleanup for sbinheap.Glenn Elliott2014-03-14
|
* C-EDF: Use sbinheap to track to top-m prio tasks.Glenn Elliott2014-03-13
| | | | | This patch updates C-EDF to use sbinheap instead of binheap to track the m-highest priority released jobs.
* Make API match binheap when using sbinheap_node_tGlenn Elliott2014-03-13
|
* Add sbinheap. API compatible with binheap.Glenn Elliott2014-03-13
| | | | | | | | | | | | 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.
* Make comparators take const operands.Glenn Elliott2014-03-13
| | | | | This patch updates various parts of litmus that utilize binheap and bheaps to use const operands.
* Make bheap's compare func use const ptrs.Glenn Elliott2014-03-13
| | | | | | This patch changes bheaps compare function pointer to take const parameters. Compare functions should never modify the contents of their operands.
* Optimize binheap imlp.Glenn Elliott2014-03-13
| | | | This patch makes slight optimizations to binheap.
* Use wait-q instead of arrays for delayed wake ups.Glenn Elliott2014-03-07
|
* Add mb() to recursive spinlock.Glenn Elliott2014-03-07
| | | | Add mb() to recursive spinlock on the already-held code path.
* fpmath.h: Use normal division outside of kernel.Glenn Elliott2014-03-04
| | | | | | | | 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.
* Cleanup sync release.Glenn Elliott2014-03-03
| | | | | | 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().
* Fix compil. bug when nested locking is disabledGlenn Elliott2014-03-03
| | | | | This patch fixes a compilation bug that occurs when nested locking is disabled.
* Support new NV GPU driver 331.44Glenn Elliott2014-03-03
|
* Rename IKGLP R2DGLP.Glenn Elliott2014-03-03
| | | | | | | | 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.
* GPUSync integration into C-EDF.Glenn Elliott2014-03-03
| | | | | | | | | | | | | | | 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
* Add nvidia tasklet and workqueue tracingGlenn Elliott2014-03-03
| | | | | This patch adds calls to trace tasklet/workqueue releases, begin-execution, and end-execution events.
* Add backlog info to Litmus kshark task completeGlenn Elliott2014-03-03
| | | | | Adds job backlog information to Litmus's litmus_task_completion kernel shark trace event.
* Add priority change events to litmus kshark traceGlenn Elliott2014-03-03
| | | | | Adds Litmus kernel shark trace event to record changes in task scheduling priority.
* Add I/O blocking info to kshark tracingGlenn Elliott2014-03-03
| | | | | | Extends Litmus's litmus_task_block kernel shark tracing event to include information about blocking for I/O (versus blocking for a Litmus lock).
* Update/cleanup lockdep to support nested locksGlenn Elliott2014-03-03
| | | | | | | | | 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.
* Minor: Add task period-related macros.Glenn Elliott2014-03-03
| | | | | Add macros for period comparisons. Useful for implementing rate-monotonic schedulers.
* Support recursive ready queue locks.Glenn Elliott2014-03-03
| | | | | | | 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.
* Fix compilation bug when GPUs and klmirqd are usedGlenn Elliott2014-03-03
| | | | | A few definitions were missing or misplaced. This patch puts them in the right places.
* cleanup: minor formatting issues.Glenn Elliott2014-03-03
|
* Auxiliary- and klmirqd-aware priority comparisons.Glenn Elliott2014-03-03
| | | | | | | | | 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).
* Misc. integration fixes to litmus.cGlenn Elliott2014-03-03
| | | | | | | | 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
* Add gpusync syscalls to arch syscall tables.Glenn Elliott2014-03-03
| | | | | Earlier patches forgot to update the arch-specific syscall tables. That is done here.
* Add more robust budget tracking/enforcement.Glenn Elliott2014-03-03
| | | | | | | | 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.
* Add auxiliary task support.Glenn Elliott2014-03-03
| | | | | | | | | | 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.
* Add klmirqd interrupt handling (w/ GPU support)Glenn Elliott2014-03-03
| | | | | | | | | | This patch adds klmirqd, which can be used to implement real-time threaded interrupt handling and workqueue handling. Patch includes added hooks into Linux's interrrupt/tasklet/workqueue implementations. This patch also includes interrupt handling and work queue handling for GPU tasklets and work_structs.
* Add GPU affinity tracking.Glenn Elliott2014-03-03
| | | | | | Adds GPU affinity tracking/prediction routines. Tracking uses a process-chart method whereby observations over two standard deviations below or above the average are discarded.
* Add core nvidia GPU ownership components.Glenn Elliott2014-03-03
| | | | | | | Adds two major components to GPU management (for NVIDIA GPUs): (1) Routines to extract device ID from NVIDIA tasklet private data. (2) Routines for tracking ownership/assignment of tasks to GPUs.
* Add fdso handles for fifo, prioq, kfmlp, and ikglpGlenn Elliott2014-03-03
| | | | | Add the fdso identifiers needed for userspace to create instances of the fifo, prioq, kfmlp, and ikglp semaphores.
* Add ikglp.Glenn Elliott2014-03-03
| | | | | | Adds an implementation of the ikglp. Supports both affinity and nesting of other locks within the ikglp (the ikglp itself must be an outer-most lock).
* Add kfmlp.Glenn Elliott2014-03-03
| | | | | Adds an implementation of the kfmlp. Supports affinity, but not nesting.
* Add k-exclusion affinity observer infra.Glenn Elliott2014-03-03
| | | | | | Adds interfaces for k-exclusion affinity observers. Observers are created in the same manner as locks (via FDSO operations).
* Add nest- and dgl-supporting FIFO and PRIOQ locks.Glenn Elliott2014-03-03
| | | | | This patch adds a FIFO and PRIOQ mutex. These locks support nesting and DGLs.
* Update core locking components.Glenn Elliott2014-03-03
| | | | | | | Extends the core parts of locking protocols in Litmus. * Adds dynamic group lock interface (internal and sys calls). * Adds helper functions for waking tasks. * Adds tracing for these new features.
* Extend sched_plugin API for GPUSync.Glenn Elliott2014-03-03
| | | | | | | | Patch adds new interfaces to the sched_plugin struct/API. New interfaces expose task prioritization and inheritance routines of a scheduler to external components. For example, a single locking protocol implementation can support both FIFO and EDF prioritization via this API ("litmus->compare(a, b)").
* NEW: Recurisve spinlocks.Glenn Elliott2014-03-03
| | | | | | | | | | | | Add implementation of recursive spinlocks. Allows the same CPU to take, and retake, the same spinlock. The recursive spinlock still counts the number of times it's been taken, so every lock() must still be matched with an unlock(). Although ugly, recursive spinlocks make nested priority inheritance propagation (and esp. nested 'un-'inheritance under bandwidth inheritance) much easier to implement.
* binheap: Add binheap_for_each().Glenn Elliott2014-03-03
| | | | | | | | Add method to apply a function to every node in a binary heap. Beware that the function is recursive, so the function should only be called when the heap is known to be limited in size. Otherwise, there is a danger of running out of stack space.
* bheap: Add bheap_for_each()Glenn Elliott2014-03-03
| | | | | | | Extend bheap to apply a generic function to all nodes in a bheap. Beware that the function is recursive, so this should only be called in cases where the bheap is known to be limited in size. Otherwise, the stack could get overrun.
* sched_plgn: Add fn. for reporting CPU/cluster mapsGlenn Elliott2014-02-24
| | | | | | This patch adds the plugin interface "get_domain_proc_info()". Plugins use this function to report their cpu/clustering configuration to the user via /proc/litmus/domains and /proc/litmus/cpus.
* /proc/litmus: Export info. on CPU <-> clusterGlenn Elliott2014-02-24
| | | | | | | | | | | | | | | | This patch adds a framework by which plugins can export information about CPU <-> cluster (aka scheduling domain) per cluster. /proc/litmus/domains/<domain#>: This file contains a CPU mask describing the CPUs scheduled/managed by that domain. Files are named by index. For example, the first scheduling domain would be '0'. /proc/litmus/cpus/<cpus#>: This file contains a domain mask describing which domains manage this CPU. Normally, only one bit will be set in this mask, but overlapping clusters can also be expressed by setting multiple bits.
* Remove dont_requeue flagBjoern Brandenburg2014-01-13
| | | | | | The flag was a hack that never really worked. It shortened the race window, but didn't close it. With the new sporadic release support, it should now be superfluous.
* Reimplement sporadic release supportBjoern Brandenburg2014-01-13
| | | | | | | The way the synchronous release code used to set up sporadic releases is racy. This patch changes the implementation to postpone the fiddling with the ->release parameter until prepare_for_next_period(), which is called with the appropriate plugin-specific locks held.
* Force LITMUS^RT tasks to become regular Linux tasks before exitingBjoern Brandenburg2014-01-13
| | | | | | This reduces the number of ways in which a real-time task can exit to one (via sched_setscheduler), which makes it easier to avoid nasty corner cases.
* Add task_cleanup() to scheduler plugin interfaceBjoern Brandenburg2014-01-13
|