Commit Graph

51 Commits

Author SHA1 Message Date
Brian Anderson
d392556160 std: Fix perf of local allocations in newsched
Mostly optimizing TLS accesses to bring local heap allocation performance
closer to that of oldsched. It's not completely at parity but removing the
branches involved in supporting oldsched and optimizing pthread_get/setspecific
to instead use our dedicated TCB slot will probably make up for it.
2013-08-09 01:15:31 -07:00
toddaaro
af2e03998d Enabled workstealing in the scheduler. Previously we had one global work queue shared by each scheduler. Now there is a separate work queue for each scheduler, and work is "stolen" from other queues when it is exhausted locally. 2013-08-08 14:13:41 -07:00
Brian Anderson
ae1ed4fd78 std: Allow spawners to specify stack size 2013-08-07 15:40:27 -07:00
Brian Anderson
f82da818a7 std::rt: Pull RUST_MIN_STACK from the environment 2013-08-07 15:40:27 -07:00
Marvin Löbel
0ac7a219f0 Updated std::Option, std::Either and std::Result
- Made naming schemes consistent between Option, Result and Either
- Changed Options Add implementation to work like the maybe monad (return None if any of the inputs is None)
- Removed duplicate Option::get and renamed all related functions to use the term `unwrap` instead
2013-08-05 22:42:21 +02:00
Brian Anderson
2f8346b949 std::rt: Remove the test for context()
This is no longer testable once newsched is turned on
2013-08-04 15:11:56 -07:00
Daniel Micay
1008945528 remove obsolete foreach keyword
this has been replaced by `for`
2013-08-03 22:48:02 -04:00
toddaaro
1d82fe5aea fixed incorrect handling of returned scheduler option and restructed scheduler functions slightly 2013-08-01 15:18:29 -07:00
toddaaro
a5f55b3ead minor tweaks - unboxed the coroutine so that it is no longer a ~ pointer inside the task struct, and also added an assert to verify that send is never called inside scheduler context as it is undefined (BROKEN) if that happens 2013-08-01 15:17:19 -07:00
toddaaro
f7eed22387 A major refactoring that changes the way the runtime uses TLS. In the
old design the TLS held the scheduler struct, and the scheduler struct
held the active task. This posed all sorts of weird problems due to
how we wanted to use the contents of TLS. The cleaner approach is to
leave the active task in TLS and have the task hold the scheduler. To
make this work out the scheduler has to run inside a regular task, and
then once that is the case the context switching code is massively
simplified, as instead of three possible paths there is only one. The
logical flow is also easier to follow, as the scheduler struct acts
somewhat like a "token" indicating what is active.

These changes also necessitated changing a large number of runtime
tests, and rewriting most of the runtime testing helpers.

Polish level is "low", as I will very soon start on more scheduler
changes that will require wiping the polish off. That being said there
should be sufficient comments around anything complex to make this
entirely respectable as a standalone commit.
2013-08-01 15:14:00 -07:00
blake2-ppc
78cde5b9fb std: Change Times trait to use do instead of for
Change the former repetition::

    for 5.times { }

to::

    do 5.times { }

.times() cannot be broken with `break` or `return` anymore; for those
cases, use a numerical range loop instead.
2013-08-01 16:54:22 +02:00
bors
18d124b9b5 auto merge of #8158 : bblum/rust/task-cleanup, r=brson
r? @brson
2013-08-01 06:01:39 -07:00
Daniel Micay
1fc4db2d08 migrate many for loops to foreach 2013-08-01 05:34:55 -04:00
Ben Blum
2e6dc161b6 Give tasks useful names. #2891 2013-07-31 14:37:22 -04:00
bors
8b7e241e02 auto merge of #8139 : brson/rust/rm-old-task-apis, r=pcwalton
This removes a bunch of options from the task builder interface that are irrelevant to the new scheduler and were generally unused anyway. It also bumps the stack size of new scheduler tasks so that there's enough room to run rustc and changes the interface to `Thread` to not implicitly join threads on destruction, but instead require an explicit, and mandatory, call to `join`.
2013-07-31 02:10:24 -07:00
Brian Anderson
0144c83213 std::rt: Change Thread interface to require an explicit join
Makes it more obvious what's going on
2013-07-30 14:23:44 -07:00
Ben Blum
f34fadd126 Implement select() for new runtime pipes. 2013-07-30 13:19:25 -04:00
bors
3078e83c3f auto merge of #8076 : omasanori/rust/cleanup, r=huonw
A cleanup suggested on #7922.
2013-07-27 20:13:22 -07:00
Brian Anderson
34a27db8bf std::rt: Add start_on_main_thread function
Applications that need to use the GUI can override start and set up the runtime using
this function.
2013-07-27 17:36:14 -07:00
OGINO Masanori
8d654fc41d Remove unnecessary #[path = "***/mod.rs"] lines.
Fixes #7922.

Signed-off-by: OGINO Masanori <masanori.ogino@gmail.com>
2013-07-27 15:53:30 +09:00
Patrick Walton
06594ed96b librustc: Remove pub extern and priv extern from the language.
Place `pub` or `priv` on individual items instead.
2013-07-20 17:39:38 -07:00
Ben Blum
9ad1997549 Change the HOF context switchers to pass a BlockedTask instead of a ~Task. 2013-07-20 05:08:57 -04:00
Ben Blum
afc199bea0 Remove join_latch 2013-07-20 05:08:56 -04:00
Ben Blum
6882508b6f Add kill::Death for task death services and use it in Task. 2013-07-20 05:08:56 -04:00
Ben Blum
52ca256d7b Add KillHandle and implement exit code propagation to replace join_latch 2013-07-20 05:08:56 -04:00
Brian Anderson
07e52eb7fc std: Make os::set_exit_status work with newsched 2013-07-09 13:29:05 -07:00
Brian Anderson
1098d6980b Merge remote-tracking branch 'mozilla/master'
Conflicts:
	src/libextra/test.rs
	src/libstd/at_vec.rs
	src/libstd/cleanup.rs
	src/libstd/rt/comm.rs
	src/libstd/rt/global_heap.rs
	src/libstd/task/spawn.rs
	src/libstd/unstable/lang.rs
	src/libstd/vec.rs
	src/rt/rustrt.def.in
	src/test/run-pass/extern-pub.rs
2013-07-03 14:49:13 -07:00
toddaaro
5cfad4b6de Refactored the runtime to view coroutines as a component of tasks, instead of tasks as a component of coroutines. 2013-07-01 16:14:56 -07:00
Brian Anderson
e65d0cbabe extra: Make test runner compatible with newsched 2013-06-24 17:07:03 -07:00
Brian Anderson
d071f51cdc std::rt: deny(unused_unsafe) 2013-06-24 17:07:03 -07:00
Brian Anderson
5e7c5d6c3d std: Make box annihilator work with newsched 2013-06-24 17:07:03 -07:00
Brian Anderson
a09972db35 std: Move dynamic borrowck code from unstable::lang to rt::borrowck 2013-06-24 17:07:03 -07:00
Brian Anderson
1b7c99655f std::rt: Support os::args 2013-06-21 14:42:15 -07:00
Brian Anderson
5086c0850e std::rt: Update GC metadata in init 2013-06-19 16:08:07 -07:00
Brian Anderson
e1555f9b56 std::rt: Document and cleanup the run function 2013-06-19 01:13:56 -07:00
Brian Anderson
5722c953e5 std::rt: Correct the numbers of default cores 2013-06-19 00:49:05 -07:00
Brian Anderson
915aaa7f67 std::rt: Set the process exit code 2013-06-19 00:39:10 -07:00
Brian Anderson
5b2dc52034 std::rt: Turn on multithreaded scheduling 2013-06-18 00:17:14 -07:00
Brian Anderson
9ef4c413a8 std::rt: Check exchange count on exit 2013-06-17 23:18:20 -07:00
Brian Anderson
3281f5b637 std::rt: Add util mod and num_cpus function 2013-06-17 22:17:51 -07:00
Brian Anderson
319cf6e465 Merge remote-tracking branch 'brson/io'
Conflicts:
	src/libstd/rt/comm.rs
	src/libstd/rt/mod.rs
	src/libstd/rt/sched.rs
	src/libstd/rt/task.rs
	src/libstd/rt/test.rs
	src/libstd/rt/tube.rs
	src/libstd/rt/uv/uvio.rs
	src/libstd/rt/uvio.rs
	src/libstd/task/spawn.rs
2013-06-16 15:09:25 -07:00
Brian Anderson
3208fc36bf Merge remote-tracking branch 'brson/io-wip' into io
Conflicts:
	src/libstd/rt/sched.rs
	src/libstd/rt/task.rs
	src/libstd/rt/test.rs
	src/libstd/task/mod.rs
	src/libstd/task/spawn.rs
2013-06-15 19:31:46 -07:00
Brian Anderson
fd148cd3e2 std::rt: Change the Task constructors to reflect a tree 2013-06-13 23:18:49 -07:00
Brian Anderson
abc3a8aa1e std::rt: Add JoinLatch
This is supposed to be an efficient way to link the lifetimes
of tasks into a tree. JoinLatches form a tree and when `release`
is called they wait on children then signal the parent.

This structure creates zombie tasks which currently keep the entire
task allocated. Zombie tasks are supposed to be tombstoned but that
code does not work correctly.
2013-06-13 23:18:45 -07:00
toddaaro
d64d26cd39 debugged a compiler ICE when merging local::borrow changes into the main io branch and modified the incoming new file lang.rs to be api-compatible 2013-06-10 15:29:02 -07:00
Philipp Brüschweiler
34ee63e93b std::cell: Modernize constructors
Part of #3853
2013-06-04 12:03:58 +02:00
Daniel Micay
e900dba28a rename the Ptr trait to RawPtr
Closes #6607
2013-06-03 13:50:29 -04:00
Brian Anderson
ea633b42ae core::rt: deny(unused_imports, unused_mut, unused_variable) 2013-05-30 13:20:17 -07:00
Brian Anderson
8eb358bb00 core::rt: Begin recording scheduler metrics 2013-05-30 00:18:07 -07:00
Brian Anderson
f4ed554ddb Merge remote-tracking branch 'brson/io' into incoming
Conflicts:
	src/libstd/rt/sched.rs
2013-05-29 18:22:28 -07:00