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