Commit Graph

36 Commits

Author SHA1 Message Date
Erick Tryzelaar
a8943f3442 timeout_in_ns was renamed to timeout_in_ms. 2011-08-03 19:28:49 -07:00
Eric Holk
7a2e9f4874 Sleep for a nonzero amount of time on Windows. 2011-08-03 18:21:19 -07:00
Eric Holk
3d7016ae95 Updating to work on Windows. 2011-07-28 10:47:29 -07:00
Eric Holk
a5fe66e706 Adding upcalls to to ref() and deref() tasks. This is the first step towards atomic reference counting of tasks. 2011-07-28 10:47:28 -07:00
Eric Holk
5302cde188 Made task threads wait instead of sleep, so they can be woken up. This appears to give us much better parallel performance.
Also, commented out one more unsafe log and updated rust_kernel.cpp to compile under g++
2011-07-28 10:47:28 -07:00
Eric Holk
62bc6b5113 Per-thread scheduling. Closes #682.
Tasks are spawned on a random thread. Currently they stay there, but
we should add task migration and load balancing in the future. This
should drammatically improve our task performance benchmarks.
2011-07-28 10:47:28 -07:00
Graydon Hoare
39151f2ad8 Prohibit trailing whitespace under 'tidy' script. Clean up all caught cases. 2011-07-13 15:44:09 -07:00
Graydon Hoare
336a4df778 Remove 'Nop.' comments, add emacs lines, remove obsolete file. 2011-07-13 14:03:18 -07:00
Graydon Hoare
01fc165517 Attempt to correct buggy win32 timer code (causing tinderbox failures). 2011-07-13 12:25:36 -07:00
Eric Holk
8acadb17c2 Work on debugging race conditions.
Ports and channels have been moved to the kernel pool, since they've
been known to outlive their associated task. This probably isn't the
right thing to do, the life cycle needs fixed instead.

Some refactorying in memory_region.cpp. Added a helper function to
increment and decrement the allocation counter. This makes it easier
to switch between atomic and non-atomic increments. Using atomic
increments for now, although this still does not fix the problem.
2011-07-07 18:22:27 -07:00
Eric Holk
111989a626 Removed what seems to be the last of the calls to rand(). Closes #582. 2011-07-06 11:50:25 -07:00
Eric Holk
b4a145e60f Added a nanosecond timer to time.rs, support for some floating point casts, and a commandline-driven mode for pfib.rs 2011-06-30 11:32:10 -07:00
Graydon Hoare
bc9fa31618 A little tidying in rt. 2011-06-27 10:08:57 -07:00
Eric Holk
022ebc198b Implementation mising features in lock_and_signal for Win32. Also lowered the minimum stack size to get the pfib benchmark to run without exhausting its address space on Windows. 2011-06-27 09:58:39 -07:00
Eric Holk
681c063ec0 Conservatively serialize nearly all upcalls. Successfuly ran make check with RUST_THREADS=8, so we're probably fairly safe now. In the future we can relax the synchronization to get better performance. 2011-06-27 09:58:39 -07:00
Eric Holk
4bc773465f Basic multithreading support. The infinite loops test successfully maxes out the CPU. 2011-06-27 09:58:39 -07:00
Eric Holk
d1857d30fc This is the mega-ucontext commit. It replaces the task switching mechanism with a new one inspired by ucontext. It works under Linux, OS X and Windows, and is Valgrind clean on Linux and OS X (provided the runtime is built with gcc).
This commit also moves yield and join to the standard library, as requested in #42. Join is currently a no-op though.
2011-06-13 18:14:13 -07:00
Erick Tryzelaar
501201a431 Remove executable bit from lock_and_signal.cpp. 2011-06-09 12:30:57 -07:00
Marijn Haverbeke
009e01dbe7 add FIXME related to the -fno-strict-aliasing workaround 2011-04-08 02:23:33 +02:00
Patrick Walton
28d43678b6 Add a virtual destructor to rust_thread in sync.h, to quiet the compiler 2010-10-20 10:32:36 -07:00
Michael Bebenita
1bd331b7aa Fixed deadlock caused by the message pump not being notified of new message sends. 2010-09-16 00:51:03 -07:00
Michael Bebenita
a493350eb5 Cleanup, refactoring, and some runtime tests. 2010-09-10 14:38:31 -07:00
Michael Bebenita
f985fded3e Added lock_and_signal::signal_all(), and made the rust_kernel::join() use wait instead of yield. 2010-09-10 14:38:31 -07:00
Graydon Hoare
616b7afb72 Tidy up the sync dir, remove dead or mis-designed code in favour of OS primitives, switch rust_kernel to use a lock/signal pair and wait rather than spin. 2010-09-08 19:13:49 -07:00
Michael Bebenita
7f6d8b95bd Fixed race in the rust kernel. 2010-09-07 23:37:51 -07:00
Michael Bebenita
de611a3090 Lots of design changes around proxies and message passing. Made it so that domains can only talk to other domains via handles, and with the help of the rust_kernel. 2010-09-07 18:44:12 -07:00
Michael Bebenita
9b74129a4f Added a thread utility class to factor out operations on threads. 2010-09-07 18:41:07 -07:00
Michael Bebenita
f8ff013e3c Added a few utility classes, cleaned up the include order of .h files, and started to make the Rust kernel own domain message queues rather than the Rust domains themselves. 2010-09-07 18:41:07 -07:00
Michael Bebenita
64ff82ecf9 Implemented an lock free queue based on this paper http://www.cs.rochester.edu/~scott/papers/1996_PODC_queues.pdf, the "lock free queue" we had before wasn't lock free at all. 2010-08-24 21:07:14 -07:00
Michael Bebenita
6e9f0f952d Made the lock_free_queue lock (temporarily, until fixed). 2010-08-17 23:49:57 -07:00
Michael Bebenita
5d98a311e4 Putting out the burning tree on Windows. Turns out you can completely starve threads by not yielding on windows/vmware, really weird. 2010-08-16 18:44:26 -07:00
Michael Bebenita
988695a96c Added support for task sleeping in the scheduler. 2010-08-11 21:24:04 -07:00
Michael Bebenita
9ff6a3d031 Added class to abstract away platform specific thread primitives. 2010-08-09 07:42:06 -07:00
Michael Bebenita
d2c2fbe7ca Added timed_wait to condition variables. 2010-08-09 07:04:38 -07:00
Michael Bebenita
00d1465d13 Added a message passing system based on lock free queues for inter-thread communication. Channels now buffer on the sending side, and no longer require blocking when sending. Lots of other refactoring and bug fixes. 2010-07-19 14:05:18 -07:00
Graydon Hoare
d6b7c96c3e Populate tree. 2010-06-23 21:03:09 -07:00