Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/utah-scs/splinter
A low-latency, extensible, multi-tenant key-value store.
https://github.com/utah-scs/splinter
distributed-systems kernel-bypass key-value low-latency rust
Last synced: about 2 months ago
JSON representation
A low-latency, extensible, multi-tenant key-value store.
- Host: GitHub
- URL: https://github.com/utah-scs/splinter
- Owner: utah-scs
- Created: 2017-11-02T19:45:45.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2020-12-11T06:59:34.000Z (almost 4 years ago)
- Last Synced: 2024-06-03T07:34:49.984Z (4 months ago)
- Topics: distributed-systems, kernel-bypass, key-value, low-latency, rust
- Language: Rust
- Homepage:
- Size: 8.88 MB
- Stars: 52
- Watchers: 14
- Forks: 12
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Splinter
A multi-tenant key-value store into which untrusted extensions can be pushed
down at run-time## Running Splinter on CloudLab
To run Sandstorm on [CloudLab](https://www.cloudlab.us/login.php), do the
following1. Instantiate an experiment using the `splinter-cluster` profile under the
`sandstorm` project (you will need to join the project first). When asked,
allocate two machines for the experiment.
2. Next, run
`python3 scripts/everything/main.py --setup --build `
From the root directory of the project on any machine outside or inside the cluster.
This script is capable of:
- Installing Rust
- Installing DPDK
- Setting up NIC and MAC addresses
- Compiling Server and Client Rust
- Pushing and recompiling local commits
- Running extensions/clients
- logging output to `logs/latest/`
If you want to know more about the features of this script,
use `python3 scripts/everything/main.py -h`
## How to run server and client for each extension
To update the configuration parameters, change `db/server.toml` on the server side and `splinter/client.toml` on the client side.To run the extension on the client-side, use `use_invoke = false` and for the server-side use `use_invoke=true`. And to run the extension on both on the server-side and client-side, keep `use_invoke = true` and add `pushback` feature in `db/Cargo.toml` on the server-side.
Change `num_tenants` and `num_keys` on both the sides. The server uses these parameters to populate the tables and extension for different number of extensions and the client uses these parameters to generate the load.
### Aggregate Extension
`key_size = 8``value_size = 30`
`num_aggr = X` // The number of record accessed for per aggregate operation.
`order = X` // The amound of computation(multiplication) for per aggregate operation.
### Analysis Extension
`key_size = 30``value_size = 108`
Also add the feature `ml_model` in `db/Cargo.toml`.
### Auth Extension
`key_size = 30``value_size = 72`
### Pushback Extension
`key_size = 30``value_size = 100`
`num_aggr = X` // The number of records accessed per operation.
`order = X` // The amount of compute per operation in terms of CPU cycles.