Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/spcl/pspin

PsPIN: A RISC-V in-network accelerator for flexible high-performance low-power packet processing
https://github.com/spcl/pspin

in-network-compute networking packet-processing pulp spin

Last synced: 27 days ago
JSON representation

PsPIN: A RISC-V in-network accelerator for flexible high-performance low-power packet processing

Awesome Lists containing this project

README

        

![GitHub Workflow Status](https://img.shields.io/github/workflow/status/spcl/pspin/CI)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![License](https://img.shields.io/badge/License-SolderPad%200.51-blue.svg)](http://solderpad.org/licenses/SHL-0.51/)

# PsPIN: A RISC-V in-network accelerator for flexible high-performance low-power packet processing

PsPIN architecture overview

PsPIN [1] is an implementation of the sPIN programming model [2] based on PULP [3]. This repository includes the RTL code implementing PsPIN, the runtime software, and a set of examples to get started. We provide a toolchain that allows to define, build, and test new handlers through cycle-accurate simulations.

**Simulation Workflow summary:** The RTL code is verilated into C++ modules that are compiled together with the functional models into two libraries: `libpspin.so` and `libpspin_debug.so`. To write your own handler, you need to define the handler code and a simulation driver. The handler code must be compiled with [RISC-V GCC](https://github.com/pulp-platform/pulp-riscv-gcc/tree/fe3ea0638f9e9bf563da8f2251d139727258f5aa). The simulation driver interfaces to `libpspin.so` for (1) initializing the simulation; (2) defining the content of L2 handler memory; (3) defining the handlers to offload; (4) defining and injecting packets to process; (5) handle events generated by the execution of the handlers (e.g., packets being sent or writes/reads to/from host memory). By linking against `libpspin_debug.so` you make the simulation a `waves.vcd` that can be explored with any value-change-dump editor (e.g., GTKWave http://gtkwave.sourceforge.net/).

**Repo organization:** The repositority has the following structure:

- `hw/`: Hardware components and simulation logic.
- `hw/deps/`: (RTL) Dependencies from the PULP platform (https://github.com/pulp-platform). Some of them have been adapted to fit in the PsPIN design. **License:** SolderPad 0.51.
- `hw/src/`: (RTL) PsPIN components. **License:** SolderPad 0.51.
- `hw/verilator_model/`: (functional) Components implementing the NIC model shown by the above figure. **License:** Apache 2.0.
- `sw/`: Software components. **License:** Apache 2.0.
- `sw/pulp-sdk/`: Dependencies from the PULP SDK adapted to fit the PsPIN design.
- `sw/rules/`: Makefile rules used to ease simulutions setups and runs.
- `sw/runtime/`: HPUs runtime code and support functions for the handlers.
- `sw/script/`: utilities for extracting data from the simulation output.
- `examples/`: Examples of sPIN handlers. **License:** Apache 2.0.
- `examples/*/driver/`. Simulation driver.
- `examples/*/handlers/`. Handlers code.

## Getting started

Please check the docs: https://spcl.github.io/pspin/.

## Citation

Please include this citation if you use this work as part of your project:

```
@inproceedings{pspin,
title={A RISC-V in-network accelerator for flexible high-performance low-power packet processing},
author={Di Girolamo, Salvatore and Kurth, Andreas and Calotoiu, Alexandru and Benz, Thomas and Schneider, Timo and Beranek, Jakub and Benini, Luca and Hoefler, Torsten},
booktitle={2021 ACM/IEEE 48th Annual International Symposium on Computer Architecture (ISCA)},
year={2021}
}
```

## References

[1] Di Girolamo Salvatore, Kurth Andreas, Calotoiu Alexandru, Benz Thomas, Schneider Timo, Beranek Jakub, Benini Luca, Hoefler Torsten. "A RISC-V in-network accelerator for flexible high-performance low-power packet processing." 2021 ACM/IEEE 48th Annual International Symposium on Computer Architecture (ISCA). IEEE, 2021.

[2] Hoefler Torsten, Salvatore Di Girolamo, Konstantin Taranov, Ryan E. Grant, and Ron Brightwell. "sPIN: High-performance streaming Processing in the Network." In Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis, pp. 1-16. 2017.

[3] Rossi, Davide, Francesco Conti, Andrea Marongiu, Antonio Pullini, Igor Loi, Michael Gautschi, Giuseppe Tagliavini, Alessandro Capotondi, Philippe Flatresse, and Luca Benini. "PULP: A parallel ultra low power platform for next generation IoT applications." In 2015 IEEE Hot Chips 27 Symposium (HCS), pp. 1-39. IEEE, 2015.