| Commit message (Collapse) | Author | Age |
| |
|
|
|
|
|
|
| |
Required for EDF-WM. We should implement precise enforcement
in the core distribution soon anyway (once we know how it
works in EDF-WM).
|
|
|
|
| |
Returns the amount of budget left for a given job.
|
|\
| |
| |
| |
| |
| |
| |
| |
| | |
This version of litmus2010 contains the implementation of three
semi-partitioned scheduling algorithms: EDF-fm, EDF-WM, and NPS-F.
Conflicts:
include/litmus/rt_param.h
litmus/Makefile
|
| |
| |
| |
| |
| | |
The partitioning does seem to create some small budgets,
so let's support. Going smaller than this seems a bit silly.
|
| |
| |
| |
| |
| | |
For now, just hard-code a limit. This is ugly, but RTAS
is only 2 weeks away.
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| | |
This API addition allows the calling code to override
the release master for a given rt_domain_t object. This
is particularly useful if a job is supposed to migrate
to a particular CPU. This need arises for example in semi-
partitioned schedulers.
|
| | |
|
| |
| |
| |
| | |
Avoids name clash---we don't need the types anyway.
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| | |
- Accouting functions added
- Job control functions required by edf-wm algorithm.
|
| |
| |
| |
| |
| |
| | |
This commit adds required task parameters for edf-wm semi-partitioning
algorithm. A task may be assigned to multiple cpus, with each slice on
each cpu having different wcet.
|
|\ \
| | |
| | |
| | |
| | |
| | | |
Conflicts:
include/litmus/rt_param.h
litmus/Makefile
|
| | |
| | |
| | |
| | |
| | |
| | | |
Move parameters specific to EDF-Fm plugin only inside a dedicated data
structure. Use union within rt_task to merge also the other semi-part
plugins.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
- rt_task: for each task, add fraction (num/denom) of execution cost
that should be handled by each processor (for EDF-fm max 2
processors).
- rt_job: add number of jobs already managed by the CPUs (for migrating
tasks this is needed to determine on which CPU the next job should
execute).
|
| |/
| |
| |
| |
| |
| |
| |
| |
| | |
- a bit more general than what exactly needed by EDF-fm
- hopefully we should be able to integrate all the parameters in a
single environment (or at least in a limited one): less changes in
rt_param.h, less changes to the framework, similar implementations,
single kernel (so we can run multiple test without changing the
kernel).
|
| |
| |
| |
| |
| | |
Push npsf_id parameters in rt_param.h inside a union to facilitate
merging with other plugins.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The procfile interface is used to control both the length of the slot
and the safe removal of timers (not yet in the sched_npsf.c code).
Timers must be removed before unloading the plugin (write 0 in the slot
length file).
We use the syscall to add reserves and servers to the plugin. Have a
look at the proper npsf rtspin and rtlaunch in liblitmus2010 to
understand how the syscall works. The last call to the syscall (when
adding the last server) will trigger the start of the npsf-plugin.
|
|/ |
|
|
|
|
|
|
|
|
|
|
|
| |
Feather-Trace rewrites instructions in the kernel's .text segment.
This segment may be write-protected if CONFIG_DEBUG_RODATA is selected.
In this case, fall back to the default flag-based Feather-Trace
implementation. In the future, we could either adopt the ftrace method
of rewriting .text addresses using non-.text mappings or we could
consider replacing Feather-Trace with ftrace altogether.
For now, this patch avoids unexpected runtime errors.
|
|
|
|
|
|
|
|
| |
Introduces CONFIG_RELEASE_MASTER and makes release
master support dependent on the new symbol. This is
useful because dedicated interrupt handling only applies
to "large" multicore platforms. This will allow us to
not implement smp_send_pull_timers() for all platforms.
|
|
|
|
|
|
|
|
|
| |
The idea of the Feather-Trace default implementation is that LITMUS^RT should
work without a specialized Feather-Trace implementation present. This was
actually broken.
Changes litmus/feather_trace.h to only include asm/feather_trace.h if actually
promised by the architecture.
|
|
|
|
|
|
|
|
|
|
| |
NO_ENFORCEMENT - A job may execute beyond its declared execution time.
Jobs notify the kernel that they are complete via liblitmus's
sleep_next_period()
QUANTUM_ENFORCEMENT - The kernel terminates a job if its actual execution
time exceeds the declared execution time.
PRECISE_ENFORCEMENT - Hook declared, but not yet implemented. Plan to
support this policy through hrtimers. Error thrown if specified.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adapt to new schema for spinlock:
(tglx 20091217)
spinlock - the weakest one, which might sleep in RT
raw_spinlock - spinlock which always spins even on RT
arch_spinlock - the hardware level architecture dependent implementation
----
Most probably, all the spinlocks changed by this commit will be true
spinning lock (raw_spinlock) in PreemptRT (so hopefully we'll need few
changes when porting Litmmus to PreemptRT).
There are a couple of spinlock that the kernel still defines as
spinlock_t (therefore no changes reported in this commit) that might cause
us troubles:
- wait_queue_t lock is defined as spinlock_t; it is used in:
* fmlp.c -- sem->wait.lock
* sync.c -- ts_release.wait.lock
- rwlock_t used in fifo implementation in sched_trace.c
* this need probably to be changed to something always spinning in RT
at the expense of increased locking time.
----
This commit also fixes warnings and errors due to the need to include
slab.h when using kmalloc() and friends.
----
This commit does not compile.
|
|
|
|
|
|
| |
Improved C-EDF plugin. C-EDF now supports different cluster sizes (based
on L2 and L3 cache sharing) and supports dynamic changes of cluster size
(this requires reloading the plugin).
|
|
|
|
|
|
|
|
| |
1) High priority task tied to FMLP semaphore in P-EDF scheduling is
incorrectly tracked for tasks acquiring the lock without
contention. (HP is always set to CPU 0 instead of proper CPU.)
2) Race in a print statement from P-EDF's pi_block() causes NULL
pointer dereference.
|
|
|
|
|
|
|
|
| |
Dealing with preemptions across CPUs in the presence of non-preemptive
sections can be tricky and should not be replicated across (event-driven) plugins.
This patch introduces a generic preemption function that handles
non-preemptive sections (hopefully) correctly.
|
|
|
|
|
|
|
|
|
|
|
|
| |
Re-introduce NP sections in the configuration and in litmus.h. Remove the old
np_flag from rt_param.
If CONFIG_NP_SECTION is disabled, then all non-preemptive section checks are
constant expressions which should get removed by the dead code elimination
during optimization.
Instead of re-implementing sys_exit_np(), we simply repurposed sched_yield()
for calling into the scheduler to trigger delayed preemptions.
|
|
|
|
|
|
|
|
|
| |
This device only supports mmap()'ing a single page.
This page is shared RW between the kernel and userspace.
It is inteded to allow near-zero-overhead communication
between the kernel and userspace. It's first use will be a
proper implementation of user-signaled
non-preemptable section support.
|
| |
|
|
|
|
|
| |
- [ported from 2008.3] Add x86_32 architecture dependent code.
- Add the infrastructure for x86_32 - x86_64 integration.
|
|
|
|
|
|
|
| |
- Add syscall on x86_64
- Refactor __NR_sleep_next_period -> __NR_complete_job
for both x86_32 and x86_64
|
|
|
|
|
|
| |
- Binomial heap "heap" names conflicted with priority heap
of cgroup in kernel
- This patch change binomial heap "heap" names in "bheap"
|
| |
|
| |
|
|
|
|
| |
infrastructure
|
| |
|
|
|
|
|
| |
Still to be merged:
- arm_release_timer() with no rq locking
|
|
|
|
|
|
|
|
| |
- fix requesting more than 2^11 pages (MAX_ORDER)
to system allocator
Still to be merged:
- feather-trace generic implementation
|
| |
|
|
Port 2008.3 Core LITMUS^RT infrastructure to Linux 2.6.32
litmus_sched_class implements 4 new methods:
- prio_changed:
void
- switched_to:
void
- get_rr_interval:
return infinity (i.e., 0)
- select_task_rq:
return current cpu
|