Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
simbricks-website
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
SimBricks
simbricks-website
Commits
e0cfea4a
Verified
Commit
e0cfea4a
authored
6 months ago
by
Marvin Meiers
Browse files
Options
Downloads
Patches
Plain Diff
rework intro for distributed simulations blog post
parent
ec1f98ab
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Checking pipeline status
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
_posts/2024-09-04-distributed-simulations.md
+23
-25
23 additions, 25 deletions
_posts/2024-09-04-distributed-simulations.md
with
23 additions
and
25 deletions
_posts/2024-09-04-distributed-simulations.md
+
23
−
25
View file @
e0cfea4a
...
...
@@ -9,33 +9,31 @@ permalink: /blog/distributed-simulations.html
c
ard_image: TODO
-
--
SimBricks allows users to run full-system simulations by running multiple
simulators as
[
separate loosely coupled processes
](
loosely-coupled-simulator-processes.html
)
.
Scaling up full-system simulations in SimBricks is usually as easy as adding
more simulated components, where each new component is simulated by an
additional simulator process. Additionally, SimBricks allows decomposition of
some simulators into multiple instances running as different processes,
preventing them from becoming a bottleneck while scaling up. We will further
explore decomposition of simulators in a future blog post.
SimBricks connects and runs multiple simulator components as
[
separate loosely coupled processes
](
loosely-coupled-simulator-processes.html
)
,
which all run in parallel. Scaling the system you want to simulate, i.e. adding
more components therefore means running additional simulator processes. This
approach naturally parallelizes the simulation and ensures that the simulation
time stays low, but it also requires more resources, especially in form of
physical CPU cores. In the following, we describe how SimBricks uses proxies
leveraging network communication to distribute simulations across multiple
machines.
This approach naturally parallelizes the simulation and ensures that the
simulation time stays low, but it also requires more resources, especially in
form of physical CPU cores. Since SimBricks adapters are
[
polling shared memory queues
](
shm-message-passing.html
)
, the simulator
processes are always busy, which means that we should not oversubscribe the
available CPU cores. Therefore, the size of a full-system simulation on one host
is limited by its resources, requiring us to distribute the processes across
multiple machines to scale the simulation beyond the limits of a single host. In
the following we will cover how SimBricks uses proxies leveraging network
communication to distribute simulations across multiple machines.
# The Need For Scaling Beyond One Machine
SimBricks uses
[
message passing over shared memory queues
](
shm-message-passing.html
)
for
communication between the different simulator processes. For this the SimBricks
adapters poll the shared memory queues, making the processes always appear busy,
which means that we should not oversubscribe the available CPU cores. Therefore,
the size of a full-system simulation on one host is limited by its resources,
requiring us to distribute the processes across multiple machines to scale the
simulation beyond the limits of a single host.
# Scale Up By Using Separate Proxy Processes
SimBricks uses message passing for communication between the different simulator
processes. The communication between two simulator processes on the same host is
implemented by shared memory queues. Scaling out simulations by partitioning
components to multiple hosts can easily be accomplished by replacing the shared
memory queues with network communication.
While communication between two simulator processes on the same host is
implemented by shared memory queues, scaling out simulations to multiple hosts
can easily be accomplished by replacing the shared memory queues with network
communication.
However, directly implementing this in individual component simulators has two
major drawbacks. First, it increases the complexity for
...
...
@@ -61,7 +59,7 @@ component simulators between two machines can be handled by the same pair of
proxies. This reduces the number of proxies needed and therefore allows more CPU
cores to be used for simulators.
# Orchestrating
Proxie
s
# Orchestrating
Distributed Simulation
s
Simbricks'
[
orchestration framework
](
orchestration_framework.html
)
of course
comes with support to use the proxies and distribute full-system simulations
across multiple machines. The user can create a distributed experiment and add
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment