Pawel Dziepak
c08ed2db65
scheduler: Try to keep thread on the same logical CPU
...
Some SMT implementations (e.g. recent AMD microarchitectures) have
separate L1d cache for each SMT thread (which AMD decides to call "cores").
This means that we shouldn't move threads to another logical processor too
often even if it belongs to the same core. We aren't very strict about
this as it would complicate load balancing, but we try to reduce unnecessary
migrations.
2013-12-20 03:36:01 +01:00
Pawel Dziepak
ad6b9a1df8
scheduler: Use sequential locks instead of atomic 64 bit access
2013-12-20 02:18:44 +01:00
Pawel Dziepak
b258298c70
kernel: Protect cpu_ent::active_time with sequential lock
...
atomic_{get, set}64() are problematic on architectures without 64 bit
compare and swap.
Also, using sequential lock instead of atomic access ensures that
any reads from cpu_ent::active_time won't require any writes to shared
memory.
2013-12-20 01:31:32 +01:00
Pawel Dziepak
6639514437
x86[_64]: Support assigning MSI IRQs to arbitrary CPU
2013-12-20 01:07:08 +01:00
Pawel Dziepak
3add52e8ba
kernel: Fix topology node count being decreased twice per node
2013-12-19 20:24:34 +01:00
Pawel Dziepak
e3d001ff02
x86: Implement multicast ICIs
2013-12-19 19:35:44 +01:00
Pawel Dziepak
5a7289d720
scheduler: Fix unassigning threads from core being disabled
2013-12-18 00:03:56 +01:00
Pawel Dziepak
1b06228f13
kernel: Propagate scheduler modes to cpu{freq, idle} modules
2013-12-17 23:26:37 +01:00
Pawel Dziepak
4fcbac58de
kernel: Make get_cpu_topology() return a pointer to const
...
The client code is not supposed to change the topology info.
It would be also nice if cpu_topology_node::children was an array of
pointers to const but that would require several const_casts in the
topology tree generation code so it's probably not worth it.
2013-12-17 22:08:18 +01:00
Pawel Dziepak
735f67481f
x86: Debugger can now use dr3
2013-12-17 04:31:29 +01:00
Pawel Dziepak
a5b070f1fa
x86: Store pointer to the current thread in gs:0
...
Apparently, reading from dr3 is slower than reading from memory
with cache hit.
Also, depending on hypervisor configuration, accessing dr3 may cause
a VM exit (and, at least on kvm, it does), what makes it much slower
than a memory access even when there is a cache miss.
2013-12-17 04:08:51 +01:00
Pawel Dziepak
611376fef7
x86: Let each CPU have its own GDT
2013-12-17 03:57:20 +01:00
Pawel Dziepak
d02aaee17e
kernel, libroot: Add more memory info in system_info
...
system_info now contains all information previously available only
through __get_system_info_etc(B_MEMORY_INFO, ...).
2013-12-16 04:53:46 +01:00
Pawel Dziepak
1bc7045fdf
kernel, libroot: Introduce new API for obtaining system info
2013-12-16 03:58:43 +01:00
Pawel Dziepak
02749e2429
x86/paging: Do not use array placement new
...
Array placement new has implementation defined memory overhead what
makes it pretty useless.
2013-12-11 01:59:31 +01:00
Pawel Dziepak
bcfdf88186
apps, kernel: Remove B_MAX_CPU_COUNT
2013-12-06 21:57:58 +01:00
Pawel Dziepak
3106f832a9
kernel/smp: Fix warning
2013-12-06 19:57:04 +01:00
Pawel Dziepak
e6ea745e81
kernel: Use SMP_MAX_CPUS instead of B_MAX_CPU_COUNT
2013-12-06 19:53:56 +01:00
Pawel Dziepak
3e0e3be760
boot, kernel: Replace MAX_BOOT_CPUS with SMP_MAX_CPUS
2013-12-06 19:43:08 +01:00
Pawel Dziepak
2b04d8ab31
x86/paging: Use CPUSet instead of cpu_mask_t
2013-12-06 03:27:48 +01:00
Pawel Dziepak
e052b3e630
x86/paging: Remove unusued local variable
2013-12-06 03:11:42 +01:00
Pawel Dziepak
5c7f09c4d7
kernel/util: Bitmap: Silence warning
2013-12-06 03:10:50 +01:00
Pawel Dziepak
7629d527c5
kernel: Use CPUSet in ICI code instead of cpu_mask_t
2013-12-06 03:08:39 +01:00
Pawel Dziepak
5f3798921f
x86/paging: Use ROUNUP() to compute the number of initial slots
2013-12-05 23:33:03 +01:00
Pawel Dziepak
730882d615
kernel: Remove RunQueueLink.h
2013-12-05 23:28:42 +01:00
Pawel Dziepak
52b442a687
kernel: smp_cpu_rendezvous(): Use counter instead of bitmap
2013-12-05 23:10:04 +01:00
Pawel Dziepak
d287274dce
scheduler: Code refactoring
2013-12-05 22:47:30 +01:00
Pawel Dziepak
2e3cbcfa8a
x86: Allocate as much initial physical page pools as needed
2013-12-02 03:19:25 +01:00
Pawel Dziepak
255b601750
scheduler: Do not send reschedule ICI when not needed
2013-11-29 21:40:25 +01:00
Pawel Dziepak
2b7ea4cddf
kernel: Remove Thread::next_state
2013-11-29 19:31:10 +01:00
Pawel Dziepak
c19f1e4fbb
scheduler: Add missing check for real time threads
2013-11-29 18:09:56 +01:00
Pawel Dziepak
673f08a995
kernel: Make thread_block_locked() private
2013-11-29 05:30:50 +01:00
Pawel Dziepak
0721899709
scheduler: Allow mode to specify time slice length
2013-11-29 05:11:44 +01:00
Pawel Dziepak
7f8cf14b71
scheduler, kernel/util: Fix style issues
2013-11-29 04:51:38 +01:00
Pawel Dziepak
1987bf19b5
scheduler: Update CPU disabling code to match recent changes
2013-11-29 04:35:50 +01:00
Pawel Dziepak
1ee1d0cbab
kernel, drivers: Fix gcc2 build
2013-11-29 03:47:38 +01:00
Pawel Dziepak
3514fd77f7
kernel: Reduce lock contention when processing ICIs
2013-11-29 03:36:44 +01:00
Pawel Dziepak
e736a456ba
kernel: Forbid implicit casts between spinlock and int32
2013-11-29 03:36:31 +01:00
Pawel Dziepak
7b4befcd47
scheduler: Introduce upper bound on latency
2013-11-29 03:28:28 +01:00
Pawel Dziepak
f2243876df
scheduler: Remove some unnecessary checks against idle threads
2013-11-28 17:53:19 +01:00
Pawel Dziepak
f9ee217ad6
scheduler: Migrate threads less often in power saving mode
2013-11-28 16:33:50 +01:00
Pawel Dziepak
286b341a40
kernel: Merge two occurences of thread resume code
2013-11-28 14:03:57 +01:00
Pawel Dziepak
87115715b4
scheduler: Protect package data with rw_spinlock
2013-11-27 04:57:26 +01:00
Pawel Dziepak
9caf7f4fb9
scheduler: Update estimate_max_scheduling_latency()
2013-11-27 04:15:36 +01:00
Pawel Dziepak
7d7dc357bf
scheduler: Move simple inline functions to scheduler_common.h
2013-11-27 03:50:43 +01:00
Pawel Dziepak
28da7e985f
scheduler: Improve debug commands
2013-11-27 03:36:06 +01:00
Pawel Dziepak
22ae68fa69
scheduler: Simplify thread priority penalties
2013-11-27 03:19:44 +01:00
Pawel Dziepak
b41eaf299a
scheduler_set_thread_priority: Fix null dereference
2013-11-26 03:40:32 +01:00
Pawel Dziepak
35153d1c49
scheduler: Send reschedule ICI after enqueueing the thread
2013-11-26 03:03:41 +01:00
Pawel Dziepak
7db89e8dc3
kernel: Rework cpuidle module
...
* Create new interface for cpuidle modules (similar to the cpufreq
interface)
* Generic cpuidle module is no longer needed
* Fix and update Intel C-State module
2013-11-25 23:50:27 +01:00