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.

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.


  • 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.


First official SimBricks release


We’ve released SimBricks! The release includes new and updated ns3 and gem5 versions, plus a whole new repository with usage examples to help users get started with SimBricks.

AC/DSim wins 3rd at SOSP'23 SRC


Jonas won third place at the SOSP’23 student research competition with AC/DSim.

AC/DSim poster at SOSP'23 SRC


Jonas’ submission on full system energy estimation with modular simulation has passed stage 1 of the SOSP’23 student research competition.

Simics integrated into SimBricks


Jonas successfully implemented SimBricks adapters in the Simics simulator for the PCI and memory protocols and we now merged this into our main branch.

SplitSim accepted at YArch'23


Hejing will present her ongoing work on parallelizing sequential simulators through decomposition at YArch’23.

Memory Disaggregation in SimBricks


We merged initial support for simulating disaggregated memory systems into our main branch.

Welcome Marvin


Marvin joined the project for his MSc thesis.

Presented at WORDS'22


Bin showcased SimBricks for disaggregated systems research at WORDS’22. Here is a video.

Welcome Jakob


Jakob joined the project for his MSc thesis.

Presented at SIGCOMM'22.


Hejing presented SimBricks at SIGCOMM’22 in Amsterdam. Here is a video of the presentation.

Artifact Evaluation Passed


Our SIGCOMM’22 paper received all three artifact evaluation badges: available, functional, and reproduced.

Paper Accepted at SIGCOMM'22


Our SimBricks paper will appear at SIGCOMM’22 in Amsterdam!