wayfinder
wayfinder: OS Configuration Micro-Benchmarking Framework
Science Score: 75.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 3 DOI reference(s) in README -
✓Academic publication links
Links to: acm.org -
○Academic email domains
-
✓Institutional organization owner
Organization lancs-net has institutional domain (www.lancaster.ac.uk) -
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (9.7%) to scientific vocabulary
Repository
wayfinder: OS Configuration Micro-Benchmarking Framework
Basic Info
Statistics
- Stars: 8
- Watchers: 11
- Forks: 2
- Open Issues: 0
- Releases: 1
Metadata Files
README.md
wayfinder: OS Configuration Micro-Benchmarking Framework
Wayfinder is a generic OS performance evaluation platform. Wayfinder is fully automated and ensures both the accuracy and reproducibility of results, all the while speeding up how fast tests are run on a system. Wayfinder is easily extensible and offers convenient APIs to:
- Implement custom configuration space exploration techniques,
- Add new benchmarks; and,
- Support additional OS projects.
Wayfinder's capacity to automatically and efficiently explore a LibOS' can be found in the examples/ directory; as well as its ability to efficiently isolate parallel experiments to avoid noisy neighbors.
Configuration
New jobs are described using a configuration YAML file.
Parameterization configuration
| Attribute | Required | Definition |
|-------------|----------|------------------------------------------------------------------------------------------------------------|
| name | Yes | The name of the variable. This will be the same as the environmental argument passed to a run instance. |
| type | Yes | The variable type, one of: [integer, string]. |
| min | No | Starting integer value. |
| max | No | Ending integer value. |
| step | No | How much to increment integer value by. Default is 1. |
| step_mode | No | Whether to step by increment or by power. When power, the step_mode is used as the base. |
| only | No | Discrete list of values to vary the parameter by. |
Examples
Integer, min-max, static increment:
[1, 2, 3, 4, 5]```yaml params:- name: A type: integer min: 1 max: 5 step: 1 ```
Integer, min-max, power increment:
[1, 2, 4, 8, 16]```yaml params:- name: B type: integer min: 1 max: 16 step: 2 step_mode: power ```
Integer, fixed set:
[1, 20, 100]```yaml params:- name: C type: integer only: [1, 20, 100] ```
String, fixed set:
["hello", "world"]```yaml params:- name: D type: string only: ["hello", "world"] ```
When parameters A and B are used (seen above), the following permutation matrix will be run via wayfinder:
| # | C | D |
|----|-------|---------|
| 1 | 1 | hello |
| 2 | 1 | world |
| 3 | 20 | hello |
| 4 | 20 | world |
| 5 | 100 | hello |
| 6 | 100 | world |
Runtime configuration
| Attribute | Required | Description |
|----------------|----------|-------------------------------------------------------------------------|
| name | Yes | The name of the run. |
| image | Yes | Remote OCI image for the filesystem to use for the run. |
| cmd | Yes | The command to run within the OCI image during the run. |
| devices | No | List of additional devices to attach from the host to the run instance. |
| cores | No | Number of cores to allocate the run instance. Default is 1. |
| capabilities | No | List of capabilities the OCI filesystem should have access to. |
All parameters defined in the YAML configuration are provided to runs as
environmental variables. Every run directive can use a remote OCI image for
creating a flesystem with the needed dependencies of the action, for example:
Example
yaml
run:
- name: build
image: unikraft/kraft:staging
cmd:
|
echo $C $D
Additional devices can be attached to a run directive or capabilities, for
example being able to manipulate the host network:
yaml
run:
- name: build
image: unikraft/kraft:staging
devices:
- /dev/net/tun
capabilities:
- CAP_NET_ADMIN
cmd:
|
brctl addbr test0
The cores which have been allocated from the host system to the runtime instance
via the scheduler are passed as environmental variables to the instance. For
example, if 2 cores are required for the run, then they are passed like so:
yaml
run:
- name: build
image: unikraft/kraft:staging
cores: 2
cmd:
|
taskset -c $WAYFINDER_CORE_ID0 ./path/to/executable1.sh &
taskset -c $WAYFINDER_CORE_ID1 ./path/to/executable2.sh
This can be used by, for example, taskset to ensure isolation.
Input and output artifacts
All permutations may need information passed into it from the host system or artifacts are generated from the result of a permutation, such as a OS binary. These I/O can also be specified in the YAML configuration.
Inputs
| Attribute | Required | Description |
|---------------|----------|--------------------------------------------------------------------------|
| source | Yes | The source of the file on the host to place in the run instance. |
| destination | Yes | The destination of the file to place in OCI filesystem the run instance. |
Outputs
| Attribute | Required | Description |
|-----------|----------|----------------------------------------------------------------------------------------|
| path | Yes | The location of an artifact in the OCI filesystem created during the instance runtime. |
Example
```yaml inputs: # Use the same DNS entries as the host system within the runtime instance. - source: /etc/resolv.conf destination: /etc/resolv.conf
outputs: # Output artifacts from the runtime instance. - path: /path/to/binary - path: /results.txt ```
Getting started and usage
To get started using wayfinder, download the latest
release and install on your
host system. Once installed, you can use wayfinder as a CLI program:
``` Run a specific experiment job.
Usage: wayfinder run [OPTIONS...] [FILE]
Flags: -O, --allow-override Override contents in directories (otherwise tasks allowed to fail). -b, --bridge string (default "wayfinder0") --cpu-sets string Specify which CPUs to run experiments on. (default "2-48") -D, --dry-run Run without affecting the host or running the jobs. -h, --help help for run -n, --hostnet string (default "eth0") -r, --max-retries int Maximum number of retries for a run. -g, --schedule-grace-time int Number of seconds to gracefully wait in the scheduler. (default 1) -s, --subnet string (default "172.88.0.1/16") -w, --workdir string Specify working directory for outputting results, data, file systems, etc.
Global Flags: -v, --verbose Enable verbose logging ```
Example configuration files can be found in examples/ directory of this repository.
Cite
bibtex
@inproceedings{Jung2021,
title = {Wayfinder: Towards Automatically Deriving Optimal OS Configurations},
author = {Jung, Alexander and Lefeuvre, Hugo and Rotsos, Charalampos, and
Pierre, Olivier and O\~{n}oro-Rubio, Daniel, and Niepert, Mathias, and
Huici, Felipe},
journal = {12th ACM SIGOPS Asia-Pacific Workshop on Systems},
year = {2021},
series = {APSys'21},
publisher = {ACM},
address = {New York, NY, USA},
doi = {10.1145/3476886.3477506},
isbn = {978-1-4503-8698-2/21/08}
}
Resources
License
Wayfinder is licensed under BSD-3-Clause. Read more in
LICENSE.md.
Owner
- Name: SCC Networking & Systems Research Group
- Login: lancs-net
- Kind: organization
- Location: Lancaster, UK
- Website: https://www.lancaster.ac.uk/scc/research/networking/
- Repositories: 5
- Profile: https://github.com/lancs-net
School of Computing & Communications, Lancaster University
Citation (CITATION.cff)
cff-version: 1.2.0
title: "wayfinder: OS Configuration Micro-Benchmarking Framework"
message: "If you use this software, please cite it as below."
authors:
- family-names: "Jung"
given-names: "Alexander"
orcid: "https://orcid.org/0000-0002-8139-2864"
version: 0.1.0
date-released: 2021-08-25
url: "https://github.com/lancs-net/wayfinder"
license: BSD-3-Clause
preferred-citation:
title: "Wayfinder: Towards Automatically Deriving Optimal OS Configurations"
authors:
- family-names: "Jung"
given-names: "Alexander"
affiliation: "Lancaster University"
city: "Lancaster"
country: "UK"
orcid: "https://orcid.org/0000-0002-8139-2864"
- family-names: "Lefeuvre"
given-names: "Hugo"
affiliation: "The University of Manchester"
city: "Manchester"
country: "UK"
orcid: "https://orcid.org/0000-0001-9547-7458"
- family-names: "Rotsos"
given-names: "Charalampos"
affiliation: "Lancaster University"
city: "Lancaster"
country: "UK"
orcid: "https://orcid.org/0000-0003-0252-9373"
- family-names: "Olivier"
given-names: "Pierre"
affiliation: "The University of Manchester"
city: "Manchester"
country: "UK"
- family-names: "Oñoro-Rubio"
given-names: "Daniel"
affiliation: "NEC Laboratories Europe GmbH"
city: "Heidelberg"
country: "DE"
- family-names: "Niepert"
given-names: "Mathias"
affiliation: "NEC Laboratories Europe GmbH"
city: "Heidelberg"
country: "DE"
- family-names: "Huici"
given-names: "Felipe"
affiliation: "NEC Laboratories Europe GmbH"
city: "Heidelberg"
country: "DE"
doi: 10.1145/3476886.3477506
isbn: 978-1-4503-8698-2/21/08
type: conference-paper
conference:
name: "12th ACM SIGOPS Asia-Pacific Workshop on Systems (APSys'21)"
date-end: "2021-08-24"
date-start: "2021-08-25"
publisher: Association for Computing Machinery
start: 115
end: 122
pages: 8
month: 8
year: 2021
GitHub Events
Total
- Watch event: 1
Last Year
- Watch event: 1
Issues and Pull Requests
Last synced: almost 3 years ago
All Time
- Total issues: 0
- Total pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Total issue authors: 0
- Total pull request authors: 0
- Average comments per issue: 0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 0
- Pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Issue authors: 0
- Pull request authors: 0
- Average comments per issue: 0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 1
- Total downloads: unknown
- Total dependent packages: 0
- Total dependent repositories: 0
- Total versions: 1
proxy.golang.org: github.com/lancs-net/wayfinder
- Homepage: https://github.com/lancs-net/wayfinder
- Documentation: https://pkg.go.dev/github.com/lancs-net/wayfinder#section-documentation
- License: BSD-3-Clause
-
Latest release: v0.1.0
published over 4 years ago
Rankings
Dependencies
- github.com/containerd/containerd v1.4.3
- github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7
- github.com/google/go-containerregistry v0.3.0
- github.com/lancs-net/netns v0.5.4
- github.com/moby/moby v20.10.1+incompatible
- github.com/moby/sys/mount v0.2.0
- github.com/muesli/termenv v0.7.4
- github.com/novln/docker-parser v1.0.0
- github.com/opencontainers/runc v1.0.0-rc92
- github.com/opencontainers/runtime-spec v1.0.3-0.20200728170252-4d89ac9fbff6
- github.com/otiai10/copy v1.4.2
- github.com/sirupsen/logrus v1.6.0
- github.com/spf13/cobra v1.1.1
- github.com/tidwall/gjson v1.6.7
- golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3
- gopkg.in/yaml.v2 v2.3.0
- 750 dependencies