SimBricks: Full-System Simulation for Heterogeneous Systems

SimBricks is an open-source simulation framework that enables full end-to-end evaluation of modern heterogeneous systems in simulation. Our primary aim is to enable rapid prototyping and meaningful performance evaluation. SimBricks modularly combines and connects battle-tested simulators for different components: machines (e.g. QEMU, gem5, Simics), hardware components (e.g. Verilator, Tofino, FEMU SSD), and networks (e.g. ns-3, OMNeT++). SimBricks simulations run unmodified full system stacks, including applications, operating systems such as Linux, and hardware RTL.

Example of a heterogeneous system configuration with three
        hosts, a server with the DPU being built and an SSD and two clients with
        regular NICs. All hosts are connected to a network of just one switch.
Simple heterogeneous system featuring a DPU under development.

Late Full-System Evaluation Slows Development and Increases Risk

Heterogeneous hardware-software systems are complex, slow, and expensive to build, in academia and industry alike. These systems aim to drastically improve performance and energy efficiency of the complete system or application. However, engineers can only measure overall system performance once all software and hardware components have been implemented and manufactured. As a result, key metrics for evaluating design and implementation are only available late in the project lifecycle, once a physical testbed can actually be fully built.

Early & Continuous Full-System Results Accelerate Building Heterogeneous Systems

Enabling developers to run and measure the full system early speeds up and reduces risks for building heterogeneous systems. Developers can choose optimal design parameters before implementation based on reliable metrics. Full-system integration tests reduce the need for extensive hardware testbenches that merely emulate the real behavior. And once the hardware implementation is complete, a reliable full-system performance evaluation before manufacturing provides early feedback to developers, reviewers, and customers.

Modular Simulation Enables Early and Continuous Evaluation

Simulation generally enables early evaluation when a physical implementation is out of reach. However, typical heterogeneous systems require a broad range of components not supported by any individual simulator. To address this, we take a modular approach of combining different best-of-breed simulators for the individual components. We flexibly connect and synchronize multiple parallel instances of these simulators into a broad range of complete, end-to-end virtual testbeds.

Example of a SimBricks simulation configuration with three
        simulated hosts, a server and two clients. We simulate the server in
        gem5 and connect to an SSD simulated through FEMU and a Corundum FPGA
        NIC simulated through Verilator. The two clients are simulated in QEMU
        and connect to a PCIe behavioral NIC model. All three hosts are
        connected through a network simulated in ns-3.
A SimBricks simulation configuration for the system above.
Coder-Example-Image

Try out SimBricks in Your Browser!

New to SimBricks? Get started quickly with our demo. We offer an easy to use SimBricks environment that you can use in the browser. This is the fastest and easiest way to get started using SimBricks!

Key Features

  • End-to-End: simulate full heterogeneous systems, with hosts, devices, network, and the full software stack.
  • Scalable: simulate large heterogeneous systems with tens or hundreds of separate hosts and devices.
  • Fast: keep simulation times as low as possible.
  • Modular: enable flexible composition of simulators, where components can be added and swapped independently.
  • Accurate: preserve accuracy of constituent simulators, correctly interface and synchronize components.
  • Easy: quickly enable developers without simulation expertise to simulate complex heterogeneous systems.

Techniques

  • Open & modular architecture

    SimBricks defines fixed, natural component interfaces to enable flexible modular composition of simulators to run a broad range of heterogeneous systems.

  • Accurate & efficient synchronization

    SimBricks ensures accurate simulation through correct time synchronization, but with minimal runtime overhead even for systems with many components.

  • Loose coupling for easy integration

    SimBricks component simulators run as separate processes that communicate through message passing, enabling integration of simulators using arbitrary languages and simulation models.

  • Parallel execution for fast simulation

    SimBricks runs simulators in parallel on different host cores and connects them through optimized shared-memory queues; proxy process enable scaling out across machines.

Frequently Asked Questions

What application domains is SimBricks suitable for?
+

SimBricks enables virtual prototyping of heterogeneous computer systems. So far we have used it for network, storage, and distributed systems, as well as hardware accelerators. We have also used it for teaching.


Who are the target users for SimBricks?
+

The main target users are system architects, as well as hardware and software engineers. Other users are instructors and technical sales teams.


How long does it take to set up SimBricks and start using it?
+

We provide pre-built docker images for SimBricks. Setting up SimBricks for the first time can take as little as 5 minutes. More complex configurations with proprietary simulators may require more time.


Where does SimBricks run?
+

The current version of SimBricks runs on your own computing infrastructure. Longer term we plan to offer a hosted version as well. Please reach out if you are interested.


How does SimBricks simulate virtual prototypes?
+

SimBricks simulates virtual prototypes by combining and connecting multiple different simulators for individual system components into a complete system simulation.


How does SimBricks differ from other simulators?
+

SimBricks aims to enable virtual prototyping of complete computer systems, rather than individual components. SimBricks also does not replace existing simulators for individual components, but instead enables users to connect together multiple existing simulators, even from different vendors and never designed to interoperate, into a complete system.