#
14038:8ba13d8b7810 |
|
01-May-2019 |
Matthew Poremba <matthew.poremba@amd.com> |
mem: Option to toggle DRAM low-power states
Adding an option to enable DRAM low-power states. The low power states can have a significant impact on application performance (sim_ticks) on the order of 2-3x, especially for compute-gpu apps. The options allows for it to easily be enabled/disabled to compare performance numbers. The option is disabled by default.
Change-Id: Ib9bddbb792a1a6a4afb5339003472ff8f00a5859 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18548 Reviewed-by: Wendy Elsasser <wendy.elsasser@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com>
|
#
13980:62a28c423e91 |
|
16-May-2019 |
Jason Lowe-Power <jason@lowepower.com> |
configs: Generalize FileSystemConfig for non se.py
This patch updates the FileSystemConfig so it works with more kinds of config scripts (e.g., the Learning gem5 scripts).
There are 4 main changes: - Added system as a parameter to the config_filesystem function so the function can search the system for the number of CPUs instead of relying on options from Options.py - Instead of calling redirect_paths everywhere config_filesystem is used, now it is implicitly called. - Cleaned up the Ruby scripts a bit to remove redundant calls to config_filesystem - Added a config_filesystem call to the Ruby Learning gem5 script (currently the only Learning gem5 script that requires it).
In the future, I think it would be better to move the config_filesystem call into simulate.py, probably into the instantiate function. I tried to use the per-CPU configuration parameters instead of options from Options.py, but that's not possible until after the SimObject params have been finalized in instantiate.
Change-Id: Ie6501a7435cfb3ac9d2b45be3722388b34063b1e Signed-off-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18848 Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br> Tested-by: kokoro <noreply+kokoro@google.com>
|
#
13885:d10ea5e56cb0 |
|
18-Apr-2018 |
David Hashe <david.hashe@amd.com> |
configs: faux-filesystem fix w/ ruby in se mode
These changes are needed so that the config scripts can report cache hierarchy information to the faux filesystem.
This is useful for the ROCm runtime when it reads psuedofiles from the host filesytem from "/proc".
Change-Id: Iad3e6c088d47c9b93979f584de748367eae8259b Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/12121 Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Maintainer: Brandon Potter <Brandon.Potter@amd.com> Tested-by: kokoro <noreply+kokoro@google.com>
|
#
13774:a1be2a0c55f2 |
|
25-Feb-2019 |
Andreas Sandberg <andreas.sandberg@arm.com> |
configs: Use absolute import paths
Use absoluate import paths to be Python 3 compatible. This also imports absolute_import from __future__ to ensure that Python 2.7 behaves the same way as Python 3.
Change-Id: Ica06ed95814e9cd3e768b3e1785075e36f6e56d0 Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/16708 Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
|
#
13731:67cd980cb20f |
|
26-Jan-2019 |
Andreas Sandberg <andreas.sandberg@arm.com> |
configs: Fix Python 3 iterator and exec compatibility issues
Python 2.7 used to return lists for operations such as map and range, this has changed in Python 3. To make the configs Python 3 compliant, add explicit conversions from iterators to lists where needed, replace xrange with range, and fix changes to exec syntax.
This change doesn't fix import paths since that might require us to restructure the configs slightly.
Change-Id: Idcea8482b286779fc98b4e144ca8f54069c08024 Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/16002 Reviewed-by: Gabe Black <gabeblack@google.com>
|
#
13400:cf74d21e948f |
|
07-Nov-2018 |
Daniel R. Carvalho <odanrc@yahoo.com.br> |
configs: Add missing path to ruby imports
Add missing addToPath to ruby files, so that import modules from previous folder are visible.
Change-Id: I912d78a2f709974f72fe768e73abac1617126f46 Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br> Reviewed-on: https://gem5-review.googlesource.com/c/13995 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
|
#
12976:125099a94768 |
|
30-Aug-2018 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
configs: Use the same address ranges for dir and mem_ctrls
In Ruby, for every directory we create one memory controller for every range in the memory ranges. Previously the memory controllers and the directories created their address ranges independently and as a result a mismatch was possible. In fact, we assinged an interleaved address range with hasing for the memory controllers while the corresponding directories would be assigned the same interleaved address range without hashing.
This change uses the address range of the memory controllers to populate the list of address ranges for the corresponding directory and avoid bugs due to code duplication.
Change-Id: I1e321c81a254199e5aaa9f3b81f4a4642c60a67a Reviewed-on: https://gem5-review.googlesource.com/12318 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
|
#
12598:b80b2d9a251b |
|
12-Feb-2018 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
arch-arm, configs: Treat the bootloader rom as cacheable memory
Prior to this changeset the bootloader rom (instantiated as a SimpleMemory) in ruby Arm systems was treated as an IO device and it was fronted by a DMA controller. This changeset moves the bootloader rom and adds it to the system as another memory with a dedicated directory controller.
Change-Id: I094fed031cdef7f77a939d94f948d967b349b7e0 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/8741 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
|
#
12564:2778478ca882 |
|
06-Mar-2018 |
Gabe Black <gabeblack@google.com> |
config: Switch from the print statement to the print function.
Change-Id: I701fa58cfcfa2767ce9ad24da314a053889878d0 Reviewed-on: https://gem5-review.googlesource.com/8762 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Maintainer: Gabe Black <gabeblack@google.com>
|
#
12066:a4fd03c9ca5a |
|
04-Apr-2017 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
ruby, arm: Forward invalidations to the local exclusive monitor
ARM systems require local exclusive monitors for the implementation of synchronization primitives between processors. A ruby memory system needs to forward invalidations to the local exclusive monitors to to correctly determine their state.
Change-Id: I7bc4d0f2a5be0f4e36a25c87aa4a81a3f086fb3c Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/2904 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
|
#
12065:e3e51756dfef |
|
13-Mar-2017 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
ruby: Add support for address ranges in the directory
Previously the directory covered a flat address range that always started from address 0. This change adds a vector of address ranges with interleaving and hashing that each directory keeps track of and the necessary flexibility to support systems with non continuous memory ranges.
Change-Id: I6ea1c629bdf4c5137b7d9c89dbaf6c826adfd977 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/2903 Reviewed-by: Bradford Beckmann <brad.beckmann@amd.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
|
#
12014:f973caaf935d |
|
08-May-2017 |
Gabe Black <gabeblack@google.com> |
config: Fix up some configs to not use CPU aliases.
Support for CPU aliases were removed recently.
Change-Id: I3c1173dc34170d8639d95e52bf660f248848f77f Reviewed-on: https://gem5-review.googlesource.com/3100 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
|
#
11682:612f75cf36a0 |
|
14-Oct-2016 |
Andreas Hansson <andreas.hansson@arm.com> |
config: Make configs/common a Python package
Continue along the same line as the recent patch that made the Ruby-related config scripts Python packages and make also the configs/common directory a package.
All affected config scripts are updated (hopefully).
Note that this change makes it apparent that the current organisation and naming of the config directory and its subdirectories is rather chaotic. We mix scripts that are directly invoked with scripts that merely contain convenience functions. While it is not addressed in this patch we should follow up with a re-organisation of the config structure, and renaming of some of the packages.
|
#
11670:6ce719503eae |
|
13-Oct-2016 |
Andreas Hansson <andreas.hansson@arm.com> |
ruby: Fix regressions and make Ruby configs Python packages
This patch moves the addition of network options into the Ruby module to avoid the regressions all having to add it explicitly. Doing this exposes an issue in our current config system though, namely the fact that addtoPath is relative to the Python script being executed. Since both example and regression scripts use the Ruby module we would end up with two different (relative) paths being added. Instead we take a first step at turning the config modules into Python packages, simply by adding a __init__.py in the configs/ruby, configs/topologies and configs/network subdirectories.
As a result, we can now add the top-level configs directory to the Python search path, and then use the package names in the various modules. The example scripts are also updated, and the messy path-deducing variations in the scripts are unified.
|
#
11662:004d34b65092 |
|
06-Oct-2016 |
Tushar Krishna <tushar@ece.gatech.edu> |
config: add a separate config file for the network. This patch adds a new file configs/network/Network.py to setup the network, instead of doing that within Ruby.py.
|
#
11616:d726d0cea027 |
|
22-Aug-2016 |
David Hashe <david.j.hashe@gmail.com> |
config: KVM acceleration for apu_se.py
Add support for using KVM to accelerate APU simulations. The intended use case is to fast-forward through runtime initialization until the first kernel launch.
|
#
11596:329e49c419b1 |
|
10-Aug-2016 |
Andreas Sandberg <andreas.sandberg@arm.com> |
ruby: Implement support for functional accesses to PIO ranges
There are cases where we want to put boot ROMs on the PIO bus. Ruby currently doesn't support functional accesses to such memories since functional accesses are always assumed to go to physical memory. Add the required support for routing functional accesses to the PIO bus.
Change-Id: Ia5b0fcbe87b9642bfd6ff98a55f71909d1a804e3 Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Brad Beckmann <brad.beckmann@amd.com> Reviewed-by: Michael LeBeane <michael.lebeane@amd.com>
|
#
11172:9261e98e4501 |
|
14-Oct-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: profiler: provide the number of vnets through ruby system
The aim is to ultimately do away with the static function Network::getNumberOfVirtualNetworks().
|
#
11074:2763a59c73ff |
|
01-Sep-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: remove random seed We no longer use the C library based random number generator: random(). Instead we use the C++ library provided rng. So setting the random seed for the RubySystem class has no effect. Hence the variable and the corresponding option are being dropped.
|
#
11049:dfb0aa3f0649 |
|
19-Aug-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: reverts to changeset: bf82f1f7b040
|
#
11046:0cd13910b063 |
|
14-Aug-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: profiler: provide the number of vnets through ruby system
The aim is to ultimately do away with the static function Network::getNumberOfVirtualNetworks().
|
#
11041:d3bae341e151 |
|
14-Aug-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: remove random seed
We no longer use the C library based random number generator: random(). Instead we use the C++ library provided rng. So setting the random seed for the RubySystem class has no effect. Hence the variable and the corresponding option are being dropped.
|
#
11021:e8a6637afa4c |
|
14-Aug-2015 |
Joel Hestness <jthestness@gmail.com> |
ruby: Expose MessageBuffers as SimObjects
Expose MessageBuffers from SLICC controllers as SimObjects that can be manipulated in Python. This patch has numerous benefits: 1) First and foremost, it exposes MessageBuffers as SimObjects that can be manipulated in Python code. This allows parameters to be set and checked in Python code to avoid obfuscating parameters within protocol files. Further, now as SimObjects, MessageBuffer parameters are printed to config output files as a way to track parameters across simulations (e.g. buffer sizes)
2) Cleans up special-case code for responseFromMemory buffers, and aligns their instantiation and use with mandatoryQueue buffers. These two special buffers are the only MessageBuffers that are exposed to components outside of SLICC controllers, and they're both slave ends of these buffers. They should be exposed outside of SLICC in the same way, and this patch does it.
3) Distinguishes buffer-specific parameters from buffer-to-network parameters. Specifically, buffer size, randomization, ordering, recycle latency, and ports are all specific to a MessageBuffer, while the virtual network ID and type are intrinsics of how the buffer is connected to network ports. The former are specified in the Python object, while the latter are specified in the controller *.sm files. Unlike buffer-specific parameters, which may need to change depending on the simulated system structure, buffer-to-network parameters can be specified statically for most or all different simulated systems.
|
#
10898:96c0fe4a09f0 |
|
04-Jul-2015 |
David Hashe <david.hashe@amd.com> |
config: Update location of ruby topologies in help
Committed by: Nilay Vaish <nilay@cs.wisc.edu>
|
#
10720:67b3e74de9ae |
|
02-Mar-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
mem: Move crossbar default latencies to subclasses
This patch introduces a few subclasses to the CoherentXBar and NoncoherentXBar to distinguish the different uses in the system. We use the crossbar in a wide range of places: interfacing cores to the L2, as a system interconnect, connecting I/O and peripherals, etc. Needless to say, these crossbars have very different performance, and the clock frequency alone is not enough to distinguish these scenarios.
Instead of trying to capture every possible case, this patch introduces dedicated subclasses for the three primary use-cases: L2XBar, SystemXBar and IOXbar. More can be added if needed, and the defaults can be overridden.
|
#
10706:4206946d60fe |
|
26-Feb-2015 |
Jason Power <power.jg@gmail.com> |
Ruby: Update backing store option to propagate through to all RubyPorts
Previously, the user would have to manually set access_backing_store=True on all RubyPorts (Sequencers) in the config files. Now, instead there is one global option that each RubyPort checks on initialization.
Committed by: Nilay Vaish <nilay@cs.wisc.edu>
|
#
10630:64618b7c57b2 |
|
03-Jan-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
configs: ruby: removes bug introduced by 05b5a6cf3521
|
#
10551:d60a9bb99038 |
|
23-Nov-2014 |
Steve Reinhardt <steve.reinhardt@amd.com> |
Backed out prior changeset f9fb64a72259
Back out use of importlib to avoid implicitly creating dependency on Python 2.7.
|
#
10550:f9fb64a72259 |
|
23-Nov-2014 |
Gabe Black <gabeblack@google.com> |
config: ruby: Get rid of an "eval" and an "exec" operating on generated code.
We can get the same result using importlib.
|
#
10529:05b5a6cf3521 |
|
06-Nov-2014 |
Marc Orr <morr@cs.wisc.edu> |
x86 isa: This patch attempts an implementation at mwait.
Mwait works as follows: 1. A cpu monitors an address of interest (monitor instruction) 2. A cpu calls mwait - this loads the cache line into that cpu's cache. 3. The cpu goes to sleep. 4. When another processor requests write permission for the line, it is evicted from the sleeping cpu's cache. This eviction is forwarded to the sleeping cpu, which then wakes up.
Committed by: Nilay Vaish <nilay@cs.wisc.edu>
|
#
10525:77787650cbbc |
|
06-Nov-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: provide a backing store Ruby's functional accesses are not guaranteed to succeed as of now. While this is not a problem for the protocols that are currently in the mainline repo, it seems that coherence protocols for gpus rely on a backing store to supply the correct data. The aim of this patch is to make this backing store configurable i.e. it comes into play only when a particular option: --access-backing-store is invoked.
The backing store has been there since M5 and GEMS were integrated. The only difference is that earlier the system used to maintain the backing store and ruby's copy was write-only. Sometime last year, we moved to data being supplied supplied by ruby in SE mode simulations. And now we have patches on the reviewboard, which remove ruby's copy of memory altogether and rely completely on the system's memory to supply data. This patch adds back a SimpleMemory member to RubySystem. This member is used only if the option: access-backing-store is set to true. By default, the memory would not be accessed.
|
#
10524:fff17530cef6 |
|
06-Nov-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: interface with classic memory controller This patch is the final in the series. The whole series and this patch in particular were written with the aim of interfacing ruby's directory controller with the memory controller in the classic memory system. This is being done since ruby's memory controller has not being kept up to date with the changes going on in DRAMs. Classic's memory controller is more up to date and supports multiple different types of DRAM. This also brings classic and ruby ever more close. The patch also changes ruby's memory controller to expose the same interface.
|
#
10519:7a3ad4b09ce4 |
|
06-Nov-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: single physical memory in fs mode Both ruby and the system used to maintain memory copies. With the changes carried for programmed io accesses, only one single memory is required for fs simulations. This patch sets the copy of memory that used to reside with the system to null, so that no space is allocated, but address checks can still be carried out. All the memory accesses now source and sink values to the memory maintained by ruby.
|
#
10311:ad9c042dce54 |
|
01-Sep-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: message buffers: significant changes
This patch is the final patch in a series of patches. The aim of the series is to make ruby more configurable than it was. More specifically, the connections between controllers are not at all possible (unless one is ready to make significant changes to the coherence protocol). Moreover the buffers themselves are magically connected to the network inside the slicc code. These connections are not part of the configuration file.
This patch makes changes so that these connections will now be made in the python configuration files associated with the protocols. This requires each state machine to expose the message buffers it uses for input and output. So, the patch makes these buffers configurable members of the machines.
The patch drops the slicc code that usd to connect these buffers to the network. Now these buffers are exposed to the python configuration system as Master and Slave ports. In the configuration files, any master port can be connected any slave port. The file pyobject.cc has been modified to take care of allocating the actual message buffer. This is inline with how other port connections work.
|
#
10122:1268f1fd2714 |
|
20-Mar-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: garnet: convert network interfaces into clocked objects This helps in configuring the network interfaces from the python script and these objects no longer rely on the network object for the timing information.
|
#
10120:f5ceb3c3edb6 |
|
20-Mar-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
config: ruby: rename _cpu_ruby_ports to _cpu_ports
|
#
10118:5e1f04b4d5e4 |
|
20-Mar-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
config: remove ruby_fs.py
The patch removes the ruby_fs.py file. The functionality is being moved to fs.py. This would being ruby fs simulations in line with how ruby se simulations are started (using --ruby option). The alpha fs config functions are being combined for classing and ruby memory systems. This required renaming the piobus in ruby to iobus. So, we will have stats being renamed in the stats file for ruby fs regression.
|
#
10116:d61a59beb670 |
|
17-Mar-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
config: ruby: remove piobus from protocols This patch removes the piobus from the protocol config files. The ports are now connected to the piobus in the Ruby.py file.
|
#
10012:ec5a5bfb941d |
|
10-Jan-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: move all statistics to stats.txt, eliminate ruby.stats
|
#
10004:5d8b72563869 |
|
04-Jan-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: some small changes
|
#
9862:54d6728d99cf |
|
06-Sep-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: network: correct naming of routers
The routers are created before the network class. This results in the routers becoming children of the first link they are connected to and they get generic names like int_node and node_b. This patch creates the network object first and passes it to the topology creation function. Now the routers are children of the network object and names are much more sensible.
|
#
9841:69c158420c51 |
|
20-Aug-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: add option for number of transitions per cycle The number of transitions per cycle that a controller can carry out is a proxy for the number of ports that a controller has. This value is currently 32 which is way too high. The patch introduces an option for the number of ports and uses this option in the protocol files to set the number of transitions. The default value is being set to 4. None of the se regressions change. Ruby stats for the fs regression change and are being updated.
|
#
9826:014ff1fbff6d |
|
19-Aug-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
config: Move the memory instantiation outside FSConfig
This patch moves the instantiation of the memory controller outside FSConfig and instead relies on the mem_ranges to pass the information to the caller (e.g. fs.py or one of the regression scripts). The main motivation for this change is to expose the structural composition of the memory system and allow more tuning and configuration without adding a large number of options to the makeSystem functions.
The patch updates the relevant example scripts to maintain the current functionality. As the order that ports are connected to the memory bus changes (in certain regresisons), some bus stats are shuffled around. For example, what used to be layer 0 is now layer 1.
Going forward, options will be added to support the addition of multi-channel memory controllers.
|
#
9793:6e6cefc1db1f |
|
27-Jun-2013 |
Akash Bagdia <akash.bagdia@arm.com> |
sim: Add the notion of clock domains to all ClockedObjects
This patch adds the notion of source- and derived-clock domains to the ClockedObjects. As such, all clock information is moved to the clock domain, and the ClockedObjects are grouped into domains.
The clock domains are either source domains, with a specific clock period, or derived domains that have a parent domain and a divider (potentially chained). For piece of logic that runs at a derived clock (a ratio of the clock its parent is running at) the necessary derived clock domain is created from its corresponding parent clock domain. For now, the derived clock domain only supports a divider, thus ensuring a lower speed compared to its parent. Multiplier functionality implies a PLL logic that has not been modelled yet (create a separate clock instead).
The clock domains should be used as a mechanism to provide a controllable clock source that affects clock for every clocked object lying beneath it. The clock of the domain can (in a future patch) be controlled by a handler responsible for dynamic frequency scaling of the respective clock domains.
All the config scripts have been retro-fitted with clock domains. For the System a default SrcClockDomain is created. For CPUs that run at a different speed than the system, there is a seperate clock domain created. This domain incorporates the CPU and the associated caches. As before, Ruby runs under its own clock domain.
The clock period of all domains are pre-computed, such that no virtual functions or multiplications are needed when calling clockPeriod. Instead, the clock period is pre-computed when any changes occur. For this to be possible, each clock domain tracks its children.
|
#
9791:39c75548bcd4 |
|
27-Jun-2013 |
Akash Bagdia <akash.bagdia@arm.com> |
config: Rename clock option to Ruby clock
This patch changes the 'clock' option to 'ruby-clock' as it is only used by Ruby.
|
#
9594:219ad5fe8c04 |
|
22-Mar-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: convert Topology to regular class The Topology class in Ruby does not need to inherit from SimObject class. This patch turns it into a regular class. The topology object is now created in the constructor of the Network class. All the parameters for the topology class have been moved to the network class.
|
#
9593:9441ca79f3c8 |
|
22-Mar-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: network: move routers from topology to network
|
#
9576:2c094ad4dc70 |
|
06-Mar-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: garnet: fixed: implement functional access
|
#
9318:dec0b284ded9 |
|
27-Oct-2012 |
Jason Power <power.jg@gmail.com>, Joel Hestness <hestness@cs.wisc.edu> |
Ruby: Use block size in configuring directory bits in address This patch replaces hard coded values used in Ruby's configuration files for setting directory bits with values based on the block size in use.
|
#
9274:ba635023d4bb |
|
02-Oct-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: changes to simple network This patch makes the Switch structure inherit from BasicRouter, as is done in two other networks.
|
#
9232:3bb99fab80d4 |
|
19-Sep-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
AddrRange: Simplify AddrRange params Python hierarchy
This patch simplifies the Range object hierarchy in preparation for an address range class that also allows striping (e.g. selecting a few bits as matching in addition to the range).
To extend the AddrRange class to an AddrRegion, the first step is to simplify the hierarchy such that we can make it as lean as possible before adding the new functionality. The only class using Range and MetaRange is AddrRange, and the three classes are now collapsed into one.
|
#
9148:a7a72f42919e |
|
10-Aug-2012 |
Jason Power <powerjg@cs.wisc.edu> |
Ruby: Clean up topology changes This patch moves instantiateTopology into Ruby.py and removes the mem/ruby/network/topologies directory. It also adds some extra inheritance to the topologies to clean up some issues in the existing topologies.
|
#
9100:3caf131d7a95 |
|
11-Jul-2012 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: changes how Topologies are created
Instead of just passing a list of controllers to the makeTopology function in src/mem/ruby/network/topologies/<Topo>.py we pass in a function pointer which knows how to make the topology, possibly with some extra state set in the configs/ruby/<protocol>.py file. Thus, we can move all of the files from network/topologies to configs/topologies. A new class BaseTopology is added which all topologies in configs/topologies must inheirit from and follow its API.
|
#
8939:4c84b2566d2f |
|
06-Apr-2012 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: set SimpleTiming as the default cpu
|
#
8931:7a1dfb191e3f |
|
06-Apr-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
MEM: Enable multiple distributed generalized memories
This patch removes the assumption on having on single instance of PhysicalMemory, and enables a distributed memory where the individual memories in the system are each responsible for a single contiguous address range.
All memories inherit from an AbstractMemory that encompasses the basic behaviuor of a random access memory, and provides untimed access methods. What was previously called PhysicalMemory is now SimpleMemory, and a subclass of AbstractMemory. All future types of memory controllers should inherit from AbstractMemory.
To enable e.g. the atomic CPU and RubyPort to access the now distributed memory, the system has a wrapper class, called PhysicalMemory that is aware of all the memories in the system and their associated address ranges. This class thus acts as an infinitely-fast bus and performs address decoding for these "shortcut" accesses. Each memory can specify that it should not be part of the global address map (used e.g. by the functional memories by some testers). Moreover, each memory can be configured to be reported to the OS configuration table, useful for populating ATAG structures, and any potential ACPI tables.
Checkpointing support currently assumes that all memories have the same size and organisation when creating and resuming from the checkpoint. A future patch will enable a more flexible re-organisation.
|
#
8929:4148f9af0b70 |
|
05-Apr-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
Config: corrects the way Ruby attaches to the DMA ports With recent changes to the memory system, a port cannot be assigned a peer port twice. While making use of the Ruby memory system in FS mode, DMA ports were assigned peer twice, once for the classic memory system and once for the Ruby memory system. This patch removes this double assignment of peer ports.
|
#
8923:820111f58fbb |
|
30-Mar-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
Ruby: Remove the physMemPort and instead access memory directly
This patch removes the physMemPort from the RubySequencer and instead uses the system pointer to access the physmem. The system already keeps track of the physmem and the valid memory address ranges, and with this patch we merely make use of that existing functionality. The memory is modified so that it is possible to call the access functions (atomic and functional) without going through the port, and the memory is allowed to be unconnected, i.e. have no ports (since Ruby does not attach it like the conventional memory system).
|
#
8839:eeb293859255 |
|
13-Feb-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
MEM: Introduce the master/slave port roles in the Python classes
This patch classifies all ports in Python as either Master or Slave and enforces a binding of master to slave. Conceptually, a master (such as a CPU or DMA port) issues requests, and receives responses, and conversely, a slave (such as a memory or a PIO device) receives requests and sends back responses. Currently there is no differentiation between coherent and non-coherent masters and slaves.
The classification as master/slave also involves splitting the dual role port of the bus into a master and slave port and updating all the system assembly scripts to use the appropriate port. Similarly, the interrupt devices have to have their int_port split into a master and slave port. The intdev and its children have minimal changes to facilitate the extra port.
Note that this patch does not enforce any port typing in the C++ world, it merely ensures that the Python objects have a notion of the port roles and are connected in an appropriate manner. This check is carried when two ports are connected, e.g. bus.master = memory.port. The following patches will make use of the classifications and specialise the C++ ports into masters and slaves.
|
#
8732:fd510b6e124d |
|
30-Jan-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
Ruby: Connect system port in Ruby network test
This patch moves the connection of the system port to create_system in Ruby.py. Thereby it allows the failing Ruby test (and other Ruby systems) to run again.
|
#
8706:b1838faf3bcc |
|
17-Jan-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
MEM: Add port proxies instead of non-structural ports
Port proxies are used to replace non-structural ports, and thus enable all ports in the system to correspond to a structural entity. This has the advantage of accessing memory through the normal memory subsystem and thus allowing any constellation of distributed memories, address maps, etc. Most accesses are done through the "system port" that is used for loading binaries, debugging etc. For the entities that belong to the CPU, e.g. threads and thread contexts, they wrap the CPU data port in a port proxy.
The following replacements are made: FunctionalPort > PortProxy TranslatingPort > SETranslatingPortProxy VirtualPort > FSTranslatingPortProxy
|
#
8690:26998f7e3461 |
|
11-Jan-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
Ruby: Use map option for selecting b/w sparse and memory vector
|
#
8681:db978f3bcf51 |
|
10-Jan-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
Ruby: remove the files related to the tracer The Ruby Tracer is out of date with the changes that are being carried out to support checkpointing. Hence, it needs to be removed.
|
#
8638:e8a093d1e131 |
|
01-Dec-2011 |
gloh |
config: command line option to specify ruby output file
|
#
8612:df3b7a1e883f |
|
04-Nov-2011 |
Tushar Krishna <tushar@csail.mit.edu> |
GARNET: adding a fault model for resilient on-chip network research.
This patch adds a fault model, which provides the probability of a number of architectural faults in the interconnection network (e.g., data corruption, misrouting). These probabilities can be used to realistically inject faults in GARNET and faithfully evaluate the effectiveness of novel resilient NoC architectures.
|
#
8436:5648986156db |
|
30-Jun-2011 |
Brad Beckmann <Brad.Beckmann@amd.com>, Nilay Vaish <nilay@cs.wisc.edu> |
Ruby: Add support for functional accesses This patch rpovides functional access support in Ruby. Currently only the M5Port of RubyPort supports functional accesses. The support for functional through the PioPort will be added as a separate patch.
|
#
8322:19949c6de823 |
|
23-May-2011 |
Steve Reinhardt <steve.reinhardt@amd.com> |
config: tweak ruby configs to clean up hierarchy
Re-enabling implicit parenting (see previous patch) causes current Ruby config scripts to create some strange hierarchies and generate several warnings. This patch makes three general changes to address these issues.
1. The order of object creation in the ruby config files makes the L1 caches children of the sequencer rather than the controller; these config ciles are rewritten to assign the L1 caches to the controller first.
2. The assignment of the sequencer list to system.ruby.cpu_ruby_ports causes the sequencers to be children of system.ruby, generating warnings because they are already parented to their respective controllers. Changing this attribute to _cpu_ruby_ports fixes this because the leading underscore means this is now treated as a plain Python attribute rather than a child assignment. As a result, the configuration hierarchy changes such that, e.g., system.ruby.cpu_ruby_ports0 becomes system.l1_cntrl0.sequencer.
3. In the topology classes, the routers become children of some random internal link node rather than direct children of the topology. The topology classes are rewritten to assign the routers to the topology object first.
|
#
8258:7c377f5162f8 |
|
28-Apr-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
network: basic link bw for garnet and simple networks
This patch ensures that both Garnet and the simple networks use the bw value specified in the topology. To do so, the patch generalizes the specification of bw for basic links. This value is then translated to the specific value used by the simple and Garnet networks. Since Garent does not support non-uniformed link bandwidth, the patch also adds a check to ensure all bws are equal.
|
#
8257:7226aebb77b4 |
|
28-Apr-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
network: convert links & switches to first class C++ SimObjects
This patch converts links and switches from second class simobjects that were virtually ignored by the networks (both simple and Garnet) to first class simobjects that directly correspond to c++ ojbects manipulated by the topology and network classes. This is especially true for Garnet, where the links and switches directly correspond to specific C++ objects.
By making this change, many aspects of the Topology class were simplified.
|
#
7917:d9afb18a5008 |
|
07-Feb-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: numa bit fix for sparse memory
|
#
7832:de7601e6e19d |
|
10-Jan-2011 |
Nathan Binkert <nate@binkert.org> |
ruby: get rid of ruby's Debug.hh
Get rid of the Debug class Get rid of ASSERT and use assert Use DPRINTFR for ProtocolTrace
|
#
7809:9d94b886c61b |
|
03-Jan-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Ruby: Add option for random seed to Ruby.py This patch adds an option to the script Ruby.py for setting the parameter m_random_seed used for randomizing delays in the memory system. The option can be specified as "--random_seed <seed value>".
|
#
7663:abb78217021f |
|
30-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
config: fixed numa high bit setting bug
|
#
7661:b03534522b91 |
|
29-Aug-2010 |
Nathan Binkert <nate@binkert.org> |
ruby: None, not none
|
#
7566:6919df046bba |
|
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Recycle latency fix for hammer
Patch allows each individual message buffer to have different recycle latencies and allows the overall recycle latency to be specified at the cmd line. The patch also adds profiling info to make sure no one processor's requests are recycled too much.
|
#
7563:406e98960def |
|
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: fixed DirectoryMemory's numa_high_bit configuration
This fix includes the off-by-one bit selection bug for numa mapping.
|
#
7557:bd48f4547e77 |
|
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Improved try except blocks in ruby creation
Replaced the sys.exit in the try-except blocks with raise so that the python call stack will be printed
|
#
7555:ccd55d73c75d |
|
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
config: added cmd options to control ruby debug
|
#
7541:1e1f63dfd130 |
|
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
config: Improve ruby simobject names
This patch attaches ruby objects to the system before the topology is created so that their simobject names read their meaningful variable names instead of their topology name.
|
#
7538:5691b9dd51f4 |
|
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
config: reorganized how ruby specifies command-line options
|
#
7535:7f8213cb2337 |
|
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
config: moved python protocol config files
Moved the python protocol config files back to their original location to avoid addToPath calls.
|
#
7032:9f938aea1942 |
|
22-Mar-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Reorganized Ruby topology and protocol files
|
#
7025:9adf5b0ccc79 |
|
22-Mar-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Ruby support for sparse memory
The patch includes direct support for the MI example protocol.
|
#
7011:8b38d35e8ffc |
|
22-Mar-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Added a mesh network with directories at the corners
The patch creates a specific mesh network where directories are at the corners. The patch is a good example of how to create an arbitrary network, similar to the old file specified network, while leveraging scripts and loops when possible.
|
#
6923:1a46c5d58ede |
|
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Removed if else statement in create_system
Based on Steve's suggestion, the ugly if-elif statement and multiple protocol module import calls are removed and replaced with exec statements using the protocol string.
|
#
6918:9b57f0108bc8 |
|
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Converted Garnet to M5 configuration
|
#
6916:a421f60f0e87 |
|
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Added a mesh topology
|
#
6915:13e4df0df905 |
|
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: MESI_CMP_directory updated to the new config system
|
#
6911:1fdbff869ff4 |
|
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: MOESI_CMP_directory updated to the new config system
|
#
6908:0e1d7624e641 |
|
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: MOESI_CMP_token updates to use the new config system
|
#
6906:35da51c349e2 |
|
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: MI_example updates to use the new config system
|
#
6905:12390db623b4 |
|
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Memory size consistency check
Ruby's memory is now sized according to the size of M5 physical memory.
|
#
6903:27f47cf65ab7 |
|
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: convert to M5 MemorySize Converted both ruby caches and directory memory to use the M5 MemorySize python type.
|
#
6897:cfeb3d9563dd |
|
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: cleaned up ruby profilers Cleaned up the ruby profilers by moving the memory controller profiling code out of the main profiler object and into a separate object similar to the current CacheProfiler. Both the CacheProfiler and MemCntrlProfiler are specific to a particular Ruby object, CacheMemory and MemoryControl respectively. Therefore, these profilers should not be SimObjects and created by the python configuration system, but instead private objects. This simplifies the creation of these profilers.
|
#
6896:649e40aad897 |
|
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Removed RubySystem::getNumberOfSequencers removed the static function RubySystem::getNumberOfSequencers and replaced it with a python config variable
|
#
6893:9cdf9b65d946 |
|
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: FS support using the new configuration system
|
#
6892:6a2db6c8a9b1 |
|
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: reorganized ruby python configuration Reorganized ruby python configuration so that protocol and ruby memory system configuration code can be shared by multiple front-end configuration files (i.e. memory tester, full system, and hopefully the regression tester). This code works for memory tester, but have not tested fs mode.
|