| Commit message (Collapse) | Author | Age |
| |
|
| |
|
|
|
|
|
| |
problem was caused by litmus's fixed point numbers handling
negative values in a weird way
|
|\
| |
| |
| | |
edfsc-wip
|
| | |
|
| |
| |
| |
| |
| |
| | |
Previously, sys_util held monotonically increasing values. This
would cause the system to quickly believe it was saturated and
reject all new tasks. It now behaves as expected.
|
|/ |
|
|
|
|
| |
Fixes the problems mentioned in 1624739a, but for g_job_completion()
|
| |
|
|
|
|
|
|
|
|
|
| |
As we should never see one of our job completion functions called
on a task after it goes through edfsc_task_exit(), simplify that
logic to just handle migrations.
Also, hold a reference to the task_struct so that it still exists
when task_deadline_callback() is called.
|
| |
|
|
|
|
|
|
|
|
| |
This fixes the issue where deadlines and releases were not being updated.
As of this commit, multiple real-time tasks can be created, run
simultaneously, be killed, and more tasks can be started and killed
on a multicore system - all without crashing or freezing.
|
|
|
|
|
|
|
| |
1. Don't double-add to cpu heap
2. Correctly update linked_on to NO_CPU before linking container
3. Unlink container before requeuing
4. Don't requeue a container that's already queued
|
|
|
|
|
|
|
|
|
|
| |
The old logic was not clear and made more calls than needed.
This should be functionally equivalent, except that we don't try
to reschedule if we didn't find anything to link.
This also adds a BUG_ON to make sure that we don't simultaneously
queue and link containers (this is an issue as of this commit, but
my next commit will fix that).
|
|
|
|
|
|
| |
spinlocks
No functional changes, just some subtle ordering fixes
|
|
|
|
| |
Before we could end up trying to do a bogus migration in unlink().
|
|
|
|
|
|
| |
Before we would mess up the container-core partitioning. Now we just
trust edfsc_gschedule() to be able to work out the correct state
without trying to guess in edfsc_task_new().
|
| |
|
| |
|
|
|
|
|
|
| |
Adds missing allocations in init and starts fixing some bad
tracking of container->scheduled in g_finish_switch(), plus
some fixes for migrating tasks and background scheduling.
|
|
|
|
| |
scheduled for container domains is now set to null when container is preempted
|
|
|
|
|
|
| |
consolidated container budget tracking
properly excluded fully provisioned containers and their cpus from gedf
gschedule no longer returns non-rt tasks
|
|\
| |
| |
| | |
edfsc-wip
|
| |
| |
| |
| |
| | |
This removes a buggy old case that is no longer required since
the edfsc_admit_task() rewrite.
|
|/
|
|
|
|
|
|
|
|
| |
This happens because we're not properly scheduling containers to their
associated cores and we're not properly keeping track of cpus whose
containers are fully provisioned.
I fixed the logic for that.
Also, I moved around some functions to group them by similar usage and
fixed some minor bugs
|
|\
| |
| |
| | |
edfsc-wip
|
| |
| |
| |
| |
| | |
Correcting the deadline timer to not touch potentially invalid
memory is still TODO.
|
|/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Tasks are no longer unconditionally admitted. Now they suspend until
the next container boundry at which we decide if they should be admitted
before resuming them.
This rewrites edfsc_task_new(), edfsc_admit_task(), and adjusts
container_boundary() to wakeup tasks after making admission
decisions.
container_boundary() and g_job_completion() also contain fixes to
correctly clear container->scheduled upon requeue.
Finally, this rearranges some printk calls, adds some casts, and
removes an unused variable to fix all compiler warnings.
PS: This also removes an unconditional BUG() call that should never
have been committed.
As of this commit, rtspin runs without errors for me. Upon SIGTERM
however, edfsc_task_exit() will corrupt the scheduler state and
panic the system. SIGSTOP can work as a stand-in for now to
demonstrate that the system is still stable.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Fixed a bug in gschedule where if a non-rt task is scheduled when a
container is empty, on reschedule, the scheduler will not check if the
container is still empty before resuming the non-rt task
Fixed a bug in container_boundary where a container's exec_cost is
changed when it should be changed when the container job 'completes' in
g_job_completion. This can cause a container job to get extra or less
budget if it's tardy
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
changed edfsc_cschedule found no fixed task to be next, it will now
return the container instead of null
To explain the other changes, first I must explain the problem.
When a container has no fixed tasks, but still has budget, there is
nothing in litmus that enforces its budget or updates its exec_time in
job_params.
This means we will have to enforce the container budget in
this case ourselves with an enforcement timer. Furthermore, we also have
to update the exec_time ourselves since only actual task have their
exec_time updated automatically by litmus
the new functions are added and gschedule changed to fix the above
problem
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
The schedule functions expect entry->scheduled to be set if the task
is real-time, but edfsc_gschedule() is called before g_finish_switch()
when inserting a new real-time task via edfsc_task_new(). Resolve this
issue by also setting entry->scheduled in edfsc_task_new() if nothing
was scheduled before.
Current issue I'm working through is that entry->scheduled is still
not always being set. This causes NULL to be passed to preempt(),
which should never happen.
|
|
|
|
|
|
|
|
|
|
|
|
| |
-Added some printk statements to better debug why container_boundary
would not execute 10ms after setting scheduler to EDF-sc
-Initialized container exec_cost to 0
We still have unresolved issues. Namely, during container_boundary,
when releasing new container jobs(where my printk statements are), the
containers are shown to have a large, non-zero exec_cost despite the
fact that there are no fixed tasks in the system. Need to check
container_boundary logic.
|
| |
|
|
|
|
| |
container boundary timer and container task completion
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
updated references to parameters in edfsc plugin
|
|
|
|
|
|
| |
worked out scheduling logic
worked out logic for inserting and deleting tasks
TODO: fix updated function names
|
| |
|
|\
| |
| | |
add missing curly braces to error path
|
|/
|
| |
Error with the curly braquets
|
|
|
|
|
| |
To allow userspace to determine when exactly a synchronous release
should occur.
|