Commit Graph

48113 Commits

Author SHA1 Message Date
Pawel Dziepak
26970784cd scheduler: Clean scheduler_common.h
scheduler_common.h is now meant for types, variables and functions used
by both core scheduler code and implementations of scheduler modes.
Functions like switch_thread() and update_thread_times() do not belong
there anymore.
2013-11-25 00:17:42 +01:00
Pawel Dziepak
1e8ed5558d cpufreq: Rank modules and choose the best one 2013-11-25 00:08:13 +01:00
Pawel Dziepak
13a89839fc scheduler: Fix power saving mode and other minor improvements 2013-11-24 23:51:30 +01:00
Pawel Dziepak
f95b6fdfc8 scheudler: Do not include irq load in thread load 2013-11-24 23:18:58 +01:00
Pawel Dziepak
cec16c2dcf spinlock: Fix panic messages
Thanks Jérôme for pointing this out.
2013-11-24 22:54:14 +01:00
Pawel Dziepak
03f7d3d1db kernel: Restore logical processor disabling 2013-11-24 22:51:07 +01:00
Pawel Dziepak
a04b7d9f96 power: Remove old cpufreq interface 2013-11-22 05:30:14 +01:00
Pawel Dziepak
208f76e578 preferences: Remove CPUFrequency
We can't reliably set contemporary processors to an arbitrary frequency.
There are dependencies between cores and thechnologies like Turbo Boost
which may make actual frequency significantly different than the requested.

Moreover, it is the scheduler job to decide how much CPU performance is
needed and user shouldn't interfere with that.
2013-11-22 05:24:44 +01:00
Pawel Dziepak
99a2e56579 drivers: Remove Intel Enhanced SpeedStep driver
In current state this driver is useless anyway. It's not MP safe.
The P-state values stored in hardcoded tables are only for processors
on which we can't use SpeedStep, because of lack of invariant TSC.

Proper driver should get P-states from ACPI, ensure that the CPU offers
invariant TSC and obviouslt be MP safe.
2013-11-22 05:11:03 +01:00
Pawel Dziepak
7c7b9b795b scheduler: Return time stolen by irq and ipi handlers 2013-11-22 04:25:37 +01:00
Pawel Dziepak
1a7eb50254 scheduler: Calculate correct load on SMT processors 2013-11-22 03:20:19 +01:00
Pawel Dziepak
65741c8b56 scheduler: Improve locking 2013-11-22 03:00:08 +01:00
Pawel Dziepak
4ec76fd89d libroot: {g,s}et_scheduler_mode(): Avoid name clash
Thanks Ingo for pointing this out.
2013-11-21 21:51:46 +01:00
Pawel Dziepak
14e36af649 kernel[/util]: Fix debug builds 2013-11-21 03:24:54 +01:00
Pawel Dziepak
024541a4c8 kernel: Improve rw_spinlock implementation
* Add more debug checks
 * Reduce the number of executed instructions that lock the bus.
2013-11-21 02:25:03 +01:00
Pawel Dziepak
6fb61d001a scheduler: Preallocate temporary heaps for debug commands 2013-11-21 00:59:40 +01:00
Pawel Dziepak
308f594e2a kernel, libroot: Make scheduler modes interface public 2013-11-20 23:32:40 +01:00
Pawel Dziepak
cd1e7814a9 scheduler: Reduce scheduler mode lock cache bouncing 2013-11-20 21:49:31 +01:00
Pawel Dziepak
683b9bbf07 scheduler: Improve power saving mode, part 2
Consequences of committing & pushing too quickly...
2013-11-20 21:21:31 +01:00
Pawel Dziepak
ecfd444935 scheduler: Improve power saving mode
* Remove possibility to temporarily disable small task packing.
 * When small task packing target gets overloaded continue packing
   threads on another core, but avoid migrating the already packed
   ones.

Scheduler still tends to needlessly migrate threads to another cores
when under heavier load, but it is now much better than before.
2013-11-20 20:52:11 +01:00
Pawel Dziepak
3eb4224bf6 kernel: Make sure mutex::holder is set to a valid value 2013-11-20 17:53:39 +01:00
Pawel Dziepak
57d5d678f2 x86_64: Fix atomic functions 2013-11-20 17:02:51 +01:00
Pawel Dziepak
c4ac37a35e scheduler: Try to pack IRQs in power saving mode 2013-11-20 12:52:05 +01:00
Pawel Dziepak
9c2e74da04 scheduler: Move mode specific logic to separate files 2013-11-20 09:46:59 +01:00
Pawel Dziepak
e2ff9a2865 scheduler: Rebalance IRQs on overloaded cores 2013-11-18 07:05:35 +01:00
Pawel Dziepak
f14e4567e8 kernel: Use CPU topology to distribute IRQs 2013-11-18 05:37:45 +01:00
Pawel Dziepak
d897a478d7 kernel: Allow reassigning IRQs to logical processors 2013-11-18 04:55:25 +01:00
Pawel Dziepak
955c7edec2 kernel: Measure time spent in interrupt handlers 2013-11-18 01:50:37 +01:00
Pawel Dziepak
6a164daad4 kernel: Track load produced by interrupt handlers 2013-11-18 01:17:44 +01:00
Pawel Dziepak
288a2664a2 scheduler: Remove sSchedulerInternalLock
* pin idle threads to their specific CPUs
 * allow scheduler to implement SMP_MSG_RESCHEDULE handler
 * scheduler_set_thread_priority() reworked
 * at reschedule: enqueue old thread after dequeueing the new one
2013-11-13 05:31:58 +01:00
Pawel Dziepak
72e1b394a4 scheduler: Fix gcc2 build 2013-11-13 00:36:48 +01:00
Pawel Dziepak
5f3a65e578 scheduler: Remove sCorePriorityHeap
sCorePriorityHeap was meant to be a temporary solution anyway. Thread
migration and assignment is now entirely based on core load.
2013-11-13 00:01:02 +01:00
Pawel Dziepak
829f836324 scheduler: Minor cleanup 2013-11-12 04:42:12 +01:00
Pawel Dziepak
8818c942dd scheduler: Add {CPU,Core,Package}Entry constructors 2013-11-12 04:26:32 +01:00
Pawel Dziepak
e1c40769d3 scheduler: Atomically access time and load measurements 2013-11-12 04:23:42 +01:00
Pawel Dziepak
d17b71d6b0 scheduler: Reduce false sharing of per-CPU and per-core data 2013-11-11 21:46:18 +01:00
Pawel Dziepak
a1feba678d kernel/undertaker: Make sure the thread isn't running anymore 2013-11-11 21:04:38 +01:00
Pawel Dziepak
7e1c4534df libroot: Add adaptive mutex implementation 2013-11-08 03:37:30 +01:00
Pawel Dziepak
03fb2d8868 kernel: Remove gSchedulerLock
* Thread::scheduler_lock protects thread state, priority, etc.
 * sThreadCreationLock protects thread creation and removal and list of
   threads in team.
 * Team::signal_lock and Team::time_lock protect list of threads in team
   as well.
 * Scheduler uses its own internal locking.
2013-11-08 02:41:26 +01:00
Pawel Dziepak
72addc62e0 kernel: Introduce Thread::time_lock and Team::time_lock 2013-11-07 22:16:36 +01:00
Pawel Dziepak
3519eb334a kernel: Change Thread::team_lock to rw_spinlock 2013-11-07 04:20:59 +01:00
Pawel Dziepak
defee266db kernel: Add read write spinlock implementation 2013-11-07 04:20:32 +01:00
Pawel Dziepak
20ded5c2eb kernel/posix: Do not use thread_block_locked() 2013-11-07 02:06:42 +01:00
Pawel Dziepak
d3e5752b11 scheduler: Performance mode is actually low latency mode 2013-11-07 01:50:20 +01:00
Pawel Dziepak
83983eaf38 kernel: Remove Thread::alarm 2013-11-07 01:40:02 +01:00
Pawel Dziepak
aa4aca0264 kernel: Protect signal data with Team::signal_lock 2013-11-07 01:32:48 +01:00
Pawel Dziepak
73ad2473e7 Remove remaining unnecessary 'volatile' qualifiers 2013-11-06 00:03:07 +01:00
Pawel Dziepak
d929eb20ba docs: Update atomic_*() functions documentation 2013-11-05 22:54:25 +01:00
Pawel Dziepak
273f2f38cd kernel: Improve spinlock implementation
atomic_or() and atomic_and() are not supported by x86 are need to be
emulated using CAS. Use atomic_get_and_set() and atomic_set() instead.
2013-11-05 22:47:18 +01:00
Pawel Dziepak
077c84eb27 kernel: atomic_*() functions rework
* No need for the atomically changed variables to be declared as
   volatile.
 * Drop support for atomically getting and setting unaligned data.
 * Introduce atomic_get_and_set[64]() which works the same as
   atomic_set[64]() used to. atomic_set[64]() does not return the
   previous value anymore.
2013-11-05 22:32:59 +01:00