This ensures `isort` is applied to all files in the repo. Change-Id: Ib7ced1c924ef1639542bf0d1a01c5737f6ba43e9
182 lines
5.9 KiB
Python
182 lines
5.9 KiB
Python
# Copyright (c) 2016-2017 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.
|
|
|
|
# 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 fs_bigLITTLE as bL
|
|
|
|
import m5
|
|
from m5.objects import *
|
|
|
|
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)
|
|
|
|
bL.instantiate(options, checkpoint_dir=options.checkpoint_dir)
|
|
bL.run(options.checkpoint_dir)
|
|
|
|
|
|
if __name__ == "__m5_main__":
|
|
main()
|