Commit 70eb3c32 authored by Jonas Kaufmann's avatar Jonas Kaufmann Committed by Antoine Kaufmann
Browse files

README: pass over existing content

parent 53f54e9a
...@@ -20,7 +20,7 @@ system. Our primary use-case for SimBricks is computer systems, networks, and ...@@ -20,7 +20,7 @@ system. Our primary use-case for SimBricks is computer systems, networks, and
architecture research. Our [paper](https://arxiv.org/abs/2012.14219) provides a architecture research. Our [paper](https://arxiv.org/abs/2012.14219) provides a
more detailed discussion of technical details and use-cases. more detailed discussion of technical details and use-cases.
Currently SimBricks includes the following simulators: Currently, SimBricks includes the following simulators:
- [QEMU](https://www.qemu.org) (fast host simulator) - [QEMU](https://www.qemu.org) (fast host simulator)
- [gem5](https://www.gem5.org/) (flexible and detailed host simulator) - [gem5](https://www.gem5.org/) (flexible and detailed host simulator)
...@@ -100,17 +100,19 @@ make docker-images ...@@ -100,17 +100,19 @@ make docker-images
This will build a number of Docker images and tag them locally, including the This will build a number of Docker images and tag them locally, including the
main `simbricks/simbricks` image. main `simbricks/simbricks` image.
### Building in VSCode Dev Container ### Building in VS Code Dev Container
**We recommend this approach if you plan to modify or extend SimBricks.** **We recommend this approach if you plan to modify or extend SimBricks.**
This repository is pre-configured with a [Visual Studio Code Development This repository is pre-configured with a [Visual Studio Code Development
Container] (https://code.visualstudio.com/docs/remote/containers) that includes Container](https://code.visualstudio.com/docs/remote/containers) that includes
all required dependencies for building and working on SimBricks. If you have all required dependencies for building and working on SimBricks. If you have
Docker set up and the vscode remote containers extension installed, you can just Docker set up and the VS Code [Dev Containers
open a freshly cloned simbricks repo in VSCode and VSCode will display a prompt extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
to re-open the folder in the container. The VSCode terminals will also installed, you just have to press `Ctrl+Shift+P` and execute the `Dev Containers: Reopen in
automatically run any commands inside of the container. Container` command to open the repository inside the container. This also means
that all VS Code terminals will automatically run any commands inside the
container.
To compile the core SimBricks components simply run `make` (with `-jN` to To compile the core SimBricks components simply run `make` (with `-jN` to
use multiple cores). Note that by default, we do not build the Verilator use multiple cores). Note that by default, we do not build the Verilator
...@@ -122,88 +124,89 @@ settings there. ...@@ -122,88 +124,89 @@ settings there.
The previous step only builds the simulators directly contained in the SimBricks The previous step only builds the simulators directly contained in the SimBricks
repository. You likely also want to build at least some of the external repository. You likely also want to build at least some of the external
simulators, such as gem5, QEMU, or ns-3. First, make sure their corresponding simulators, such as *gem5*, *QEMU*, or *ns-3*. First, make sure their
submodules are intialized via `git submodule update --init`. You can either corresponding submodules are initialized via `git submodule update --init`. You
build all external simulators by running `make -jN external` (this could take can either build all external simulators by running `make -jN external` (this
multiple hours depending on your machine), or build them individually by running could take multiple hours depending on your machine), or build them individually
e.g. `make -jN sims/external/qemu/ready` (replace `qemu` with `gem5`, `ns-3`, or by running e.g. `make -jN sims/external/qemu/ready` (replace `qemu` with `gem5`,
`femu` as desired). `ns-3`, or `femu` as desired).
Next, to actually run simulations, you will also need to build the disk images Next, to actually run simulations, you also need to build the disk images with
with `make -jN build-images` (note this requires QEMU to be built first). `make -jN build-images` (note this requires QEMU to be built first). This builds
This will build all our disk images, while `make -jN build-images-min` will all our disk images, while `make -jN build-images-min` only builds the base disk
only build the base disk image (but not the NOPaxos or Memcache images used for image (but not the NOPaxos or Memcached images used for some experiments). This
some experiments). This step will again take 10 - 45 minutes depending on your step will again take 10 - 45 minutes depending on your machine and whether KVM
machine and whether KVM acceleration is available but only needs to be run acceleration is available but only needs to be run once (unless you want to
once (unless you want to modify the images). modify the images).
Now you are ready to run simulations as with the pre-built docker images. Now you are ready to run simulations as with the pre-built docker images.
### Building From Source ### Building From Source
Finally, it is of course possible to install the required dependencies Finally, it is of course possible to install the required dependencies directly
directly on your machine and then build and run SimBricks locally. Note that on your machine and then build and run SimBricks locally. Note that you will
you will need to install both the modest build dependencies for SimBricks but need to install both the build dependencies for SimBricks but also for the
also for the external simulators you need. We suggest you refer to the external simulators you need. We suggest you refer to the
[`docker/Dockerfile.buildenv`](docker/Dockerfile.buildenv) for the [`docker/Dockerfile.buildenv`](docker/Dockerfile.buildenv) for the authoritative
authoritative list of required dependencies. list of required dependencies.
## Questions? Suggestions? Bugs? ## Questions? Suggestions? Bugs?
If you are using SimBricks or are trying to determine if SimBricks is suitable If you are using SimBricks or are trying to determine if SimBricks is suitable
for what you are trying to do, we would love to hear from you. First off, for what you are trying to do, we would love to hear from you. First off, please
please feel free to report bugs or suggestions directly through feel free to report bugs or suggestions directly through [GitHub
[github issues](https://github.com/simbricks/simbricks/issues). If you issues](https://github.com/simbricks/simbricks/issues). If you have questions or
have questions or thoughts please post them on our thoughts, please post them on our [GitHub discussion
[github discussion board](https://github.com/simbricks/simbricks/discussions). board](https://github.com/simbricks/simbricks/discussions). Finally, we are also
Finally, we are also available available on
[on Slack](https://join.slack.com/t/simbricks/shared_invite/zt-16y96155y-xspnVcm18EUkbUHDcSVonA) [Slack](https://join.slack.com/t/simbricks/shared_invite/zt-16y96155y-xspnVcm18EUkbUHDcSVonA)
for more interactive discussions or to answer quick questions. for more interactive discussions or to answer quick questions.
## Repository Structure ## Repository Structure
- `doc/`: Documentation (sphinx), automatically deployed on - `doc/`: Documentation (Sphinx), automatically deployed on
[Read The Docs](https://simbricks.readthedocs.io/en/latest/?badge=latest). [Read The Docs](https://simbricks.readthedocs.io/en/latest/?badge=latest).
- `lib/simbricks/`: Libraries implementing SimBricks interfaces - `lib/simbricks/`: Libraries implementing SimBricks interfaces
- `lib/simbricks/base`: Base protocol implementation responsible for - `lib/simbricks/base`: Base protocol implementation responsible for
connection setup, message transfer, and time synchronization between connection setup, message transfer, and time synchronization between
SimBricks component simulators. SimBricks component simulators.
- `lib/simbricks/network`: Network protocol implementation carrying ethernet - `lib/simbricks/network`: Network protocol implementation carrying Ethernet
packets between network components, layers over the base protocol. packets between network components. Layers over the base protocol.
- `lib/simbricks/pcie`: PCIe protocol implementation, roughly modelling PCIe - `lib/simbricks/pcie`: PCIe protocol implementation, roughly modelling PCIe
at the transaction level, interconnecting hosts with PCIe device simulators, at the transaction level, interconnecting hosts with PCIe device simulators.
layers over base protocol. Layers over base protocol.
- `lib/simbricks/nicbm`: Helper C++ library for implementing behavioral - `lib/simbricks/nicbm`: Helper C++ library for implementing behavioral
(high-level) NIC simulation models, offers similar abstractions as device (high-level) NIC simulation models, offers similar abstractions as device
models in other simulators such as gem-5. models in other simulators such as gem-5.
- `lib/simbricks/nicif`: *(deprecated)* Thin C library for NIC simulators - `lib/simbricks/nicif`: *(deprecated)* Thin C library for NIC simulators
establishing a network and a PCIe connection. establishing a network and a PCIe connection.
- `dist/`: Proxies for distributed SimBricks simulation running on multiple - `dist/`: Proxies for distributed SimBricks simulations running on multiple
physical hosts. physical hosts.
- `dist/sockets/`: Proxy transporting messages over regular TCP sockets. - `dist/sockets/`: Proxy transporting SimBricks messages over regular TCP
sockets.
- `dist/rdma/`: RDMA SimBricks proxy (not compiled by default). - `dist/rdma/`: RDMA SimBricks proxy (not compiled by default).
- `sims/`: Component Simulators integrated into SimBricks. - `sims/`: Component Simulators integrated into SimBricks.
- `sims/external/`: Submodule pointers to repositories for existing external - `sims/external/`: Submodule pointers to repositories for existing external
simulators (gem5, qemu, ns-3, femu). simulators (gem5, QEMU, ns-3, FEMU).
- `sims/nic/`: NIC simulators - `sims/nic/`: NIC simulators
- `sims/nic/i40e_bm`: Behavioral NIC model for Intel X710 40G NIC. - `sims/nic/i40e_bm`: Behavioral NIC model for Intel X710 40G NIC.
- `sims/nic/corundum`: RTL simulation with verilator of the - `sims/nic/corundum`: RTL simulation with Verilator of the
[Corundum FPGA NIC](https://corundum.io/). [Corundum FPGA NIC](https://corundum.io/).
- `sims/nic/corundum_bm`: Simple behavioral Corundum NIC model. - `sims/nic/corundum_bm`: Simple behavioral Corundum NIC model.
- `sims/nic/e1000_gem5`: E1000 NIC model extracted from gem5. - `sims/nic/e1000_gem5`: E1000 NIC model extracted from gem5.
- `sims/net/`: Network simulators - `sims/net/`: Network simulators
- `sims/net/net_switch`: Simple behavioral Ethernet switch model. - `sims/net/net_switch`: Simple behavioral Ethernet switch model.
- `sims/net/wire`: Simple ethernet "wire" connecting two NICs back-to-back. - `sims/net/wire`: Simple Ethernet "wire" connecting two NICs back-to-back.
- `sims/net/pktgen`: Packet generator. - `sims/net/pktgen`: Packet generator.
- `sims/net/tap`: Linux TAP device adapter. - `sims/net/tap`: Linux TAP device adapter.
- `sims/net/tofino/`: Adapter for Intel Tofino Simulator. - `sims/net/tofino/`: Adapter for Intel Tofino Simulator.
- `sims/net/menshen`: RTL simulation with verilator for the - `sims/net/menshen`: RTL simulation with Verilator for the
[Menshen RMT Pipeline](https://isolation.quest/). [Menshen RMT Pipeline](https://isolation.quest/).
- `experiments/`: Python Orchestration scripts for running simulations. - `experiments/`: Python orchestration framework for running simulations.
- `experiments/simbricks/orchestration/`: Orchestration framework implementation. - `experiments/simbricks/orchestration/`: Orchestration framework implementation.
- `experiments/run.py`: Main script for running a simulation. - `experiments/run.py`: Main script for running simulation experiments.
- `experiments/pyexps/`: Example simulation configurations. - `experiments/pyexps/`: Example simulation experiments.
- `images/`: Infrastructure to build disk images for hosts in SimBricks. - `images/`: Infrastructure to build disk images for host simulators.
- `images/kernel/`: Slimmed down Linux kernel to reduce simulation time. - `images/kernel/`: Slimmed down Linux kernel to reduce simulation time.
- `images/mqnic/`: Linux driver for Corundum NIC. - `images/mqnic/`: Linux driver for Corundum NIC.
- `images/scripts/`: Scripts for installing packages in disk images. - `images/scripts/`: Scripts for installing packages in disk images.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment