From 90cb9827befb8e9bfb6cc6aa990390041b543d14 Mon Sep 17 00:00:00 2001 From: Mohammad Alian Date: Thu, 14 Apr 2016 14:07:42 -0400 Subject: [PATCH] dist: config file for distributed switch Distributed gem5 is the result of the convergence effort between multi-gem5 and pd-gem5. It relies on the base multi-gem5 infrastructure for packet forwarding, synchronisation and checkpointing but combines those with the elaborated network switch model from pd-gem5. --- configs/dist/sw.py | 75 +++++++++++++++++++++++++++ util/dist/gem5-dist.sh | 2 +- util/dist/test/test-2nodes-AArch64.sh | 2 +- 3 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 configs/dist/sw.py diff --git a/configs/dist/sw.py b/configs/dist/sw.py new file mode 100644 index 000000000..f21d2c576 --- /dev/null +++ b/configs/dist/sw.py @@ -0,0 +1,75 @@ +# Copyright (c) 2015 The University of Illinois Urbana Champaign +# All rights reserved +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer; +# redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution; +# neither the name of the copyright holders nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Authors: Mohammad Alian + +# This is an example of an n port network switch to work in dist-gem5. +# Users can extend this to have different different topologies + +import optparse +import sys + +import m5 +from m5.defines import buildEnv +from m5.objects import * +from m5.util import addToPath, fatal + +addToPath('../common') + +import Simulation +import Options + +def build_switch(options): + # instantiate an EtherSwitch + switch = EtherSwitch() + # instantiate distEtherLinks to connect switch ports + # to other gem5 instances + switch.portlink = [DistEtherLink(speed = options.ethernet_linkspeed, + delay = options.ethernet_linkdelay, + dist_rank = options.dist_rank, + dist_size = options.dist_size, + server_name = options.dist_server_name, + server_port = options.dist_server_port, + sync_start = options.dist_sync_start, + sync_repeat = options.dist_sync_repeat, + is_switch = True, + num_nodes = options.dist_size) + for i in xrange(options.dist_size)] + + for (i, link) in enumerate(switch.portlink): + link.int0 = switch.interface[i] + + return switch +# Add options +parser = optparse.OptionParser() +Options.addCommonOptions(parser) +Options.addFSOptions(parser) +(options, args) = parser.parse_args() + +system = build_switch(options) +root = Root(full_system = True, system = system) +Simulation.run(options, root, None, None) + diff --git a/util/dist/gem5-dist.sh b/util/dist/gem5-dist.sh index 8fa799acc..c0b49128a 100755 --- a/util/dist/gem5-dist.sh +++ b/util/dist/gem5-dist.sh @@ -168,7 +168,7 @@ done # Default values to use (in case they are not defined as command line options) DEFAULT_FS_CONFIG=$M5_PATH/configs/example/fs.py -DEFAULT_SW_CONFIG=$M5_PATH/configs/example/sw.py +DEFAULT_SW_CONFIG=$M5_PATH/configs/dist/sw.py DEFAULT_SW_PORT=2200 [ -z "$FS_CONFIG" ] && FS_CONFIG=$DEFAULT_FS_CONFIG diff --git a/util/dist/test/test-2nodes-AArch64.sh b/util/dist/test/test-2nodes-AArch64.sh index ebdf07110..fea1a7777 100644 --- a/util/dist/test/test-2nodes-AArch64.sh +++ b/util/dist/test/test-2nodes-AArch64.sh @@ -52,7 +52,7 @@ VMLINUX=$M5_PATH/binaries/vmlinux.aarch64.20140821 DTB=$M5_PATH/binaries/vexpress.aarch64.20140821.dtb FS_CONFIG=$GEM5_DIR/configs/example/fs.py -SW_CONFIG=$GEM5_DIR/configs/example/sw.py +SW_CONFIG=$GEM5_DIR/configs/dist/sw.py GEM5_EXE=$GEM5_DIR/build/ARM/gem5.opt BOOT_SCRIPT=$GEM5_DIR/util/dist/test/simple_bootscript.rcS