Introduction, the packet structure, and managing heap-allocated packet memory on a freelist. (2020-03-27)
Links. Simple circular ring buffers that store pointers to packets. Transmit and receive. (2020-03-27)
A first overview of the engine, and the state it manages. How apps are represented, how they get linked to each other, and how they get executed. (2020-03-31)
How configurations are declaratively built, and configuration diffs are applied to the engine. (2020-04-02)
Implementing the main engine entry point, engine and link statistics, and battling with Rust closures. Finally, weโre ready to run our first Snabb micro-benchmark: basic1 (2020-04-02)
How the engine manages time and timers. (2020-04-02)
We compute the order in which to invoke apps during configure. We ensure the breathe order is deterministic, and try to resolve dependencies. (2020-04-06)
While reflecting on some refactorings, I ramble about my difficulties with Rust. We find a lean way to have dynamic static mutable variables. We avoid references by copying values instead to escape the draconian compiler. And we end up with an extra portion of sticky trait glue. (2020-04-06)
We allocating memory form huge pages for DMA, and populate the packet freelist on demand. In doing that we introduce a performance regression which we fix after hunting it down using Linuxโ perf. (2020-04-08)
We borrow Ixy.rs to implement a device driver app, and process real packets on real wires. We also mess around with protocol header synthesizing and parsing. (2020-04-09)
We port the x86 assembly routine for calculating IP checksums from Snabb to Rust inline assembly, and then port it to ARM/aarch64. Janneย Grunau optimizes the hell out of the ARM code, and teaches us advanced ARM assembly magic. Finally, we run our Snabb clone on a Cortex-A72, and briefly evaluate our results. (2020-04-21)