aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
...
| * Created edf-wm scheduler skeletonGuruprasad Aphale2010-07-24
| | | | | | | | | | | | Copied PSN-EDF scheduler and created a working scheduler by copying PSN-EDF code. This commit works exactly as PSN-EDF. This has no migrations supported.
| * Accouting and job control functions for edf-wm algorithm.Guruprasad Aphale2010-07-24
| | | | | | | | | | - Accouting functions added - Job control functions required by edf-wm algorithm.
| * Added task parameters for edf-wmGuruprasad Aphale2010-07-24
| | | | | | | | | | | | 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.
* | Merge branch 'wip-edffm' into wip-npsf-mergeAndrea Bastoni2010-09-22
|\ \ | | | | | | | | | | | | | | | Conflicts: include/litmus/rt_param.h litmus/Makefile
| * | Remove EDF-Fm specific parameters from rt_param.hAndrea Bastoni2010-09-22
| | | | | | | | | | | | | | | | | | 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.
| * | [EDF-fm] Remove code uglyness and properly initialize jobnoAndrea Bastoni2010-09-21
| | | | | | | | | | | | | | | | | | | | | - Remove stale comments in the code. - Remove non needed checks and add proper invariants. - Increment per-cpu job number when a task is released (task_new). This removes the need of detecting the 'first' job.
| * | [EDF-fm] Call change_migrat_cpu_if_needed() only for migrating tasksAndrea Bastoni2010-09-21
| | |
| * | [EDF-fm] A block may race with wakeup.Andrea Bastoni2010-09-21
| | | | | | | | | | | | | | | A block event may race with a wakeup event. We need to remove the task from the queue if it has been previously enqueued.
| * | [EDF-fm] Complete reworking of previous implementation of EDF-fmAndrea Bastoni2010-09-21
| | | | | | | | | | | | | | | | | | - New plugin is much simpler and it is based on P-EDF. - requeue() is the only place where an insertion in a ready queue can happen.
| * | [EDF-fm] Add required extensions to rt_task and rt_jobAndrea Bastoni2010-09-20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - 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).
| * | [EDF-fm] Add EDF-fm extensions in rt_taskAndrea Bastoni2010-09-20
| |/ | | | | | | | | | | | | | | | | - 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).
* | Wrap NPS-F specific parameters in rt_param.hAndrea Bastoni2010-09-22
| | | | | | | | | | Push npsf_id parameters in rt_param.h inside a union to facilitate merging with other plugins.
* | [NPS-F] Update various tracing in the plugin and add TODO.Andrea Bastoni2010-09-21
| |
* | [NPSF] Add todo for IPI latencies measure pointsAndrea Bastoni2010-09-21
| |
* | [NPS-F] Add IPI notification for next reserveAndrea Bastoni2010-09-21
| | | | | | | | | | Notify the next reserve in the chain of reserves for logical reserves that span across multiple CPUs.
* | [NPS-F] Add timer-related functionsAndrea Bastoni2010-09-21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add the timer infrastructure (both timer logic and timer setup and migration to CPUs). Timers starts when the last server is added to the system. Time operations are always performed wrt a "virtual" time whose origin is set when the plugin is activated. As the NPSF reserve scheduling is cyclic wrt the slot length, knowing the current time and the virtual time is enough to get the reserve that should currently exectute (this commit adds this logic as well; the only thing to note is that the first timer interrupt should occur on a slot boundary). Reserve switching: we program timers to expire only when a "logical" reserve starts. A logical reserve is the istantiation of a server, and may possibly span multiple CPUs. There will be a timer interrupt only at the beginninig of a logical reserve (i.e., at the beginning of the first "physical" reserve for a multi-CPU logical reserve). Later reserves for the logical reserve will be triggered using IPIs by the scheduler whenever the previous reserve is done.
* | [NPS-F] Add procfile and syscall interfaceAndrea Bastoni2010-09-21
| | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | [NPS-F] Add the basic sched_npsf.c infrastructureAndrea Bastoni2010-09-21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add the basic NPS-F plugin infrastructure. Functions related to reserve switching, timer management, IPI sending are missing. Procfile interface, server-adding syscalls are missing. Compiles, but try to execute this commit only if you feel brave. This infrastructure is the new infrastructure for the NPS-F plugin devised with Bjoern on an "interesting" 12 hours coding session. The messed up commit that first contain this interface is: commit be8677537263ba2ba1d6e66086479fbc3e8ff552 Author: Bjoern B. Brandenburg <bbb@cs.unc.edu> Date: Fri Sep 17 20:53:19 2010 -0400 rewrite scheduling logic and everything
* | [NPSF] Be more verbose in try_to_wake_up() tracingAndrea Bastoni2010-09-21
| |
* | [NPSF] Add required additional fields in shared litmus structures.Andrea Bastoni2010-09-21
|/
* Bugfix: avoid link error in Feather-Trace on x86Bjoern B. Brandenburg2010-07-16
| | | | | | | | | | | | | | | | | | | If no events are defined but Feater-Trace support is enabled, then the current implementation generates a link error because the __event_table sections is absent. > arch/x86/built-in.o: In function `ft_disable_all_events': > (.text+0x242af): undefined reference to `__start___event_table' As a simple work around, we force zero-element array to always be "allocated" in the __event_table section. This ensures that we end up with a zero-byte section if no events are enabled, and does not affect the layout of the section if events are present. > bbb@ludwig:~/dev/litmus2010$ nm vmlinux | grep event_table > ffffffff81950cdc D __event_table_dummy > ffffffff81950cdc A __start___event_table > ffffffff81950cdc A __stop___event_table
* Bugfix: avoid conditional compilation dependent errorAndrea Bastoni2010-07-16
| | | | | | | | | | | | If RELEASE_MASTER is not selected the "info" hrtimer_start_on_info structure in release_heap structure is not visible and trying to access "info" from reinit_release_heap() causes the following error: error: 'struct release_heap' has no member named 'info' info should not be referenced if RELEASE_MASTER is not used. The problem was first reported by Glenn <gelliott@cs.unc.edu>
* Bugfix: change __ARCH_HAS_SEND_PULL_TIMERS in CONFIG_ARCH_HAS_SEND_PULL_TIMERSAndrea Bastoni2010-06-12
| | | | | | | | | Commit "0c527966 Make release master support optional" uses __ARCH_HAS_SEND_PULL_TIMERS instead of CONFIG_ARCH_HAS_SEND_PULL_TIMERS (introduced in commit 0fb33c99) to conditionally compile a pull timer related code in rt_domain.c. This code is disabled and pull-timer's state is no longer properly reset. Therefore, a pulled timer cannot be armed anymore.
* Make litmus_sched_class staticAndrea Bastoni2010-06-10
| | | | | litmus_sched_class wasn't declared static, but it's not used outside sched.c, so change it's signature to static.
* Make platform-specific Feather-Trace depend on !CONFIG_DEBUG_RODATABjoern B. Brandenburg2010-06-01
| | | | | | | | | | | 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.
* Make PFAIR optional to prevent build and runtime failures.Bjoern B. Brandenburg2010-06-01
| | | | | | | | | | | | | | The PFAIR plugin always implicitly assumed !NO_HZ (the schedule is wrong if NO_HZ is enabled) and does not built if hrtimers are absent: > litmus/built-in.o: In function `pfair_activate_plugin': > sched_pfair.c:(.text+0x7f07): undefined reference to `cpu_stagger_offset' > litmus/built-in.o: In function `init_pfair': > sched_pfair.c:(.init.text+0x487): undefined reference to `cpu_stagger_offset' cpu_stagger_offset() is only available if hrtimers are enabled. This patch makes these dependencies explicit.
* Make C-EDF depend on x86 and SYSFSAndrea Bastoni2010-06-01
| | | | | | C-EDF depends on intel_cacheinfo.c (for get_shared_cpu_map()) which is only available on x86 architectures. Furthermore, get_shared_cpu_map() is only available if SYSFS filesystem is present.
* Make smp_send_pull_timers() optional.Bjoern B. Brandenburg2010-06-01
| | | | | There is currently no need to implement this in ARM. So let's make it optional instead.
* Make release master support optionalBjoern B. Brandenburg2010-06-01
| | | | | | | | 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.
* Make compilation of C-EDF optional.Bjoern B. Brandenburg2010-05-30
| | | | | | C-EDF only makes sense on multicore platforms that have shared caches. Make it possible to disable it on other platforms, in particular, on those that do not export get_shared_cpu_map().
* Make __ARCH_HAS_FEATHER_TRACE a proper CONFIG_ variable.Bjoern B. Brandenburg2010-05-30
| | | | | | | | | 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.
* Bugfix: re-insert missing TS_PLUGIN_TICK_END tracing pointAndrea Bastoni2010-05-30
| | | | | Insert PLUGIN_TICK_END tracing point in litmus_tick(). It was lost during the porting of 2008.3 to 2010.1.
* Add support for one single cluster (all cpus) on C-EDFAndrea Bastoni2010-05-30
| | | | | - With the "ALL" cluster size option the behavior of C-EDF is equivalent to G-EDF (one single cluster)
* Added support for choices in budget policy enforcement.Glenn Elliott2010-05-30
| | | | | | | | | | 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.
* Update kfifo and spinlock_t in sched_trace.cAndrea Bastoni2010-05-29
| | | | | | | | | - kfifo needs to be defined and used differently (see include/linux/kfifo.h) - spinlock -> raw_spinlock - include slab.h when using kmalloc and friends This commit compiles and is the logical end of the merge of Litmus and 2.6.34.
* Update sched_class and spinlock_t in litmus.cAndrea Bastoni2010-05-29
| | | | | | | | - get_rr_interval() changed signature - load_balance() and move_one_tak() are no longer needed - spinlock_t -> raw_spinlock_t This commit does not compile.
* Change most LitmusRT spinlock_t in raw_spinlock_tAndrea Bastoni2010-05-29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Merge branch 'master' into wip-merge-2.6.34Andrea Bastoni2010-05-29
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Simple merge between master and 2.6.34 with conflicts resolved. This commit does not compile, the following main problems are still unresolved: - spinlock -> raw_spinlock API changes - kfifo API changes - sched_class API changes Conflicts: Makefile arch/x86/include/asm/hw_irq.h arch/x86/include/asm/unistd_32.h arch/x86/kernel/syscall_table_32.S include/linux/hrtimer.h kernel/sched.c kernel/sched_fair.c
| * Add C-EDF Plugin2010.1Andrea Bastoni2010-05-29
| | | | | | | | | | | | 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).
| * Export shared_cpu_mapAndrea Bastoni2010-05-29
| | | | | | | | | | | | The cpumap of CPUs that share the same cache level is not normally available outside intel_cacheinfo.c. This commit allows to export such map.
| * Synchronize plugin switchingAndrea Bastoni2010-05-29
| | | | | | | | | | | | Make sure the plugin is not used by any CPUs while switching. The CPU performing the switch sends an IPI to all other CPUs forcing them to synchronize on an atomic variable.
| * Measure timer re-arming in the proper locationAndrea Bastoni2010-05-29
| | | | | | | | | | | | hrtimers are properly rearmed during arm_release_timer() and no longer after rescheduling (with the norqlock mechanism of 2008.3). This commit accordingly updates the locations where measures are taken.
| * Bugfix: PSN-EDF should log job_completion eventsAndrea Bastoni2010-05-29
| | | | | | | | | | Log task completions in job_completion() for PSN-EDF. This fixes the problem of missing job-completion events for PSN-EDF.
| * Bugfix: PSN-EDF should only requeue tasks that are not scheduledBjoern B. Brandenburg2010-05-29
| | | | | | | | | | | | | | | | | | Requeue a task that is already scheduled will cause it to be effectively in the runqueue twice since scheduled tasks are conceptually the head of the queue. If a task is still scheduled, then schedule() will do the right thing and do the requeuing if necessary. This fixes crashes reported by Glenn and Andrea.
| * Used miscdevice API for sched_traceBjoern B. Brandenburg2010-05-29
| | | | | | | | | | | | | | | | | | This patch changes sched_trace.c to use the miscdevice API instead of doing all the cdev management ourselves. This remove a chunk of code and we get sysfs / udev integration for free. On systems with default udev rules, this will result in a /dev/litmus/log device being created automatically.
| * Bugfix: make fdso syscalls 64bit cleanBjoern B. Brandenburg2010-05-29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes a bug found by liblitmus's regression test suite. Before: > ** LITMUS^RT test suite. > ** Running tests for LINUX. > ** Testing: don't open FMLP semaphores if FMLP is not supported... > !! TEST FAILURE open_fmlp_sem(fd, 0) -> -16, Success (expected: EBUSY) > at tests/fdso.c:21 (test_fmlp_not_active) > ** Testing: reject invalid object descriptors... ok. > ** Testing: reject invalid object types... > !! TEST FAILURE od_open(0, -1, 0) -> -22, Bad file descriptor (expected: EINVAL) > at tests/fdso.c:51 (test_invalid_obj_type) > ** Testing: reject invalid rt_task pointers... ok. > ** Result: 2 ok, 2 failed. After: > ** LITMUS^RT test suite. > ** Running tests for LINUX. > ** Testing: don't open FMLP semaphores if FMLP is not supported... ok. > ** Testing: reject invalid object descriptors... ok. > ** Testing: reject invalid object types... ok. > ** Testing: reject invalid rt_task pointers... ok. > ** Result: 4 ok, 0 failed.
| * Bugfix: don't inherit od_table across forksBjoern B. Brandenburg2010-05-29
| | | | | | | | | | | | | | | | The od_table is strictly per-thread and should not be inherited across a fork/clone. This caused memory corruption when a task exited, which ultimately could lead to oopses in unrelated code. Bug and testcase initially reported by Glenn.
| * Bugfix: 1) incorrect FMLP high prio task tracking and 2) race in print statementGlenn Elliott2010-05-29
| | | | | | | | | | | | | | | | 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.
| * Use generic preemption function in GSN- and PSN-EDF.Bjoern B. Brandenburg2010-05-29
| | | | | | | | | | This patch updates non-preemptive section support in GSN- and PSN-EDF.
| * Introduce generic NP-section aware preemption functionBjoern B. Brandenburg2010-05-29
| | | | | | | | | | | | | | | | 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.