  Full system "end-to-end" measurements in physical testbeds are the gold
standard for network systems evaluation but are often not feasible. When
physical testbeds are not available we frequently turn to simulation for
evaluation. Unfortunately, existing simulators are insufficient for end-to-end
evaluation, as they either cannot simulate all components, or simulate them
with inadequate detail. We address this through modular simulation, flexibly
combining and connecting multiple existing simulators for different components,
including processor and memory, devices, and network, into virtual end-to-end
testbeds tuned for each use-case. Our architecture, SimBricks, combines
well-defined component interfaces for extensibility and modularity, efficient
communication channels for local and distributed simulation, and a co-designed
efficient synchronization mechanism for accurate timing across simulators. We
demonstrate SimBricks scales to 1000 simulated hosts, each running a full
software stack including Linux, and that it can simulate testbeds with existing
NIC and switch RTL implementations. We also reproduce key findings from prior
work in congestion control, NIC architecture, and in-network computing in
SimBricks.
