Simulators have notoriously steep learning curves. A user picking a new simulator often spends weeks to get to the point of obtaining the first usable results. This complexity is at least partially inherent; simulators are complex and offer a broad range of configuration options. So how does SimBricks make it at all feasible for users to work with multiple different simulators? SimBricks makes it easy to get started by providing predefined simulator configurations through our orchestration framework. Users can start with these to immediately run simulations, and later on adapt configurations for specific components as necessary. The orchestration framework also takes care of the complexity for actually running simulators and collecting their outputs.
Using Individual Simulators Is Difficult
Using a simulator typically requires a deep understanding of the simulator itself, including the simulator’s idiosyncrasies for configuring and running a simulation. Simulators provide a broad array of configuration options that the user needs to understand and set accordingly. These configurations influence how the simulation behaves and will decide whether a simulation provides meaningful results.
Many simulators even require the user to write code (e.g. in the case of ns-3, C++ code), which means that the user first has to familiarize themselves with the codebase and understand the basic internal concepts. Furthermore, simulators may also require the user to prepare additional resources for the simulator. For example, a host simulator needs a complete disk image that it can boot and applications that it can run.
Combining Simulators Multiplies Complexity
While running a single simulator is already a complex task, running simulations composed of several different simulators increases the complexity even further. Users not only have to configure each individual simulator separately, but also reason about how they combine and connect. For example, users need to configure connections between simulators, start and monitor each simulator, while also providing each simulator with the correct parameters, configurations and resources. Orchestrating this quickly becomes prohibitively complicated and laborious with an increasing number of simulators.
SimBricks: Reducing Complexity with Orchestration Framework and Predefined Configurations
A core part of SimBricks is the user-facing orchestration framework, which we introduced in a previous post. The orchestration framework allows users to specify complete simulations as a concise Python script and takes care of running the simulators with all the necessary configurations and resources. Orchestration scripts written by users typically range from 15-200 lines depending on the simulation complexity.
As part of the SimBricks orchestration framework, we offer pre-configured components that can be customized with a few common parameters directly in the orchestration script. Users then combine these components together into the desired overall simulation. The main goal is to make simple tasks simple, but complex tasks possible. The framework is extensible and customizable giving the user flexibility to re-configure simulators based on their needs, or even add in custom simulators. For more complex simulations, expert users can still manually configure some of the simulators and make use of the full capabilities individual simulators provide. SimBricks also provides additional tooling for setting up simulations, such as a convenient way to create custom disk images that can be used for host simulators.
Looking Forward: SimBricks Configuration Library
We are working towards building up a catalog of pre-defined and pre-validated component simulator configurations. With this catalog, users will be able to choose from different known-good configurations reflecting specific physical hardware configurations. Users simply pick appropriate, known-good configurations for most components, and only need configure new components or components that vary from the pre-defined configurations. This is also the place where individual users have their domain expertise. Since the other components are already validated, users can be confident the simulation reflects the behavior and performance of the real system. Ultimately, this allows the user to carry out meaningful and correct simulations without any previous in-depth knowledge of simulations.
If you have questions or would like to learn more: