Commit Graph

5841 Commits

Author SHA1 Message Date
Alexander von Gluck IV
abcbb5d617 arm/paging: Convert to new-style CPU management
* Aka, post-scheduler changes
* Luckily ARM paging code is very simular to x86 paging
2014-02-12 23:54:35 -06:00
Alexander von Gluck IV
35171b073d arm: Miscellaneous build fixes
* Use atomic_get_and_set for return value
* Atomics are no longer volatile
* Add missing arch_cpu_pause stub
* Move arch_cpu_idle to arch_cpu header to match
  other architectures
2014-02-12 23:37:15 -06:00
Adrien Destugues
9af2105d36 Move ZlibDecompressor to libshared
* This will be used to implement compressed http streams
* Remove the custom BDataOutput class, and use BDataIO instead, for
easier integration with existing code.
2014-02-11 12:06:38 +01:00
Jérôme Duval
7c1acc8968 x86_64: align malloc() allocations on 16 bytes.
* added a check in memalign_test.
2014-02-07 18:27:50 +01:00
Pawel Dziepak
1da76fd4cc scheduler: Inherit estimated load, do not inherit assigned core
The initial core assignment has to be done without any knowledge about
the thread behaviour. Moreover, short lived tasks may spent most of their
time executing on that initial core. This patch attempts to improve the
qualiti of that initial decision.
2014-02-06 03:23:28 +01:00
Pawel Dziepak
667b23ddc2 scheduler: Always update core heaps after thread migration
The main purpose of this patch is to eliminate the delay between thread
migration and result of that migration being visible in load statistics.
Such delay, in certain circumstances, may cause some cores to become
overloaded because the scheduler migrates too many threads to them before
the effect of migration becomes apparent.
2014-02-06 03:23:28 +01:00
Pawel Dziepak
230d1fcfea scheduler: Update load of idle cores
In order to keep the scheduler tickless core load is computed and updated
only during various scheduler events (i.e. thread enqueue, reschedule, etc).
The problem it creates is that if a core becomes idle its load may remain
outdated for an extended period of time thus resulting in suboptimal thread
migration decisions.

The solution to this problem is to add a timer each time an idle thread is
scheudled which, after kLoadMeasureInterval, would fire and force load
update.
2014-02-06 03:23:28 +01:00
Pawel Dziepak
771ae065db scheduler: Update priority penalty computation in debug dump 2014-02-06 03:23:28 +01:00
Pawel Dziepak
f116370edd scheduler: Relax penalty cancellation requirements
Priority penalties were made more strict in order to prevent situation
when two or more high priority threads uses up all available CPU time
in such manner that they do not receive a penalty but starve low priority
threads.

However, a significant change to thread priorites has been made since and
now priority of all non real time threads varies in a range from 1 to
static priority minus penalty. This means that the scheduler is able to
prevent thread starvation without any complex penalty policies.
2014-02-03 04:55:16 +01:00
Pawel Dziepak
6155ab7b25 scheduler: Provide more stable core load statistics
Originially, core load was a sum of eastimated loads of all currently
running or ready threads on a given core. Such value is changing very
rapidly preventing the thread migration logic from making any reasonable
decisions.

This patch changes the way core load is computed to make it more stable
thus improving the qualitiy of decisions made by the thread migration logic.
Currently core load is a sum of estimated loads of all threads that have been
ready during last load measurement interval and haven't been migrated or
killed.
2014-02-03 04:55:16 +01:00
Pawel Dziepak
e6cfae450e kernel/x86: Make x2APIC CPU topology detection more future proof
The main reason for this patch is to fix gcc 4.8.2 warning about
hierarchyLevels possibly being used not initialized. Such thing
actually can not happen since all x2APIC CPUs are aware of at least
3 topology levels. However, once more topology levels are introduced
we will have to deal with CPUs that do not report information about all
of them.
2014-02-03 04:55:09 +01:00
Pawel Dziepak
01a479daa9 boot/x86: Fix unused variable warning 2014-01-29 04:11:42 +01:00
Pawel Dziepak
527da4ca8a x86[_64]: Separate bootloader and kernel GDT and IDT logic
From now on bootloader sets up its own minimal valid GDT and IDT. Then
the kernel replaces them with its own tables.
2014-01-28 00:44:02 +01:00
Pawel Dziepak
819824e020 kernel/{x86, vm}: Add more error checks in VM initialization 2014-01-27 05:36:30 +01:00
Pawel Dziepak
931ce674a9 scheduler: Fix core unassignment 2014-01-27 05:36:30 +01:00
Pawel Dziepak
7adce94d45 scheduler: Check team user time timers before entering scheduler
User timers may cause another thread to become ready in which case we would
like this to happen before scheduler_reschedule() chooses next thread to
be executed.
2014-01-27 05:36:30 +01:00
Pawel Dziepak
82bcd89b92 kernel: Add CPUSet::{Clear, Set}BitAtomic() functions 2014-01-24 13:59:58 +01:00
Pawel Dziepak
03451e4cc1 kernel: Fix deadlock with thread sending signal to itself
UserEvent can be fired from scheduler_reschedule() i.e. while holding current
thread scheduler_lock. If the current thread goes sleep and during reschedule
one of its timers sends a signel to it, then scheduler_enqueue_in_run_queue()
attempts to acquire again its scheduler_lock resulting in a deadlock.

There was also a minor issue with both scheduler_reschedule() and
scheduler_enqueue_in_run_queue() acquiring current CPU scheduler mode lock.
2014-01-24 13:59:58 +01:00
Stephan Aßmus
cb3dc4b2cf Uninitialized members CID 1162813 and 1162814 2014-01-22 17:41:51 +01:00
Pawel Dziepak
5d79095e44 scheduler: Do not update load of disabled cores 2014-01-22 03:04:01 +01:00
Pawel Dziepak
d01fa1ffe3 scheduler: Always update core load at thread reenqueue 2014-01-21 03:50:26 +01:00
Alexander von Gluck IV
fd78b6df3f ppc: Modernize atomic.S.
* Stub out atomic_get_and_set. This needs completed.
2014-01-19 23:39:19 -06:00
Alexander von Gluck IV
24f0b1e29e libroot: Drop volatile in syscall atomic functions
* Per 077c84eb27, atomics are no longer volatile.
* Was changed in SupportDefs.h, but no one told libroot
  that it was no-longer volatile.
2014-01-19 22:31:37 -06:00
Alexander von Gluck IV
749a60bf39 ppc: atomic is no longer volatile per 077c84eb27 2014-01-19 22:14:28 -06:00
Alexander von Gluck IV
14919567d1 kernel: Add more architecture code post-scheduler
* Fix incorrect cpu vendor name mapping
* Add additional CPU architectures
* Add additional CPU vendors
* Rework PowerPC arch_system_info passing
  PVR back for cpu model
2014-01-19 21:53:56 -06:00
Pawel Dziepak
59b9b52aaf scheduler: system_time() may be unreliable
On multisocket systems as well as under virtual machines logical CPUs
may use separate TSC. We could attempt to synchronize them what probably
would solve problems on multisocket systems. Unfortunately, when running
under hypervisor there is still a chance that TSC will get out of sync
again (e.g. cpufreq enabled on host when there is no invariant TSC). As
long as we use RDTSC as our main time source the scheduler must accept the
fact that time may go backwards (what isn't really a serious problem).
2014-01-20 03:22:04 +01:00
Pawel Dziepak
73db12ab31 kernel: Align user_thread objects to CACHE_LINE_SIZE 2014-01-20 03:22:04 +01:00
Alexander von Gluck IV
88c54b5485 kernel: Rework ppc (and m68k) atomic functions post-scheduler
* Make atomic function more like current x86
* Remove fake fallback atomic code for ppc as hardware spinlocks exist
2014-01-19 19:33:21 -06:00
Pawel Dziepak
cf87df8ba3 libroot: Fix gcc2 build 2014-01-20 00:54:52 +01:00
Pawel Dziepak
25dcdbc2b5 libroot: Avoid conflicts with legacy CPU and platform enums 2014-01-20 00:32:57 +01:00
Pawel Dziepak
9d80738d95 kernel: Fix NULL dereference in has_permission_to_signal 2014-01-19 19:35:13 +01:00
Ingo Weinhold
8540ec2446 Save previous session's debug syslog during boot
Add boot loader debug menu option "Save syslog from previous session
during boot". If enabled (defaults to true), the previous session's
debug syslog data is copy to a separate buffer and passed to the
kernel, which writes it back to the file /var/log/previous_syslog.
As long as Haiku still boots, this should now be the most convenient way
to retrieve the output from a kernel crash.
2014-01-19 10:46:00 +01:00
Pawel Dziepak
955e4cff94 scheduler: Weaken time slept assertion 2014-01-17 18:07:47 +01:00
Pawel Dziepak
d0f2d8282f Merge branch 'scheduler'
Conflicts:
	build/jam/packages/Haiku
	headers/os/kernel/OS.h
	headers/os/opengl/GLRenderer.h
	headers/private/shared/cpu_type.h
	src/add-ons/kernel/drivers/power/acpi_battery/acpi_battery.h
	src/bin/sysinfo.cpp
	src/bin/top.c
	src/system/kernel/arch/x86/arch_system_info.cpp
	src/system/kernel/port.cpp
2014-01-17 04:06:15 +01:00
Pawel Dziepak
0269dd284e Revert "scheduler: SCHEDULER_EXIT_FUNCTION() is not needed"
This reverts commit 667617ad043a4587d8d366d5192d9ad291cfa37a.

Scheduler profiler uses CPU local data to store function information, hence
arch_thread_context_switch() usually is not a problem. However, when
we switch to a new thread we end up scheduler_new_thread_entry() instead
of scheduler_reschedule() what may corrupt data collected by the profiler.
2014-01-17 01:55:42 +01:00
Pawel Dziepak
3dce49af0e scheduler: Cache quantum length 2014-01-17 01:55:42 +01:00
Pawel Dziepak
4835c216f7 scheduler: low_latency: Try to keep all cores busy 2014-01-17 01:55:42 +01:00
Pawel Dziepak
0d27a57cf1 scheduler: Fix divide by zero on CPU disable 2014-01-16 23:26:10 +01:00
Pawel Dziepak
f978518a52 scheudler: Cache ThreadData::IsCPUBound() result 2014-01-16 23:26:10 +01:00
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
dd8a866adc libroot/x86: Fix indirect jump 2014-01-16 20:18:22 +01:00
Pawel Dziepak
79c9b824e4 libroot: sync() should not return any value 2014-01-16 20:18:22 +01:00
Jonathan Schleifer
9fc69d1b00 runtime_loader: Add __dso_handle.
The symbol is needed for global objects. Usually, GCC also requires
this, but for some reason, the linking error only occurs when using
Clang.

Signed-off-by: Jérôme Duval <jerome.duval@gmail.com>
2014-01-13 19:35:34 +01:00
Jonathan Schleifer
d1c7f766fd glibc: Remove a ++ that was accidentally added.
Thanks to PulkoMandy for noticing!

Work towards bug #10396
2014-01-11 17:33:42 -06:00
Alexander von Gluck IV
4f357bc071 sysinfo: Improve x86 CPU information
* Displays standard CPUID, and shows what the
  internal CPUID used by OS.h *should* be.
* Should help out in identifying new CPU's
  as all end users have to do is run sysinfo
  to get the CPU info + value for OS.h
2014-01-11 16:14:22 -06:00
Jonathan Schleifer
38fee4c388 glibc: Remove nested function.
Nested functions are a (again, broken) GNU extension which is not
supported by Clang. It has been replaced by a bunch of gotos and a
variable that works as a return address.
2014-01-10 22:32:05 +01:00
Jonathan Schleifer
4683fcc35c glibc: Correctly create weak symbols. 2014-01-10 22:31:58 +01:00
Pawel Dziepak
082d3c1015 scheduler: Increase thread penalty at fork 2014-01-09 03:50:54 +01:00