48235 Commits

Author SHA1 Message Date
Pawel Dziepak
b7d404c2df scheduler: Add ThreadData::{GetPriority, IsIdle, IsRealTime}() 2014-01-16 23:26:09 +01:00
Pawel Dziepak
093c220267 scheduler: Improve latencies 2014-01-16 23:26:09 +01:00
Pawel Dziepak
7f212f45c3 scheduler: Update used time when thread yields or sleeps 2014-01-16 23:26:09 +01:00
Pawel Dziepak
082d3c1015 scheduler: Increase thread penalty at fork 2014-01-09 03:50:54 +01:00
Pawel Dziepak
a2634874ed scheduler: Estimate the load thread is able to produce
Previous implementation based on the actual load of each core and share
each thread has in that load turned up to be very problematic when
balancing load on very heavily loaded systems (i.e. more threads
consuming all available CPU time than there is logical CPUs).

The new approach is to estimate how much load would a thread produce
if it had all CPU time only for itself. Summing such load estimations
of each thread assigned to a given core we get a rank that contains
much more information than just simple actual core load.
2014-01-09 03:50:54 +01:00
Pawel Dziepak
772331c7cd scheduler: Introduce strong and weak priority penalties 2014-01-08 07:16:19 +01:00
Pawel Dziepak
d36098e043 scheduler: Keep track of the number of the ready threads 2014-01-08 05:05:25 +01:00
Pawel Dziepak
9c465cc83b scheduler: Improve recognition of CPU bound threads 2014-01-08 05:05:25 +01:00
Pawel Dziepak
c2a02dee65 kernel: Relax cpu_ent::interrupt_time locking
The value isn't accessed by the other CPUs and all writes and reads are
done with interrupts disabled.
2014-01-07 02:12:39 +01:00
Pawel Dziepak
c37c2aa45f scheduler: Improve should_rebalance 2014-01-07 01:11:42 +01:00
Pawel Dziepak
4ca31ac964 kernel: Fix ABA problem in try_acquire_read_spinlock() 2014-01-06 21:03:42 +01:00
Pawel Dziepak
bae6d7196a scheduler: Fix SchedulerModeLocker 2014-01-06 09:08:53 +01:00
Pawel Dziepak
a5f45afa6c scheduler: Remove unnecessary check against disabled CPU 2014-01-06 09:08:53 +01:00
Pawel Dziepak
8cf8e53774 kernel/x86: Inline atomic functions and memory barriers 2014-01-06 09:08:53 +01:00
Pawel Dziepak
8235bbc996 scheduler: Improve thread creation performance 2014-01-06 01:22:53 +01:00
Pawel Dziepak
cb66faef24 scheduler: Work around GCC2 limitations in function inlining
GCC2 won't inline a function if it is used before its definition.
2014-01-06 01:22:53 +01:00
Pawel Dziepak
9e99bf6085 scheduler: SCHEDULER_EXIT_FUNCTION() is not needed 2014-01-03 20:15:13 +01:00
Pawel Dziepak
81e04d7b97 kernel: Remove cpu_info::load
This field forces kernel to track each CPU load all the time. It is not
a problem with the current scheduler on a multicore systems, but on
single core machnies or with any other future scheduler this field may
become just an unnecessary burden. It isn't difficult for an application
to compute CPU load by itself when it needs it.
2014-01-03 19:44:57 +01:00
Pawel Dziepak
e4ea637227 scheduler: Disable load tracking when not needed 2014-01-03 19:44:56 +01:00
Pawel Dziepak
db1ddabfd0 scheduler: Thread can not stay on CPU if it has been disabled 2013-12-31 04:49:45 +01:00
Pawel Dziepak
135bb9c959 kernel: Do not attempt to interrupt a thread that is not waiting 2013-12-31 03:53:56 +01:00
Pawel Dziepak
2d52abbd5d scheduler: Inherit penalty and core from creator thread 2013-12-31 03:53:55 +01:00
Pawel Dziepak
7c92dffeef scheduler: Fix order of the includes
Thanks Jérôme!
2013-12-31 03:53:55 +01:00
Pawel Dziepak
265927509d scheduler: Protect per CPU run queue with its own lock 2013-12-31 03:53:55 +01:00
Pawel Dziepak
1524fbf742 scheduler: Fix divide error in _RequestPerformanceLevel 2013-12-30 06:10:14 +01:00
Pawel Dziepak
046af755d0 x86: Fix stack corruption in cache topology detection 2013-12-30 06:10:14 +01:00
Pawel Dziepak
8aa1539bb0 scheduler: Strengthen CoreEntry::GetLoad() assertion 2013-12-30 06:10:14 +01:00
Pawel Dziepak
15a7f2046a kernel: Return CPU load in cpu_info 2013-12-29 22:47:06 +01:00
Pawel Dziepak
ba4cf03951 apps: Pulse: Initialize per CPU fields properly 2013-12-29 22:47:06 +01:00
Pawel Dziepak
c69bd82c31 apps: ProcessController: Initialize per CPU fields properly 2013-12-29 22:47:05 +01:00
Pawel Dziepak
e46f284adc kernel/util: MinMaxHeap: Fix unused variable warnings 2013-12-29 22:47:05 +01:00
Pawel Dziepak
56c0f467b0 scheduler: Fix unused variable warnings 2013-12-29 22:47:05 +01:00
Pawel Dziepak
a47974dd06 scheduler: Use heap to determine highest priority thread 2013-12-29 19:24:01 +01:00
Pawel Dziepak
484e5c737f scheduler: profiler: Compare types larger than int properly 2013-12-29 19:19:21 +01:00
Pawel Dziepak
ef8e55a1d0 scheduler: Use single ended heap for CPU heap 2013-12-28 21:47:35 +01:00
Pawel Dziepak
712f37e19e scheduler: profiler: Use nanosecond as a main time unit 2013-12-28 21:03:43 +01:00
Pawel Dziepak
ca9137de37 scheduler: Profile RunQueue implementation 2013-12-28 20:46:22 +01:00
Pawel Dziepak
4c25fcab38 scheduler: Fix double release of run queue lock 2013-12-28 20:11:30 +01:00
Pawel Dziepak
f68a486001 scheduler: Ignore time used by the profiler implementation 2013-12-28 18:55:39 +01:00
Pawel Dziepak
65d28952ae scheduler: Make sure RunQueueLink::{fPrevious, fNext} are valid 2013-12-26 22:07:26 +01:00
Pawel Dziepak
335c60552c scheduler: Remove CPUEntry::IncreaseActiveTime() 2013-12-26 19:56:50 +01:00
Pawel Dziepak
9a6868d565 x86: Fix build with kernel debugging disabled 2013-12-26 19:55:33 +01:00
Pawel Dziepak
96dcc73b39 scheduler: Add scheduler profiler
A bit hackish implementation of a profiler for the scheduler.
SCHEDULER_ENTER_FUNCTION at the begining of each function aren't nice and
usage of __PRETTY_FUNCTION__ isn't any better (both gcc and clang support
it though), but it was quick to implement and doesn't lose information
on inlined functions. It's just a tool, not an integral part of the kernal
anyway.
2013-12-26 19:40:50 +01:00
Pawel Dziepak
ebe5420f84 scheduler: No need for gQuantumLengths to be global 2013-12-26 19:40:50 +01:00
Pawel Dziepak
cf4984f645 scheduler: Use precomputed time slice lengths 2013-12-23 22:49:12 +01:00
Pawel Dziepak
ede552ab25 scheduler: Keep thread effective priority cached 2013-12-23 22:06:33 +01:00
Pawel Dziepak
b24ea642d7 scheduler: Encapsulate ThreadData fields 2013-12-23 21:32:21 +01:00
Pawel Dziepak
a08b40d408 scheduler: Encapsulate CPUEntry fields 2013-12-23 20:15:16 +01:00
Pawel Dziepak
e1e7235c60 scheduler: Encapsulate CoreEntry fields 2013-12-23 18:27:10 +01:00
Pawel Dziepak
3309bf33c7 kernel/util: Make MinMaxHeap::Peek*() const 2013-12-23 03:52:13 +01:00