# Copyright (c) 2016 ARM Limited # All rights reserved. # # The license below extends only to copyright in the software and shall # not be construed as granting a license to any other intellectual # property including but not limited to intellectual property relating # to a hardware implementation of the functionality of the software # licensed hereunder. You may use the software subject to the license # terms below provided that you ensure that this notice is replicated # unmodified and in its entirety in all distributions of the software, # modified or unmodified, in source code or in binary form. # # 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: Gabor Dozsa # This configuration file extends the example ARM big.LITTLE(tm) # configuration to enabe dist-gem5 siulations of big.LITTLE systems. import argparse import os import m5 from m5.objects import * import fs_bigLITTLE as bL m5.util.addToPath("../../dist") import sw def addOptions(parser): # Options for distributed simulation (i.e. dist-gem5) parser.add_argument("--dist", action="store_true", help="Distributed gem5"\ " simulation.") parser.add_argument("--is-switch", action="store_true", help="Select the network switch simulator process for"\ " a distributed gem5 run.") parser.add_argument("--dist-rank", default=0, action="store", type=int, help="Rank of this system within the dist gem5 run.") parser.add_argument("--dist-size", default=0, action="store", type=int, help="Number of gem5 processes within the dist gem5"\ " run.") parser.add_argument("--dist-server-name", default="127.0.0.1", action="store", type=str, help="Name of the message server host\nDEFAULT:"\ " localhost") parser.add_argument("--dist-server-port", default=2200, action="store", type=int, help="Message server listen port\nDEFAULT: 2200") parser.add_argument("--dist-sync-repeat", default="0us", action="store", type=str, help="Repeat interval for synchronisation barriers"\ " among dist-gem5 processes\nDEFAULT:"\ " --ethernet-linkdelay") parser.add_argument("--dist-sync-start", default="1000000000000t", action="store", type=str, help="Time to schedule the first dist synchronisation"\ " barrier\nDEFAULT:1000000000000t") parser.add_argument("--ethernet-linkspeed", default="10Gbps", action="store", type=str, help="Link speed in bps\nDEFAULT: 10Gbps") parser.add_argument("--ethernet-linkdelay", default="10us", action="store", type=str, help="Link delay in seconds\nDEFAULT: 10us") parser.add_argument("--etherdump", action="store", type=str, default="", help="Specify the filename to dump a pcap capture of"\ " the ethernet traffic") # Used by util/dist/gem5-dist.sh parser.add_argument("--checkpoint-dir", type=str, default=m5.options.outdir, help="Directory to save/read checkpoints") def addEthernet(system, options): # create NIC dev = IGbE_e1000() system.attach_pci(dev) system.ethernet = dev # create distributed ethernet link system.etherlink = 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) system.etherlink.int0 = Parent.system.ethernet.interface if options.etherdump: system.etherdump = EtherDump(file=options.etherdump) system.etherlink.dump = system.etherdump def main(): parser = argparse.ArgumentParser( description="Generic ARM big.LITTLE configuration with "\ "dist-gem5 support") bL.addOptions(parser) addOptions(parser) options = parser.parse_args() if options.is_switch: root = Root(full_system = True, system = sw.build_switch(options)) else: root = bL.build(options) addEthernet(root.system, options) if options.restore_from: checkpoint_path = os.path.join(options.checkpoint_dir, options.restore_from) else: checkpoint_path = None bL.instantiate(checkpoint_path) bL.run(options.checkpoint_dir) if __name__ == "__m5_main__": main()