summaryrefslogtreecommitdiff
Commit message (Expand)AuthorAgeFilesLines
...
* Parallelize ping client and server.•••* examples/ping-client.scm: * examples/ping-server.scm: Parallelize. Andy Wingo2017-02-142-2/+4
* Fix ping-client•••* examples/ping-client.scm: Fix for run-fibers changes, to only exit when done. Andy Wingo2017-02-141-6/+10
* Fix spurious epoll traffic•••* fibers/internal.scm (schedule-fibers-for-fd): Fix sense of the POLLERR test. This was causing us to register and unregister our fd's with the kernel all the time. This was a scalability bottleneck as adding or removing an fd from an epoll set is serialized in the kernel through one mutex (!!!!), the "epmutex"; because you can nest epoll instances the kernel uses this to prevent cycles. Hint found in Voellmy's paper on the MIO system for Haskell. Andy Wingo2017-02-141-1/+1
* Minor tweak to web server•••* fibers/web/server.scm (socket-loop): Move set-nonblocking! call to client where it parallelizes better. Andy Wingo2017-02-141-2/+3
* Gracefully handle EPIPE•••* fibers/web/server.scm (client-loop): Avoid error when reading from shut-down socket (EPIPE). Perhaps a read that gives EPIPE should produce an EOF object anyway. Andy Wingo2017-02-121-3/+4
* Cope with migration of initial fiber•••* fibers.scm (run-fibers): Allow migration of main fiber. Andy Wingo2017-02-121-1/+4
* Add concurrent web server•••* fibers.texi (Concurrent Web Server): New section. * fibers/web/server.scm: Add web server that can run handlers concurrently. * examples/concurrent-web-hello.scm: New file. * Makefile.am (SOURCES): Add (fibers web server). Andy Wingo2017-02-114-7/+335
* Add condition variable implementation•••* fibers/conditions.scm: * tests/conditions.scm: New files. * Makefile.am: Add new files. * fibers.texi (Conditions): New section. * fibers/timers.scm (sleep-operation): Rename from wait-operation. * tests/foreign.scm: Adapt to sleep-operation change. Andy Wingo2017-02-116-6/+227
* Fix channel CAS logic•••* fibers/channels.scm (put-operation, get-operation): Fix bogus CAS that could cause us to spin in an allocation loop. Andy Wingo2017-02-081-4/+4
* Prevent GC from waking up epoll•••* epoll.c (do_epoll_wait): Leave Guile to do the epoll, preventing libgc from having to interrupt us for GC. Andy Wingo2017-02-081-7/+27
* Better exception handling•••* fibers/internal.scm (create-fiber): Add a start-stack and a catch-all around the fiber thunk. Note that in practice this needs the recent post-2.1.6 patch in Guile (498f3f95684361f3591106a8f9cb9065fd649288) to work well. Andy Wingo2017-02-071-4/+17
* Update doc version.•••* fibers.texi: Update version. Andy Wingo2017-01-191-3/+3
* Fibers v0.5.0.•••* configure.ac: Bump version. * NEWS: Update. v0.5.0Andy Wingo2017-01-192-1/+12
* Update documentation.•••* fibers.texi (Using Fibers): Update. Andy Wingo2017-01-191-2/+9
* Better findability for epoll extension.•••* fibers/config.scm.in: New file. * Makefile.am: Wire up new file. * env.in: Define FIBERS_BUILD_DIR. * fibers/epoll.scm: Use (fibers config) to get dir for epoll extension. Andy Wingo2017-01-194-1/+44
* Randomized round-robin work sharing/stealing•••* fibers.scm (start-auxiliary-threads, stop-auxiliary-threads): Adapt to scheduler-remote-peers change. (spawn-fiber): Adapt to use choose-parallel-scheduler. * fibers/internal.scm (<scheduler>): Add choose-parallel-scheduler field. (shuffle, make-selector): New helpers. (make-scheduler): Adapt to initialize choose-parallel-scheduler field. (choose-parallel-scheduler): New public function. (run-scheduler): Use fiber-stealer. Andy Wingo2017-01-182-63/+76
* More speedup tests.•••* tests/speedup.scm (do-times): Add different loop-to tests. Andy Wingo2017-01-181-3/+7
* Add test for parallel speedup.•••* tests/speedup.scm: New file. * Makefile.am (TESTS): Add new file. Andy Wingo2017-01-182-1/+57
* Pin worker threads to CPUs if appropriate•••* fibers.scm (with-affinity): New helper. (%run-fibers): Add affinity argument. (start-auxiliary-threads): Add affinities argument. (compute-affinities): New helper. (run-fibers): If the parallelism is complete, pin threads to CPUs. Andy Wingo2017-01-171-21/+58
* Update TODOAndy Wingo2017-01-081-4/+0
* Update documentation•••* fibers.texi: Update. Andy Wingo2017-01-081-85/+211
* Disable parallelism in scheduling-order tests•••* tests/basic.scm (assert-run-fibers-terminates): Allow keyword args to run-fibers. (run-order, wakeup-order): Disable parallelism. Andy Wingo2017-01-081-4/+4
* create-fiber always captures dynamic state•••* fibers/internal.scm (create-fiber): Remove dynamic-state argument; always capture the current dynamic state. * fibers/timers.scm (timer-operation): * fibers.scm (spawn-fiber): Adapt. Andy Wingo2017-01-083-13/+12
* Enable preemption by default•••* fibers.scm (run-fibers): Enable preemption by default with a period of 10ms. Andy Wingo2017-01-081-3/+2
* Peer schedulers share a prompt tag•••* fibers/internal.scm (make-scheduler): Peer schedulers share a prompt tag. This eliminates TOCTTOU bugs in suspend-current-fiber when computing the suspension prompt tag. (run-scheduler): Inline run-fiber and just use the same prompt tag for all fibers. Andy Wingo2017-01-081-15/+17
* Fix race between with-interrupts and thread start•••* fibers/interrupts.scm (with-interrupts/thread-cputime): Fix race. Andy Wingo2017-01-081-4/+10
* Fix clock-nanosleep wrapper•••* fibers/posix-clocks.scm (clock-nanosleep): clock_nanosleep returns the error value directly; it doesn't set errno. Fix. Andy Wingo2017-01-081-9/+7
* Web server uses dedicated fiber thread•••* web/server/fibers.scm: Instead of manually cothreading between fibers and the web server, instead have the web server use our new support for CML operations from outside fibers to use channels to communicate with a pool of threads running fibers. Andy Wingo2017-01-061-55/+56
* Allow run-fibers thread to be cleanly cancelled•••* fibers.scm (run-fibers): Spawn and cancel aux threads within a dynamic-wind. Andy Wingo2017-01-061-3/+4
* Add support for operations from foreign threads•••* tests/foreign.scm: New file. * Makefile.am: Add new file. * fibers/operations.scm (perform-operation): Support blocking operations from foreign threads (without a scheduler). * fibers/timers.scm (timer-sched, *timer-sched*, timer-operation): Add support for timeouts that use an auxiliary thread instead of relying on the current scheduler. Andy Wingo2017-01-054-2/+123
* Remove epoll dep on suspendable ports•••* epoll.c (scm_primitive_epoll_wake): New function. (scm_primitive_epoll_wait): If the epoll was woken, drain the read pipe directly. (init_fibers_epoll): Adapt prototypes. * fibers/epoll.scm (epoll-wake!): Use primitive-epoll-wake. (epoll): Let primitive-epoll-wait handle wakeup. Andy Wingo2017-01-042-21/+50
* Centralize operation wrap handling•••* fibers/operations.scm (<base-op>): Update comment. (perform-operation): Wrap resume proc before calling block function. * fibers/channels.scm (put-operation, get-operation): * fibers/timers.scm (timer-operation): Adapt to pre-wrapped resume proc. Andy Wingo2017-01-043-28/+28
* Prepare for support for blocking operations•••* fibers/operations.scm (perform-operation): Block function takes sched and resume function, not fiber. Will allow blocking operations in the future. * fibers/internal.scm (add-timer): Rename from resume-on-timer; just call a thunk after a time has passed. * fibers/timers.scm (timer-operation): Adapt to resume-on-timer and operation changes. * fibers/channels.scm (put-operation, get-operation): Adapt to operation changes. Andy Wingo2017-01-044-62/+58
* Fix ,spawn-fiber•••* fibers/repl.scm (spawn-fiber): Use spawn-fiber instead of create-fiber to get right dynamic-state. Andy Wingo2016-12-301-1/+1
* Fix spawn-fiber outside run-fibers•••* fibers.scm (run-fibers): Require init thunk for run-fibers without a scheduler. (spawn-fiber): Incorporate helper procedures, remove dynamic-state argument (as it's always the current dynamic state), and add parallel? argument. Ensure the fiber will have the right read/write waiters. * tests/basic.scm: Update. Andy Wingo2016-12-302-24/+53
* Enable parallelism by default•••* fibers.scm (run-fibers): Default to use all current processor cores. (%run-fibers, start-auxiliary-threads, stop-auxiliary-threads): New helpers. Andy Wingo2016-12-291-18/+50
* Flesh out remote peers interface•••* fibers/internal.scm (<scheduler>): Add remote-peers setter, and expose getter publically. (make-scheduler): Change remote-peers arg to "parallelism", and use setter to initialize remote peers. Andy Wingo2016-12-291-3/+14
* C-c works on threads stuck in epoll•••* epoll.c (scm_primitive_epoll_wait): Add wakefd argument, and use facilities from git guile to ensure that C-c will wake a thread sleeping in epoll. (init_fibers_epoll): Declare additional primitive-epoll-wait arg. * fibers/epoll.scm (epoll): Tell Guile about the wake fd. Andy Wingo2016-12-292-11/+21
* Remove #:keep-scheduler? arg•••* fibers.scm (run-fibers): Remove #:keep-scheduler? argument; instead, only destroy schedulers that we create. * fibers.texi (Using Fibers): Update run-fibers docs. * web/server/fibers.scm (server-read): Adapt. Andy Wingo2016-12-273-32/+27
* Fix yield-current-fiber•••* fibers/internal.scm (yield-current-fiber): Fix to allow yield-current-fiber to be run from an interrupt tick, when it's possible that no fiber is current. Andy Wingo2016-12-231-5/+8
* Enable work stealing in run-scheduler•••* fibers.scm (run-fibers): Store result in an atomic box, given that the initial fiber could migrate. * fibers/internal.scm (<scheduler>): Add remote-peers field. (<fiber>): Add set-fiber-scheduler!. (make-scheduler): Adapt to <scheduler> change. (scheduler-finished?): New helper. (scheduler-poll-timeout): Take a finished? predicate to know when to wait and when to return directly. (schedule-runnables-for-next-turn): Plumb finished? predicate through. (run-scheduler): Avoid returning until finished? is true. Refactor to add work stealing. (steal-fiber!): New helper. Andy Wingo2016-12-222-43/+58
* Get current scheduler from current fiber•••* fibers.scm (run-fibers): Refine #:keep-scheduler? default. (current-fiber-scheduler): Rename from require-current-scheduler, and use the current fiber to get at the scheduler. (spawn-fiber): Let create-fiber handle dynamic state shenanigans, as it needs to ensure that current-fiber is bound in the thunk. * fibers/internal.scm (with-scheduler): Don't parameterize current-scheduler, as that binding for a given scheduler needs to change over time, and the with-dynamic-state prevents this from happening. (schedule-fiber!): Wake schedulers not on the current kernel thread. (run-fiber): Don't parameterize current-fiber; it's lost across the with-dynamic-state. (create-fiber): Instead set current-fiber inside the with-dynamic-state. (suspend-current-fiber, yield-current-fiber): Get current scheduler from current fiber. Andy Wingo2016-12-222-41/+37
* run-scheduler pops one fiber at a time•••* fibers/internal.scm (run-scheduler): Pop one fiber at a time. Andy Wingo2016-12-221-13/+15
* Rework runqueue as pair of stacks•••* fibers/stack.scm: New file. * Makefile.am: Add new file. * fibers/internal.scm: Rework runqueue to have separate current and next stacks. We want to expose the current runqueue so that remote schedulers can steal work, but we also need to know when we flip the next runqueue to the current runqueue so that we can pull in additional wakeups from epoll and timers. Andy Wingo2016-12-223-23/+93
* Beginnings of work stealing•••* fibers/deque.scm (update!): Don't spin if value didn't change. (dequeue!): New function. * fibers/internal.scm (schedule-fibers-for-fd): Add comment about stealing and fd's. (steal-work!): New internal function. Andy Wingo2016-12-212-4/+26
* Bump version to 0.4.0v0.4.0Andy Wingo2016-12-162-3/+3
* Update NEWS.•••* NEWS: Update. Andy Wingo2016-12-161-0/+24
* Add REPL commands to manualAndy Wingo2016-12-162-1/+38
* Add examples to fibers.texiAndy Wingo2016-12-162-1/+199
* Update fibers manualAndy Wingo2016-12-161-23/+23