-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/3113/#review7185
-----------------------------------------------------------


Pretty cool that you have Ruby / gem5 working with multiple systems! Kudos for 
getting everything to actually work.

However, at a high-level, this patch makes the software engineer in me sad 
about the current state of Ruby. There are so many inter-dependencies on 
objects (mostly the RubySystem). Can you imagine the UML diagram of Ruby?! I'm 
not sure what to do about it, but it seems to me that we need a serious effort 
in the community to solve some of the inherent problems with Ruby's current 
codebase. This patch, and many of Nilay's patches as well, seem to just "patch" 
the underlying issues. I don't have any specific solutions, and I'm sorry to 
bring this rant up again...


configs/common/Options.py (line 248)
<http://reviews.gem5.org/r/3113/#comment6078>

    Why add this option here? Why not in multi-system-se.py since that is the 
only file that uses this option?



src/mem/ruby/common/NetDest.hh (line 46)
<http://reviews.gem5.org/r/3113/#comment6079>

    Does it make sense to leave these empty constructors around? Or are there 
times when a NetDest will be created without a RubySystem pointer?
    
    I'm just commenting here, but there are other places too.



src/mem/ruby/common/NetDest.cc (line 108)
<http://reviews.gem5.org/r/3113/#comment6080>

    Another high-level question that applies to more than just this line:
    
    Why not have MachineType_base_count(machineType) as a method in RubySystem, 
instead of passing the RubySystem pointer around? It wouldn't really change 
much, but seems like it would be more readable.


Is there any way to make m_ruby_system implicit in SLICC? I really don't like 
having to change all of the protocols.

- Jason Lowe-Power


On Sept. 14, 2015, 11:58 p.m., Brandon Potter wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://reviews.gem5.org/r/3113/
> -----------------------------------------------------------
> 
> (Updated Sept. 14, 2015, 11:58 p.m.)
> 
> 
> Review request for Default.
> 
> 
> Repository: gem5
> 
> 
> Description
> -------
> 
> Changeset 11093:3c32e2cb1c87
> ---------------------------
> ruby: allows multiple instances of ruby to be invoked
> 
> This patch removes the restriction that there can only be a single ruby
> system object in a given simulation. With the configuration supplied, it is
> possible to run an instance of ruby with any of the supplied topologies.
> 
> The problem centers around the use of globals and static class members in the
> ruby source. Conceptually, this prohibits multi-instance simulations
> since the ruby systems end up sharing values which should be distinct. (The
> earliest manifestation of this problem occurs when important runtime
> components use shared variables for MachineType sanity checks which will
> trigger failures.)
> 
> The idea behind the patch is to move as many as the statics/globals as
> necessary into the ruby system object. The ruby system object acts as the
> single point of reference for the child objects which needed the
> globals/statics. With multi-instance runs, each ruby system object will
> contain distinct values for the previous globals/statics. Unfortunately, this
> requires passing the ruby system pointer throughout the object hierarchy and
> may incur some minor performance overhead due to extra indirect references
> through the ruby system object.
> 
> 
> Diffs
> -----
> 
>   src/mem/protocol/MESI_Two_Level-L1cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   configs/common/Options.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   configs/example/multi-system-se.py PRE-CREATION 
>   configs/ruby/Ruby.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/cpu/testers/rubytest/Check.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/cpu/testers/rubytest/RubyTester.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/cpu/testers/rubytest/RubyTester.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/cpu/testers/rubytest/RubyTester.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MESI_Three_Level-L0cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MESI_Three_Level-L1cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/slicc/parser.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/slicc/symbols/StateMachine.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/slicc/symbols/Type.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/python/swig/pyobject.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/RubySystem.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/Sequencer.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/WireBuffer.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/CacheRecorder.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/CacheRecorder.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/DMASequencer.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/RubyPort.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/RubyPort.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/RubySystem.hh PRE-CREATION 
>   src/mem/ruby/structures/TBETable.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/TimerTable.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/TimerTable.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/WireBuffer.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MESI_Two_Level-L2cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MESI_Two_Level-dir.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MESI_Two_Level-dma.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MI_example-cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MI_example-dir.sm 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MI_example-dma.sm 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_directory-L1cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_directory-L2cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_directory-dir.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_directory-dma.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_token-L1cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_token-L2cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_token-dir.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_CMP_token-dma.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_hammer-cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_hammer-dir.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/MOESI_hammer-dma.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/Network_test-cache.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/Network_test-dir.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/RubySlicc_ComponentMapping.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/RubySlicc_Defines.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/RubySlicc_Exports.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/RubySlicc_Types.sm 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/protocol/RubySlicc_Util.sm 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/SConscript 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/Address.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/Address.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/DataBlock.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/DataBlock.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/NetDest.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/NetDest.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/SubBlock.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/common/SubBlock.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/AbstractBloomFilter.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/BlockBloomFilter.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/BlockBloomFilter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/BulkBloomFilter.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/BulkBloomFilter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/H3BloomFilter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/LSB_CountingBloomFilter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/MultiBitSelBloomFilter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/MultiGrainBloomFilter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/filters/NonCountingBloomFilter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/BasicLink.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/BasicLink.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/BasicLink.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/BasicRouter.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/BasicRouter.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/BasicRouter.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/MessageBuffer.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/MessageBuffer.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/MessageBuffer.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/Network.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/Network.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/Network.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/Topology.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/Topology.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/fault_model/FaultModel.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/fault_model/FaultModel.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/fault_model/FaultModel.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/profiler/AddressProfiler.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/profiler/Profiler.hh 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/slicc_interface/AbstractController.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/slicc_interface/AbstractController.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/slicc_interface/Controller.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/slicc_interface/Message.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/slicc_interface/RubyRequest.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/slicc_interface/RubySlicc_ComponentMapping.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/slicc_interface/RubySlicc_Util.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/CacheMemory.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/CacheMemory.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/DirectoryMemory.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/DirectoryMemory.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/DirectoryMemory.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/PerfectCacheMemory.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/PersistentTable.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/PersistentTable.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/Prefetcher.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/Prefetcher.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/RubyCache.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/RubyMemoryControl.hh 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/RubyMemoryControl.cc 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/RubyMemoryControl.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/structures/RubyPrefetcher.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/Sequencer.cc 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/ruby/system/Sequencer.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/slicc/ast/EnqueueStatementAST.py 
> 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/slicc/ast/NewExprAST.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
>   src/mem/slicc/ast/ObjDeclAST.py 62e1504b9c6413aa03a2f7d7eee88c8ea45cfe00 
> 
> Diff: http://reviews.gem5.org/r/3113/diff/
> 
> 
> Testing
> -------
> 
> gem5/util/regress (to check builds) and custom tests (which use the new 
> configuration)
> 
> 
> Thanks,
> 
> Brandon Potter
> 
>

_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to