wayfinder

wayfinder: OS Configuration Micro-Benchmarking Framework

https://github.com/lancs-net/wayfinder

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
Last synced: 6 months ago · JSON representation ·

Repository

wayfinder: OS Configuration Micro-Benchmarking Framework

Basic Info
  • Host: GitHub
  • Owner: lancs-net
  • License: other
  • Language: Go
  • Default Branch: main
  • Homepage:
  • Size: 382 KB
Statistics
  • Stars: 8
  • Watchers: 11
  • Forks: 2
  • Open Issues: 0
  • Releases: 1
Created about 5 years ago · Last pushed over 4 years ago
Metadata Files
Readme License Citation Support

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:

  1. Implement custom configuration space exploration techniques,
  2. Add new benchmarks; and,
  3. 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

  1. Integer, min-max, static increment: [1, 2, 3, 4, 5] ```yaml params:

    • name: A type: integer min: 1 max: 5 step: 1 ```
  2. 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 ```
  3. Integer, fixed set: [1, 20, 100] ```yaml params:

    • name: C type: integer only: [1, 20, 100] ```
  4. 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

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
  • Versions: 1
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 7.0%
Average: 8.2%
Dependent repos count: 9.3%
Last synced: 6 months ago

Dependencies

go.mod go
  • 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
go.sum go
  • 750 dependencies