| Commit message (Collapse) | Author | Age |
... | |
|
|
|
|
| |
Don't forget to charge *current* reservation before its (potentially)
only client departs.
|
|
|
|
| |
The comment regarding hrtimer_start() is no longer valid in Linux 4.9.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
P-RES: the partitioned reservation-based scheduler.
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.
P-RES: trace sporadic wake-ups
P-RES: use inferred_sporadic_job_release_at()
porting fix: add missing header for module_init()
porting fix: adopt new hrtimer API in P-RES plugin
P-RES: add fork() support
P-RES: don't return -ESRCH on reservation lookup failure
P-RES: improve task admission
- Deal with the fact that task_cpu() is not yet updated for
currently suspended tasks.
- Provide some feedback via printk().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
PFAIR: fix wrong memset()
PFAIR: don't arm timer for tardy tasks
If the system is overloaded, tasks may be tardy. In that case, do not
arm timers. Rather, add tardy tasks back into the ready queue right
away.
PFAIR: use sched_trace_last_suspension_as_completion()
PFAIR: use inferred_sporadic_job_release_at()
rebase fix: use new hrtimer API in PFAIR plugin
|
|
|
|
|
|
|
|
|
|
| |
C-EDF: fix bad memset()
C-EDF: use sched_trace_last_suspension_as_completion()
C-EDF: use inferred_sporadic_job_release_at()
C-EDF: include np.h
|
|
|
|
|
|
|
|
|
|
|
|
| |
P-FP: fix wrong memset()
P-FP: use sched_trace_last_suspension_as_completion()
P-FP: use inferred_sporadic_job_release_at()
P-FP: include np.h
P-FP: improve debug tracing
|
|
|
|
|
|
|
|
|
|
| |
GSN-EDF: fix wrong memset()
GSN-EDF: use sched_trace_last_suspension_as_completion()
GSN-EDF use inferred_sporadic_job_release_at()
GSN-EDF: include np.h
|
|
|
|
|
|
|
|
|
|
| |
PSN-EDF: fix wrong memset()
PSN-EDF: use sched_trace_last_suspension_as_completion()
PSN-EDF: use inferred_sporadic_job_release_at
PSN-EDF: include np.h
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
Squashed changes:
LITMUS^RT Core: add get_current_budget() system call
Allow userspace to figure out the used-up and remaining budget
of a task.
Adds deadline field to control page and updates it when setting up jobs for release.
Adds control page deadline offset
ftdev: respect O_NONBLOCK flag in ftdev_read()
Don't block if userspace wants to go on doing something else.
Export job release time and job sequence number in ctrl page
Add alternate complete_job() default implementation
Let jobs sleep like regular Linux tasks by suspending and waking them
with a one-shot timer. Plugins can opt into using this implementation
instead of the classic complete_job() implementation (or custom
implementations).
Fix RCU locking in sys_get_rt_task_param()
sys_get_rt_task_param() is rarely used and apparently attracted some
bitrot.
Free before setting NULL to prevent memory leak
Add hrtimer_start_on() support
This patch replaces the previous implementation of hrtimer_start_on() by
now using smp_call_function_single_async() to arm hrtimers on remote
CPUs.
Expose LITMUS^RT system calls via control page ioctl()
Rationale: make LITMUS^RT ops available in a way that does not create
merge conflicts each time we rebase LITMUS^RT on top of a new kernel
version. This also helps with portability to different architectures,
as we no longer need to patch each architecture's syscall table.
Pick non-zero syscall ID start range
To avoid interfering with Linux's magic reserved IOCTL numbers
Don't preempt before time check in sleep_until_next_release()
Avoid preempting jobs that are about to go to sleep soon anyway.
LITMUS^RT proc: fix wrong memset()
TRACE(): add TRACE_WARN_ON() helper
Useful to replace BUG_ON() and WARN_ON() with a non-fatal
TRACE()-based equivalent.
Add void* plugin_state pointer to task_struct
LITMUS^RT: split task admission into two functions
Plugin interface: add fork_task() callback
LITMUS^RT: Enable plugins to permit RT tasks to fork
one-shot complete_job(): set completed flag
This could race with a SIGSTOP or some other forced suspension, but
we'll let plugins handle this, should they actually care.
FP: add list-based ready queue
LITMUS^RT core: add should_wait_for_stack() callback
Allow plugins to give up when waiting for a stack to become available.
LITMUS^RT core: add next_became_invalid() callback
LITMUS^RT core: add post-migration validation callback
LITMUS^RT core: be more careful when pull-migrating tasks
Close more race windows and give plugins a chance to validate
tasks after they have been migrated.
Add KConfig options for timer latency warnings
Add reservation creation API to plugin interface & syscalls
LITMUS^RT syscall: expose sys_reservation_create() via ioctl()
Add reservation configuration types to rt_param.h
Add basic generic reservation-based scheduling infrastructure
Switch to aligned quanta by default.
For first-time users, aligned quanta is likely what's expected.
LITMUS^RT core: keep track of time of last suspension
This information is needed to insert ST_COMPLETION records for
sporadic tasks.
add fields for clock_nanosleep() support
Need to communicate the intended wake-up time to the plugin wake-up handler.
LITMUS^RT core: add generic handler for sporadic job arrivals
In particular, check if a job arrival is triggered from a
clock_nanosleep() call.
add litmus->task_change_params() callback to plugin interface
Will be used by adaptive C-EDF.
Call litmus->task_change_params() from sys_set_rt_task_param()
Move trace point definition to litmus/litmus.c
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.
LITMUS^RT scheduling class: mark enqueued task as present
Remove unistd_*.h
rebase fix: update to new hrtimer API
The new API is actually nicer and cleaner.
rebase fix: call lockdep_unpin_lock(&rq->lock, cookie)
The LITMUS^RT scheduling class should also do the LOCKDEP dance.
LITMUS^RT core: break out non-preemptive flag defs
Not every file including litmus.h needs to know this.
LITMUS^RT core: don't include debug_trace.h in litmus.h
Including debug_trace.h introduces the TRACE() macro, which causes
symbol clashes in some (rather obscure) drivers.
LITMUS^RT core: add litmus_preemption_in_progress flags
Used to communicate that a preemption is in progress. Set by the
scheduler; read by the plugins.
LITMUS^RT core: revise is_current_running() macro
|
|
|
|
|
|
|
| |
Make it a bit more obvious what these counters are used for and how.
Question for future work: can we return to using only a single
per-core counter?
|
|
|
|
|
|
|
| |
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.
sched_trace: record exec_time in ST_COMPLETION records
sched_trace: add sched_trace_last_suspension_as_completion()
New tracepoint for tracing the completion of sporadic jobs.
|
|
|
|
|
| |
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.
Conflicts:
kernel/printk.c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch adds the main infrastructure for tracing overheads in
LITMUS^RT. It does not yet introduce any tracepoints into the kernel.
Add new overhead tracing event IDs
XCALL_{START,END} -- cross-CPU function calls
SEND_XCALL_{START,END} -- cross-CPU function call latency
SCHED_TIMER_{START,END} -- any additional, plugin-specific scheduling timer
TIMER_LATENCY -- latency of plugin-specific timer
Feather-Trace: Add macros for message-passing timestamps
Add timestamp tracing macros that reverse on which cores the
timestamps are recorded. This intended to reduce tracing contention if
some cores receive a lot of messages.
These macros are useful for plugins based on message-passing such as
the (non-mainline) G-EDF-MP.
Feather-Trace: convert timestamps to atomic_t - patch by Namhoon Kim (UNC)
|
|
|
|
|
|
|
| |
This patch adds the ftdev device driver, which is used to export
samples collected with Feather-Trace to userspace.
Feather-Trace: convert device driver to atomic_t - patch by Namhoon Kim (UNC)
|
|
|
|
|
| |
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.
Feather-Buffer: convert to atomic_t
Feather-Trace: remove custom atomic ops - patch by Namhoon Kim (UNC).
Feather-Trace: switch to correct portable atomics header - thanks Andrea Bastoni
|
|
Hookup litmus/ with kernel and add extra version.
|