A Rust library implementing safe, lightweight context switches, without relying on kernel services
Go to file
whitequark ebd9ca8dec Allocate guard page under existing stack, not in it.
This fixes a segfault when the allocated stack is just one page long.

This also refactors the fringe::os module to use Result consistently.

close #22
2016-07-16 20:54:33 -04:00
.travis/docs run on Travis CI container infra 2015-04-19 15:40:43 -04:00
benches Completely rework fringe::Context and fringe::arch. 2016-07-16 15:04:15 -04:00
src Allocate guard page under existing stack, not in it. 2016-07-16 20:54:33 -04:00
tests Allocate guard page under existing stack, not in it. 2016-07-16 20:54:33 -04:00
.editorconfig add .editorconfig 2015-04-16 04:17:55 -04:00
.gitignore initial commit 2014-12-23 04:27:28 +01:00
.travis.yml run Cargo in verbose mode on Travis CI 2016-03-16 09:09:36 +01:00
Cargo.toml Allocate guard page under existing stack, not in it. 2016-07-16 20:54:33 -04:00
LICENSE remove copyright years 2016-03-22 08:25:23 +01:00
README.md Completely rework fringe::Context and fringe::arch. 2016-07-16 15:04:15 -04:00

README.md

travis rustdoc

libfringe

libfringe is a low-level green threading library for Rust. It's usable in freestanding environments (like kernels), but it can also provide an easy-to-use stack allocator using your operating system's memory mapping facility.

Performance

libfringe does context switches in 2.5ns flat on x86_64!

test swap ... bench:         5 ns/iter (+/- 1)

…and on x86:

test swap ... bench:         5 ns/iter (+/- 1)

Limitations

libfringe currently doesn't work on anything but x86 and x86_64, and is untested on anything but Linux.

Installation

libfringe is a Cargo package. It's not stable software yet, so you'll have to use it as a git dependency. Add this to your Cargo.toml:

[dependencies.fringe]
git = "https://github.com/edef1c/libfringe.git"

Feature flags

libfringe provides some optional features through Cargo's feature flags. Currently, all of them are enabled by default.

valgrind

Valgrind integration. libfringe will register context stacks with Valgrind.