| Commit message (Collapse) | Author | Age |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Instead of tie-breaking by PID (which is a static
priority tie-break), we can tie-break by other
job-level-unique parameters. This is desirable
because tasks are equaly affected by tardiness
since static priority tie-breaks cause tasks
with greater PID values to experience the most
tardiness.
There are four tie-break methods:
1) Lateness. If two jobs, J_{1,i} and J_{2,j} of
tasks T_1 and T_2, respectively, have equal
deadlines, we favor the job of the task that
had the worst lateness for jobs J_{1,i-1} and
J_{2,j-1}.
Note: Unlike tardiness, lateness may be less than
zero. This occurs when a job finishes before its
deadline.
2) Normalized Lateness. The same as #1, except
lateness is first normalized by each task's
relative deadline. This prevents tasks with short
relative deadlines and small execution requirements
from always losing tie-breaks.
3) Hash. The job tuple (PID, Job#) is used to
generate a hash. Hash values are then compared.
A job has ~50% chance of winning a tie-break
with respect to another job.
Note: Emperical testing shows that some jobs
can have +/- ~1.5% advantage in tie-breaks.
Linux's built-in hash function is not totally
a uniform hash.
4) PIDs. PID-based tie-break used in prior
versions of Litmus.
Conflicts:
litmus/edf_common.c
|
|
|
|
|
|
| |
Restructured the EDF task comparison code to improve readability.
Recoded chained logical expression embedded in return statement
into a series of if/else blocks.
|
|
|
|
|
|
|
|
|
|
|
|
| |
Added support for arbitrary deadlines.
Constraint: Relative deadline must be >= exec cost.
Use: Set relative deadline in rt_task::rdeadline. Set value to 0
to default to implicit deadlines.
Limitations: PFAIR not supported by this patch. PFAIR updated to
reject tasks that do not have implicit deadlines.
|
|
|
|
|
|
|
|
|
| |
By default, even private writable pages are mapped
with the RW bit disabled in the PTE. This causes a
"minor" page fault when the page is first written
to. To avoid this, make sure that vm_inert_page()
uses the proper page protection bits and mark the
VMA as VM_IO to keep the rest of the VM code out.
|
|
|
|
|
| |
Page faults should not happen here. Scream if they do anyway. This is
useful when extending the control page.
|
|
|
|
|
|
| |
vm_insert_page() is the simpler and preferred interface for remapping
individual pages and includes additional error checks. It suffices for
our purposes, so let's use it instead.
|
|
|
|
|
|
| |
The existing admission test failed to test for too-low
priorities. Use the common macro to accept only valid
priorities.
|
|
|
|
|
|
| |
Add a comment to explain how priorities are
interpreted, and provide some useful macros for
userspace.
|
|
|
|
|
| |
Move declaration of 'cpu' out of #ifdef block, it's also needed for
CONFIG_LITMUS_LOCKING.
|
|
|
|
| |
Prior to that it was only used internally for DPCP
|
|
|
|
|
|
|
|
|
|
| |
dissertation (branch bbb-diss) to current
version of litmus
This is needed for ongoing projects
I took the unchanged code but removed some leftovers
of OMLP which is not implemented
|
|
|
|
|
|
|
|
|
|
| |
This patch imports recent upstream changes in Feather-Trace that reduce
register pressure around Feather-Trace triggers.
References: Commits 00713b8 and 225d734 in Feather-Trace.
https://github.com/brandenburg/feather-trace/commit/00713b878636867ce07291c588509b38fa5bf152
https://github.com/brandenburg/feather-trace/commit/225d7348a08682cd87f72b127142bdfd6c0c7890
|
|
|
|
|
|
| |
This patch replicates the fix in commit
f141d730e91283a9bb5cfcb134fcead55d5da0c6
(which applies to GSN-EDF).
|
|
|
|
|
|
|
|
|
|
| |
This patch changes how preemptions of jobs without
budget work. Instead of requeuing them, they are now
only added if they are not subject to budget enforcement
or if they have non-zero budget. This allows us to process
job completions that race with preemptions.
This appears to fix a BUG in budget.c:65 reported by Giovani Gracioli.
|
|
|
|
|
|
|
|
|
| |
litmus.h is accumulating too many things. Since
we already have budget.h, let's stick all budget-related
inline functions there as well.
This patch is merely cosmetic; it does not change
how budget enforcement works.
|
|
|
|
|
|
|
| |
An efficient binary heap implementation coded in the
style of Linux's list. This binary heap should be able
to replace any partially sorted priority queue based
upon Linux's list.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Enable kernel-style events (tracepoint) for Litmus. Litmus events
trace the same functions as the sched_trace_XXX(), but can be
enabled independently.
So, why another tracing infrastructure then:
- Litmus tracepoints can be recorded and analyzed together (single
time reference) with all other kernel tracing events (e.g.,
sched:sched_switch, etc.). It's easier to correlate the effects
of kernel events on litmus tasks.
- It enables a quick way to visualize and process schedule traces
using trace-cmd utility and kernelshark visualizer.
Kernelshark lacks unit-trace's schedule-correctness checks, but
it enables a fast view of schedule traces and it has several
filtering options (for all kernel events, not only Litmus').
|
| |
|
|
|
|
|
|
|
| |
Increment a processor-local counter whenever an interrupt is handled.
This allows Feather-Trace to include a (truncated) counter and a flag
to report interference from interrupts. This could be used to filter
samples that were disturbed by interrupts.
|
|
|
|
|
|
| |
User a 32-bit word for all non-preemptive section flags.
Set the "please yield soon" flag atomically when
accessing it on remotely-scheduled tasks.
|
|
|
|
| |
The macro lock conflicts with locking protocols...
|
| |
|
|
|
|
|
| |
This is useful for measuring locking-related overheads
that are partially recorded in userspace.
|
|
|
|
|
| |
This allows us to splice in information into logs from events
that were recorded in userspace.
|
|
|
|
|
| |
Instead of doing the hackisch 'write commands to device' thing,
let's just use a real ioctl() interface.
|
| |
|
| |
|
|
|
|
| |
MAX_ORDER is 11, but this is about number of records, not number of pages.
|
|
|
|
|
| |
Pfair expects to look at processors in order of increasing index.
Without this patch, Pfair could deadlock in certain situations.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch fixes two crash or hang bugs related to suspensions
in Pfair.
1) When a job was not present at the end of its last subtask, then
its linked_on field was not cleared. This confused the scheduler
when it later resumed. Fix: clear the field.
2) Just testing for linked_on == NO_CPU is insufficient in the wake_up path
to determine whether a task should be added to the ready queue. If
the task remained linked and then was "preempted" at a later
quantum boundary, then it already is in the ready queue and nothing
is required. Fix: encode need to requeue in task_rt(t)->flags.
|
|
|
|
|
|
| |
Preemption state tracing is only useful when debugging preemption-
and IPI-related races. Since it creates a lot of clutter in the logs,
this patch turns it off unless explicitly requested.
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
This patch also converts Pfair to implement early releasing such that
no timer wheel is required anymore. This removes the need for a
maximum period restriction.
|
|
|
|
|
| |
Merged in release master support for Pfair. Some merge
conflicts had to be resolved.
|
|
|
|
|
|
|
|
|
|
| |
Needed to update C-EDF to handle release master. Also
updated get_nearest_available_cpu() to take NO_CPU instead
of -1 to indicate that there is no release master. While
NO_CPU is 0xffffffff (-1 in two's complement), we still
translate this value to -1 in case NO_CPU changes.
Signed-off-by: Andrea Bastoni <bastoni@cs.unc.edu>
|
|
|
|
| |
As with GSN-EDF, do not insert release master into CPU heap.
|
|
|
|
| |
We can give up a processor under partitioning, too.
|
|
|
|
|
| |
Original comment said that this feature wasn't supported,
though it has been since around October 2010.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Given a choice between several available CPUs (unlinked) on which
to schedule a task, let the scheduler select the CPU closest to
where that task was previously scheduled. Hopefully, this will
reduce cache migration penalties.
Notes: SCHED_CPU_AFFINITY is dependent upon x86 (only x86 is
supported at this time). Also PFair/PD^2 does not make use of
this feature.
Signed-off-by: Andrea Bastoni <bastoni@cs.unc.edu>
|
|
|
|
|
|
| |
Whether to send IPIs and enqueue tasks on remote runqueues is
plugin-specific. The recent ttwu_queue() mechanism (by calling
ttwu_queue_remote()) interferes with Litmus plugin decisions.
|
|
|
|
|
|
| |
From 2.6.39 the "0xee" vector number that we used for pull_timers
low-level management is is use by invalidate_tlb_X interrupts.
Move the pull_timers vector below the max size of invalidate_tlb.
|
|
|
|
|
|
| |
* Update prototypes for switched_to(), prio_changed(), select_task_rq().
* Fix missing pid field in printk output.
* Synchronize syscall numbers for arm and x86.
|
|\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Some notes:
* Litmus^RT scheduling class is the topmost scheduling class
(above stop_sched_class).
* scheduler_ipi() function (e.g., in smp_reschedule_interrupt())
may increase IPI latencies.
* Added path into schedule() to quickly re-evaluate scheduling
decision without becoming preemptive again. This used to be
a standard path before the removal of BKL.
Conflicts:
Makefile
arch/arm/kernel/calls.S
arch/arm/kernel/smp.c
arch/x86/include/asm/unistd_32.h
arch/x86/kernel/smp.c
arch/x86/kernel/syscall_table_32.S
include/linux/hrtimer.h
kernel/printk.c
kernel/sched.c
kernel/sched_fair.c
|
| | |
|
| |\
| | |
| | |
| | |
| | |
| | |
| | | |
git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb:
sparc,kgdbts: fix compile regression with kgdb test suite
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Commit 63ab25ebbc (kgdbts: unify/generalize gdb breakpoint adjustment)
introduced a compile regression on sparc.
kgdbts.c: In function 'check_and_rewind_pc':
kgdbts.c:307: error: implicit declaration of function 'instruction_pointer_set'
Simply add the correct macro definition for instruction pointer on the
Sparc architecture.
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Acked-by: Mike Frysinger <vapier@gentoo.org>
Acked-by: David S. Miller <davem@davemloft.net>
|
| |\ \
| | | |
| | | |
| | | |
| | | | |
* git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6:
CIFS: Fix wrong length in cifs_iovec_read
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Signed-off-by: Pavel Shilovsky <piastryyy@gmail.com>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
|