5 releases (1 stable)

Uses old Rust 2015

1.1.0 Jan 27, 2017
0.12.0 Dec 21, 2016
0.11.0 Nov 5, 2016
0.1.1 Oct 18, 2016
0.1.0 Oct 18, 2016

#1019 in Concurrency

MIT license

745KB
10K SLoC

Rust 9K SLoC // 0.0% comments Q 1K SLoC // 0.3% comments AsciiDoc 262 SLoC K 123 SLoC // 0.3% comments JavaScript 120 SLoC // 0.1% comments LALRPOP 42 SLoC Shell 25 SLoC // 0.1% comments

The Kernel

TL;DR Autobalancing low-latency non-blocking zero-copy CAS-multicursor queues with priority tasks and scalable timers.

Build Status Gitter Chat Crates IO Crates IO

Features

  • MIO Compatible Network Server with Connections
  • Vectorizable SMP-aware stream combinators
  • MPSC, SPMC, SPSC queues with CAS-semantics on Ring Buffers
  • Zero-Copy Interpreter and Queues
  • Session Types and π-calculus semantics
  • 5-20ns latency
  • BERT protocol for VM stats
  • AVX Vectorization
  • Dedicated InterCore Bus Protocol (Star Topology)

The O Language

$ cargo build ; rlwrap ./target/debug/o -init etc/init.q
    Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
AP core 3
AP core 2
AP core 1
BSP core 0
Welcome to The O Language 1.1.0
o)InterCore Exec 0 "a:pub 1;b:pub 2;c:pub 2;d:[a;b;c]\n\n" Yield(Nil)
InterCore Pub 2 1 Pub { from: 0, to: 1, task_id: 0, name: "", cap: 8 }
InterCore AckPub 0 AckPub { from: 1, to: 0, task_id: 0, result_id: 1 }
InterCore Pub 3 2 Pub { from: 0, to: 2, task_id: 0, name: "", cap: 8 }
InterCore AckPub 0 AckPub { from: 2, to: 0, task_id: 0, result_id: 1 }
InterCore Pub 3 2 Pub { from: 0, to: 2, task_id: 0, name: "", cap: 8 }
InterCore AckPub 0 AckPub { from: 2, to: 0, task_id: 0, result_id: 2 }

o)a:pub 2
InterCore Exec 0 "a:pub 2\n" Yield(Nil)
InterCore Pub 3 2 Pub { from: 0, to: 2, task_id: 0, name: "", cap: 8 }
InterCore AckPub 0 AckPub { from: 2, to: 0, task_id: 0, result_id: 3 }

o)fac:{$[x=1;1;x*fac[x-1]]};fac[20]
InterCore Exec 0 "fac:{$[x=1;1;x*fac[x-1]]};fac[20]\n" End(Node(Value(Number(2432902008176640000))))

o)a
InterCore Exec 0 "a\n" End(Node(Value(Number(3))))

Enable AVX Vectorization

$ cat ./cargo/config

[target.x86_64-unknown-linux-gnu]
rustflags="-C target-feature=+avx,+avx2"

$ cargo build --release

$ objdump ./target/release/o -d | grep mulpd
   223f1:	c5 f5 59 0c d3       	vmulpd (%rbx,%rdx,8),%ymm1,%ymm1
   223f6:	c5 dd 59 64 d3 20    	vmulpd 0x20(%rbx,%rdx,8),%ymm4,%ymm4
   22416:	c5 f5 59 4c d3 40    	vmulpd 0x40(%rbx,%rdx,8),%ymm1,%ymm1
   2241c:	c5 dd 59 64 d3 60    	vmulpd 0x60(%rbx,%rdx,8),%ymm4,%ymm4
   2264d:	c5 f5 59 0c d3       	vmulpd (%rbx,%rdx,8),%ymm1,%ymm1
   22652:	c5 e5 59 5c d3 20    	vmulpd 0x20(%rbx,%rdx,8),%ymm3,%ymm3
$ objdump ./target/release/o -d | grep vpmul
   2251c:	c5 d5 f4 fb          	vpmuludq %ymm3,%ymm5,%ymm7
   22525:	c4 41 55 f4 c0       	vpmuludq %ymm8,%ymm5,%ymm8
   2253a:	c5 d5 f4 db          	vpmuludq %ymm3,%ymm5,%ymm3
   22547:	c5 cd f4 ec          	vpmuludq %ymm4,%ymm6,%ymm5
   22550:	c5 cd f4 ff          	vpmuludq %ymm7,%ymm6,%ymm7
   22562:	c5 cd f4 e4          	vpmuludq %ymm4,%ymm6,%ymm4
   22595:	c5 d5 f4 fb          	vpmuludq %ymm3,%ymm5,%ymm7

Sample

extern crate kernel;

use kernel::io::poll::*;
use kernel::io::tcp::*;
use kernel::io::server::*;
use kernel::io::console::*;

fn main() {
    let x = std::thread::spawn(|| net());
    let y = std::thread::spawn(|| console());
    x.join();
}

fn net() {
    let addr = "127.0.0.1:8000".parse::<std::net::SocketAddr>().ok().expect("Parser Error");
    let sock = TcpListener::bind(&addr).ok().expect("Failed to bind address");
    let mut poll = Poll::new().expect("Failed to create Poll");
    let mut net = Server::new(sock);
    net.run(&mut poll).expect("Failed to run server");
}

fn console() {
    let mut poll = Poll::new().expect("Failed to create Poll");
    let mut con = Console::new();
    con.run(&mut poll);
}

Test WebSocket Server

Prerequisites:

$ sudo apt-get install webfs
$ brew install webfs
$ cd /usr/ports/www/webfs/ && make install clean

Open Browser:

$ open http://127.0.0.1:8001/etc/status/index.htm

Reading

Credits

  • Viktor Sovietov, Core Suggestions
  • Anton Kundenko, Stream Processing
  • Ievgenii Lysiuchenko, Optimizations, System Programming
  • Denis Golovan, Vectorization, KCell, Interpreter
  • Mykola Oleksiienko, K expertise
  • Maxim Sokhatsky, General View

Inspiration

  • Ken Pratt, Rusty Scheme
  • Carl Lerche, MIO

Dependencies

~8MB
~170K SLoC