| Commit message (Collapse) | Author | Age |
|
|
|
| |
Convenient wrapper for CLOCK_MONOTONIC -> lt_t.
|
| |
|
|
|
|
|
|
|
|
| |
- Decompose read_mapping into two functions: *read_mapping* which reads
CPU mapping data as string from file, and *set_mapping* that actually sets
the cpu_set_t according to the mapping
- Add unit test for setting cpu_set_t to various CPU indexes
|
| |
|
|
|
|
| |
This change should be transparent to clients of the library.
|
| |
|
| |
|
|
|
|
|
| |
With the addition of SCHED_DEADLINE in mainline Linux, we have to
adjust the ID of SCHED_LITMUS.
|
|
|
|
|
|
|
| |
Switch rt_launch to use a more modern way to launch real-time tasks.
This makes rt_launch more flexible, makes it more similar to rtspin,
and also allows to let us get rid of a chunk of old, inflexible code
in liblitmus that wasn't really serving any useful purpose anymore.
|
| |
|
|
|
|
| |
Just add the ID and symbol.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch replaces the algorithm used to compute CPU affinity masks.
The old algorithm was fragile and would break on systems with multiple
levels of shared caches. (As found on some older Intel chips, and as
one would probably find on a system with hyper-threading enabled.) The
bug stems from fact that Linux enumerates consecutive CPUs in a way
that distributes them across the physical system, thereby reducing
contention resources (e.g., cache).
Cluster size no longer needs to be provided now that cluster/CPU
mappings are explicit in /proc/litmus/domains/.
This keeps the following migration functions, but marks them as
deprecated:
- be_migrate_to_cluster()
- cluster_to_first_cpu()
- partition_to_cpu()
Although the deprecated interfaces are supported, the implementations
for these functions call the new be_migrate_to_domain() and
domain_to_first_cpu() functions.
[bbb: resolved several merge conflicts]
|
| |
|
|
|
|
|
|
|
| |
Renames the 'namespace' parameter to litmus_open_lock() forard
declaration in litmus.h to 'name_space'. This allows litmus.h
to be compiled by a C++ compiler. (Note: Using 'extern "C" {}'
does not work as an alternative solution.)
|
|
|
|
|
|
| |
The kernel needs to be able to deal with tasks that do not make
themselves a real-time task, but get configured by some other task
instead.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The sproadic_*() macros have become unwieldy. This patch
replaces those convenience macros for global, clustered,
and partitioned scheduling. A part of this API change
is the explicit use of nanosecond time-values. Prior APIs
have used lt_t (litmus time), which had an implied time
scale of nanoseconds.
/bin apps and test suite also updated to use revised API.
Modifications to the test suite are mostly centered around
using nanoseconds instead of milliseconds.
|
|
|
|
|
| |
Adds init_rt_task_param(). Facilitates setting up default
real-time task attributes that cannot be set by memset(0).
|
|
|
|
|
|
|
|
|
| |
This patch adds cluster scheduling options to
rtspin and rt_launch. The convenience routines
in litmus.h were also updated to facilitate
clustered scheduling. For partitioned scheduling,
just set cluster_size = 1 (default size for rtspin
and rt_launch).
|
|
|
|
|
|
|
|
|
|
|
| |
This patch replaces be_migrate_to() with several
be_migrate_*() APIs to automatically assign CPU affinity
masks from a task's partition (or cluster) assignment.
Routines are release-master-aware such that the release
master (if one exists) will NOT be included in the
task's affinity mask. (Note that release-master
avoidance may be overridden by calling
__be_migrate_thread_to_cluster().)
|
|
|
|
|
|
| |
This is useful for testing locking protocol implementations (not
intended for benchmarking!), and also serves to document how to use
the LITMUS^RT locking API.
|
|
|
|
| |
Useful for correlating test failures to events in traces.
|
|
|
|
| |
This mirrors the option in rtspin.
|
|
|
|
|
|
|
| |
The -f option required manually *also* setting
the -w option. This is no longer required.
While at it, simplify the code by using the /proc interface.
|
|
|
|
|
| |
Make sure the kernel and userspace compilers have the same idea of the
layout of the control page.
|
|
|
|
|
|
| |
Resuming higher-priority tasks should of course preempt lower-priority
tasks. This test case infers if higher-priority tasks are unreasonably
delayed.
|
|
|
|
|
| |
Wrap nanosleep() to make sleeping for a given number of
nanoseconds easier, using the LITMUS^RT time type lt_t.
|
|
|
|
|
| |
Add a wrapper for /proc/litmus/stats to make it easy to query the
number of tasks already waiting for a task set release.
|
|
|
|
| |
For consistency reasons and to document the cpu parameter of the DPCP.
|
|
|
|
|
|
| |
Use the kernel's notion of fixed priorities.
Also, add some clarifying comments to the
task setup wrappers.
|
|
|
|
|
|
| |
PCP was only used for DPCP before
tests: add some basic tests for PCP under P-FP
|
|
|
|
|
|
|
|
|
| |
dissertation (branch bbb-diss)
I took the unchanged code but removed references
to OMLP which was and is not implemented
tests: changed so that they work for P-FP
|
|
|
|
| |
Everything is in one 32-bit word now.
|
|
|
|
| |
we need uint64_t in litmus.h
|
|
|
|
|
| |
The new generic lock layer in LITMUS^RT does away with per-protocol
system calls. Change accordingly.
|
|
|
|
|
| |
The timing functions are quite handy when building benchmark tasks.
Avoid copy&paste reuse by making them available via the library.
|
|
|
|
| |
Move the architecture-dependent code to the arch/ subtree.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The kernel warns against including header files directly. For good
reason: our previous approach (just -I$KERNEL/include) caused all
kinds of files to be included that should have come from /usr/include
instead.
This patch rewrites the Makfile so that the (few) needed headers are
copied into the liblitmus src tree before compiling the library. This
avoids having to specify the kernel include directories with -I, and
also makes it easier to link against liblitmus (external applications
do not need to know where the kernel is).
Finally, this allows us to enable -Werror.
|
|
|
|
|
|
|
|
| |
how their execution budgets should be enforced: NO_ENFORCEMENT,
QUANTUM_ENFORCEMENT, and PRECISE_ENFORCEMENT (unsupported).
NOTE: Users of NO_ENFORCEMENT must call sleep_next_period() at the
end of every job to signal to the kernel that its job is complete.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
This syscall hasn't been around since Fall 2007... The RTCSA'08 paper
details how we are doing it now.
|
| |
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This is the beginning of the LITMUS^RT testsuite.
The main design goals are flexibility and ease of test writing.
To create a new test, simply write a test case in any C file in the
tests/ subdirectory. The buildsystem will find the test and hook it
up with the testrunner.
Have a look at tests/fdso.c and include/tests.h to get an idea for what
tests look like.
Tests can be executed with the 'runtests' tool. Each testcase is executed
in a separate process in order to ensure that tests do not influence
each other.
|
|/
|
|
| |
in C++ code.
|
|
|
|
| |
Layered on top of the LITMUS control page.
|
| |
|
| |
|