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
Pawel Dziepak
5a69ffc01e
scheduler: Remove RunQueue::PeekSecondMaximum()
2013-12-23 03:51:02 +01:00
Pawel Dziepak
60e198f2cb
scheduler: Encapsulate PackageEntry fields
...
Apart from the refactoring this commit takes the opportunity and removes
unnecessary read locks when choosing a package and a core from idle lists.
The data structures are accessed in a thread safe way and it does not really
matter whether the obtained data becomes outdated just when we release the
lock or during our search for the appropriate package/core.
2013-12-23 00:56:44 +01:00