14185:f4017d66f4df |
16-Aug-2019 |
Gabe Black <gabeblack@google.com> |
mem: Put gem5 protocols in their own directory.
This reduces clutter in the src/mem directory, and makes it clear that those protocols are for the classic gem5 memory system, not ruby, TLM, etc.
Change-Id: I6cf6b21134d82f4f01991e4fe92dbea8c7e82081 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20231 Tested-by: kokoro <noreply+kokoro@google.com> Maintainer: Gabe Black <gabeblack@google.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> |
14184:11ac1337c5e2 |
16-Aug-2019 |
Gabe Black <gabeblack@google.com> |
mem: Move ruby protocols into a directory called ruby_protocol.
Now that the gem5 protocols are split out, it would be nice to put them in their own protocol directory. It's also confusing to have files called *_protocol which are not in the protocol directory.
Change-Id: I7475ee111630050a2421816dfd290921baab9f71 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20230 Reviewed-by: Gabe Black <gabeblack@google.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14182:04d886980a5e |
21-Aug-2019 |
Ciro Santilli <ciro.santilli@arm.com> |
mem-ruby: fix build with PROTOCOL=MOESI_hammer
Was failing with:
Error: Unrecognized variable: l1i_victim_addr
since: I2c43f22aba5af3a57e54b1c435e5d3fbba86d1d5
Change-Id: I7df666acb724ee541804dd7557753a9ba4005516 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20261 Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Reviewed-by: Pouya Fotouhi <pfotouhi@ucdavis.edu> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14161:67544e7cebb3 |
07-Aug-2019 |
Pouya Fotouhi <Pouya.Fotouhi@amd.com> |
mem-ruby: Use check_on_cache_probe on MI
This change uses check_on_cache_probe statement to check if the cacheline subject to eviction is locked in MI.
Change-Id: I276822e987e52f7682ff30f55880f295b6af023d Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19888 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
14160:d2a04d0ad93c |
07-Aug-2019 |
Pouya Fotouhi <Pouya.Fotouhi@amd.com> |
mem-ruby: Use check_on_cache_probe on MOESI hammer
This change uses check_on_cache_probe statement to check if the cacheline subject to eviction is locked in MOESI hammer.
Change-Id: I2c43f22aba5af3a57e54b1c435e5d3fbba86d1d5 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19891 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
14159:f0a7a75d049b |
07-Aug-2019 |
Pouya Fotouhi <Pouya.Fotouhi@amd.com> |
mem-ruby: Use check_on_cache_probe on MOESI CMP
This change uses check_on_cache_probe statement to check if the cacheline subject to eviction is locked in MOESI CMP.
Change-Id: I3a8879e10ebd94ef68194836475e656761fed62c Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19908 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
14158:adfd1421d69e |
07-Aug-2019 |
Pouya Fotouhi <Pouya.Fotouhi@amd.com> |
mem-ruby: Use check_on_cache_probe on MOESI
This change uses check_on_cache_probe statement to check if the cacheline subject to eviction is locked in MOESI.
Change-Id: Ie650ccdc15bb41b4088e534975b662408aaccf24 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19890 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
14156:beb72fa8eb83 |
07-Aug-2019 |
Pouya Fotouhi <Pouya.Fotouhi@amd.com> |
mem-ruby: Use check_on_cache_probe to protect locked lines from eviction
This change uses check_on_cache_probe statement to check if the cacheline subject to eviction is locked in MESI Three Level.
Change-Id: Ib0de54aa067c7603db1f7321cc4825b123b641ac Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19868 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14155:4e52ec7ae960 |
27-Feb-2019 |
Pouya Fotouhi <pfotouhi@ucdavis.edu> |
mem-ruby: Use check_on_cache_probe to protect locked lines from eviction
This change uses check_on_cache_probe statement to check if the cacheline subject to eviction is locked in MESI Two Level. Other protocols should be updated accordingly.
Signed-off-by: Pouya Fotouhi <pfotouhi@ucdavis.edu> Change-Id: Idcdbc8ee528eb5e4e2f8d56a268a3a92eadd95b1 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/16809 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14069:bdafa68f3cce |
06-May-2019 |
Daniel R. Carvalho <odanrc@yahoo.com.br> |
mem-ruby: Bloom filters - Remove in/decrement
Increment and decrement were functions created to supply the different naming convention used by the counting bloom filter. They were removed, and the set and unset functions were used in their place instead, as in the other filters.
Change-Id: I45732bdfa3083add0a975f374a0f3560003e9d09 Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18729 Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> |
13976:48a3d50649a1 |
04-Apr-2019 |
Tiago Muck <tiago.muck@arm.com> |
mem-ruby: MOESI_CMP_dir cleanup
Removed unused states and actions
Change-Id: I3dc684c78d4b92d219e71522ddb706a13f9874d1 Signed-off-by: Tiago Muck <tiago.muck@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18415 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: John Alsop <johnathan.alsop@amd.com> Reviewed-by: Matthew Poremba <matthew.poremba@amd.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
13975:31372ed09a54 |
19-Feb-2019 |
Tiago Muck <tiago.muck@arm.com> |
mem-ruby: Cache latencies for MOESI_CMP_dir
Modified both L1 and L2 controllers to take into account the cache latency parameters. Default values in the configuration script updated as well.
Change-Id: I72bb8dd29ee0b02da06e1addf13b266fe4d1e979 Signed-off-by: Tiago Muck <tiago.muck@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18414 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
13972:b67844f26cd8 |
19-Feb-2019 |
Tiago Muck <tiago.muck@arm.com> |
mem-ruby: Unique ranks for MOESI_CMP_dir in ports
Setting different values for the rank parameter for all inputs ports. If left unset, it defaults to 0. This may cause issues since the rank is used as an index in the controller's list of stalled buffers.
Change-Id: Ie8ff660b7450df959292311040aebf802657efcf Signed-off-by: Tiago Muck <tiago.muck@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18411 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
13971:0201983aad69 |
14-Feb-2019 |
Tiago Muck <tiago.muck@arm.com> |
mem-ruby: Change MOESI_CMP_Dir L2 addressing
L1 controller selects the L2 to message based on the assigned address ranges instead of explicitly interleaving bits in the L1 controller. This simplifies the L1 controller implementation a bit and allows for more flexibility when changing the address->controller mapping.
Change-Id: Ie67999bb977566939432a5045f65dbd2da81816a Signed-off-by: Tiago Muck <tiago.muck@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18410 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
13970:b5ae3dd624d4 |
14-Feb-2019 |
Tiago Muck <tiago.muck@arm.com> |
mem-ruby: Fix MOESI_CMP_dir debug msg
Change-Id: I3fd32bd2e81dbf9a8ea49a43727564b8a9d64767 Signed-off-by: Tiago Muck <tiago.muck@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18409 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
13969:6893a5af1f06 |
07-Feb-2019 |
Tiago Muck <tiago.muck@arm.com> |
mem-ruby: Prevent response stalls on MOESI_CMP_directory
When a message triggers a transition that has actions which allocate TBEs, the generated code automatically includes a check for the TBETable size before executing any action. If the table is full, the transition returns TransitionResult_ResourceStall and no more messages from the buffer are handled (until the next cycle).
This behavior may lead to deadlocks in the MOESI_CMP_directory protocol since events triggered by the response queue may allocate TBEs (e.g. L2 replacements triggered by the response queue). If the table is full, the queue is stalled preventing other responses from freeing TBEs.
This patch fixes this by handling WRITEBACK_DIRTY_DATA/CLEAN_DATA messages as requests and WB_ACK/WB_NACK as responses. All controllers are changed to work with the new types. With this fix, responses are always handled first in all controllers, and no response triggers TBE allocations.
Change-Id: I377c0ec4f06d528e9f0541daf3dcc621184f2524 Signed-off-by: Tiago Muck <tiago.muck@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18408 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Matthew Poremba <matthew.poremba@amd.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-by: John Alsop <johnathan.alsop@amd.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
13949:56b621267cf0 |
24-Jan-2019 |
Tiago Muck <tiago.muck@arm.com> |
mem-ruby: Fix MOESI_CMP_directory blocked line handling
Using recycle in the L2 controllers to put messages back into the buffer may lead to starvation when there are many L1 requests for the same line. This can easily trigger the deadlock detection mechanism in configurations with many cores (16+). Replacing recycle by stall_and_wait for L1 requests avoids this issue. wakeUpBuffers calls were added to all transitions from transient to stable states.
Change-Id: I28b8aeacc48919ccf38e69653cd9205a4153514b Signed-off-by: Tiago Muck <tiago.muck@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17568 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Matthew Poremba <matthew.poremba@amd.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com> |
13660:7c2b97d962f0 |
19-Jan-2019 |
Pouya Fotouhi <pfotouhi@ucdavis.edu> |
mem-ruby: Fixing MESI Three Level
Adding back some changes done in patch 676ae57827. Transient state IS_I, STALE_DATA, Data_Stale event are necessary.
Issue: (cacheline A, initial state for P0 and P1 is I) | P0 | P1 | |GETX (A)| | | |GETS (A)| |Inv_All | | P1 never sends the ACK - deadlock It should ACK, later upon data use it as stale data, and got to I.
Solution: P1(A): GETS: I->IS Inv_All: IS->IS_I, Send ACK Data: IS_I->I, STALE_DATA to L0
Signed-off-by: Pouya Fotouhi <pfotouhi@ucdavis.edu> Change-Id: I1e7b2c05439d08579c68d8eb444e0f332e75e07f Reviewed-on: https://gem5-review.googlesource.com/c/15715 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
13584:6b33c3d70473 |
13-Jan-2019 |
Zicong Wang <wangzicong@nudt.edu.cn> |
mem-ruby: Fix missing TBE allocation and deallocation
The TBE allocation and deallcation are currently missing during the directory state transition from I to M in protocol MI_example.
Change-Id: If7569c02faf56ea84c34ee1345f1a33d318cdfff Signed-off-by: Zicong Wang <wangzicong@nudt.edu.cn> Reviewed-on: https://gem5-review.googlesource.com/c/15535 Reviewed-by: Pouya Fotouhi <pfotouhi@ucdavis.edu> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
13368:c6c62c2cb733 |
04-Oct-2018 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
mem-ruby: Fix MOESI_CMP_directory in ports order
To avoid deadlocks ruby objects typically prioritize the handling of responses to all other events. The order in which in_port statements are written determine the order in which they are handled. This patch fixes the order of in_order statements for the L2 cache in the MOESI_CMP_directory.
Change-Id: I62248b0480a88ac2cd945425155f0961a1cf6cb1 Signed-off-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/13595 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
12651:1c704ca0944a |
20-Feb-2018 |
Brandon Potter <brandon.potter@amd.com> |
ruby,gpu-compute: bugfix for GPU_VIPER* protocols
12db50c895 changed how directory mapping works, but it seems to have broken the VIPER variants of the GPU protocols. The fix involves declaring the function in the related '.sm' files.
Change-Id: I116980d42a4aa648369058b529c9f8d9693eb894 Reviewed-on: https://gem5-review.googlesource.com/8521 Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com> |
12650:afa8b777a821 |
16-Feb-2018 |
Brandon Potter <brandon.potter@amd.com> |
ruby: bugfix for MESI_Three_Level protocol
Since a3177645, the MESI_Three_Level protocol does not build. This changeset addresses the problem by adding the L0Cache machine type to the static machine type declaration in Ruby's export file.
Change-Id: I6327547fcb34595619caeb73932c0032f5f65c9f Reviewed-on: https://gem5-review.googlesource.com/8383 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
12649:a7ae239df810 |
13-Apr-2018 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
mem-ruby: fix more style issues in AMD licenses
Change-Id: I6585c5664d966989991f61303548aed634cf298a Reviewed-on: https://gem5-review.googlesource.com/9841 Reviewed-by: Michael LeBeane <Michael.Lebeane@amd.com> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com> |
12647:6d7e2f321496 |
12-Apr-2018 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
configs, mem-ruby: fix issues with style in AMD license
fixes line length and white space issues.
Change-Id: Ia04a91ec68cae2bcdabeb93bb1a0f74e8e5486c3 Reviewed-on: https://gem5-review.googlesource.com/9801 Reviewed-by: Bradford Beckmann <brad.beckmann@amd.com> Maintainer: Bradford Beckmann <brad.beckmann@amd.com> |
12578:8196ae6fceba |
05-Mar-2018 |
Rico Amslinger <rico.amslinger@informatik.uni-augsburg.de> |
mem-ruby: Fix RubyPrefetcher support in MESI_Two_Level
Only a small quantity of prefetches were issued, as the positive feedback mechanism was not implemented. This commit adds a new action po_observeHit, which notifies the RubyPrefetcher of successful prefetches and resets the prefetch flag.
When a cache line was replaced by a prefetch, the wrong queue could be stalled. This commit adds a new event PF_L1_Replacement, which stalls the correct queue.
The behavior when receiving a prefetch or instruction fetch while in PF_IS_I (prefetch caused GETs, but got invalidated before the response was received) was undefined. This was changed to drop the prefetch request or change the state to non-prefetch, respectively. This behavior is analogous to IS_I (non-prefetch caused GETs, but got invalidated before the response was received) and the data case, respectively.
In my local branch a major (20+%) performance increase can be observed in SPEC2006 gobmk and leslie3d when enabling the prefetcher. Some other benchmarks like bwaves, GemsFDTD, sphinx and wrf show smaller (~10%) performance increases. Unfortunately, the performance in most other SPEC benchmarks is still poor, most likely as the prefetcher does not detect strides fast/often enough. In order to push the change timely (most benchmarks have runtimes in the order of days on my machine even with the smallest parameters) after checkout, I have only run gobmk with the base repository + this commit. The results match those of my local branch.
Change-Id: I9903a2fcd02060ea5e619b409f31f7d6fac47ae8 Reviewed-on: https://gem5-review.googlesource.com/8801 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Swapnil Haria <swapnilster@gmail.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
12437:0ef54c28bb34 |
02-Jan-2018 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
mem-ruby: Fix wakeup timeouts for the MOESI_CMP_token protocol
This changeset fixes a bug that was affecting the MOESI_CMP_token protocol where setting the next timeout required an absolute tick in the future.
Change-Id: Ibfdb59354e13c7e552cb3389e71bda010f333249 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/7163 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
12436:c56112090c61 |
02-Jan-2018 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
mem-ruby: Remove function that maps responses to a DMA engine
The function map_Address_to_DMA was used to route responses to the first (and assumed to be the only) DMA engine in the system. This function is now unused as protocols handle responses and route them to the right DMA engine.
Change-Id: I2fba913cf2f12321d1a1e38e7ee85bdf26b8a47a Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/7162 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
12435:146e465343b4 |
02-Jan-2018 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
mem-ruby: Add support for multiple DMA engines in MESI_Two_Level
Previously the MESI_Two_Level protocol supported systems with a single DMA engine and responses from the directory to DMA requests were routed back to the only DMA engine. This changeset adds support for multiple DMA engines in the system by routing the response to the DMA engine that originally sent the request.
Change-Id: I10ceda682ea29746636862ec8ef2a9c4220ca045 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/7161 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
12246:9ffa51416f39 |
08-Nov-2017 |
Gabe Black <gabeblack@google.com> |
scons: Move Transform and termcap functionality into their own files.
Change-Id: Ica08e93f3873a7eafd02fe7d44c3bdbf0ce7f6b7 Reviewed-on: https://gem5-review.googlesource.com/5565 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.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> |
11966:23791911437e |
13-Mar-2017 |
Javier Cano-Cano <javier.cano555@gmail.com> |
ruby: Fix MOESI_CMP_directory for new DMA status changes.
Multiple outstanding DMA requests introduced new DMA states that didn't be considered into slicc code. This patch implements the missed DMA state changes on MOESI_CMP_directory protocol.
Change-Id: I700d441d76556b7e77e0d507904af6ec6ba59cc2 Signed-off-by: Michael LeBeane <michael.lebeane@amd.com> Reviewed-on: https://gem5-review.googlesource.com/2380 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Michael LeBeane <Michael.Lebeane@amd.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
11710:9e5050028323 |
19-Nov-2016 |
Sooraj Puthoor <puthoorsooraj@gmail.com> |
ruby: init MessageSizeType of SequencerMsg to Request_Control
SequencerMsg is autogenerated by slicc scripts and the MessageSizeType is initialized to the max enume value by default. The DMASequencer pushes this message to the mandatory queue and since the MessageSizeType is unitialized, string_to_MessageSizeType() function used by traces to print the message fails with a panic. This patch avoids this problem by initializing MessageSizeType of SequencerMsg to Request_Control. |
11702:0bf388858d1e |
26-Oct-2016 |
Michael LeBeane <michael.lebeane@amd.com> |
ruby: Allow multiple outstanding DMA requests DMA sequencers and protocols can currently only issue one DMA access at a time. This patch implements the necessary functionality to support multiple outstanding DMA requests in Ruby. |
11660:cfa97c37117a |
06-Oct-2016 |
Tushar Krishna <tushar@ece.gatech.edu> |
ruby: rename ALPHA_Network_test protocol to Garnet_standalone. Over the past 6 years, we realized that the protocol is essentially used to run the garnet network in a standalone manner, and feed standard synthetic traffic patterns through it. |
11459:e41eca4aecbb |
26-Apr-2016 |
Matthew Poremba <matthew.poremba@amd.com> |
ruby: Rename pkt to m_pkt so it may be accessed via SLICC
Allow usage of packet class in ruby for convenience purposes. This may be used to access members of the packet/request class (e.g., via helper functions) and/or push protocol specific information to the packets SenderState without needing to modify SLICC types and protocols in multiple locations. |
11311:01e65448c425 |
22-Jan-2016 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: removed Write_Only AccessPermission |
11308:7d8836fd043d |
19-Jan-2016 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
gpu-compute: AMD's baseline GPU model |
11307:bd7d06ea90f5 |
19-Jan-2016 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
mem: write combining for ruby protocols
This patch adds support for write-combining in ruby. |
11306:a5340a2a24f9 |
19-Jan-2016 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
* * * mem: support for gpu-style RMWs in ruby
This patch adds support for GPU-style read-modify-write (RMW) operations in ruby. Such atomic operations are traditionally executed at the memory controller (instead of through an L1 cache using cache-line locking).
Currently, this patch works by propogating operation functors through the memory system. |
11305:78c1e4f5dfc5 |
20-Jul-2015 |
Blake Hechtman <blake.hechtman@amd.com> |
mem: misc flags for AMD gpu model
This patch add support to mark memory requests/packets with attributes defined in HSA, such as memory order and scope. |
11283:4cc8b312f026 |
20-Jul-2015 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
ruby: slicc: have a static MachineType
This patch is imported from reviewboard patch 2551 by Nilay. This patch moves from a dynamically defined MachineType to a statically defined one. The need for this patch was felt since a dynamically defined type prevents us from having types for which no machine definition may exist.
The following changes have been made: i. each machine definition now uses a type from the MachineType enumeration instead of any random identifier. This required changing the grammar and the *.sm files. ii. MachineType enumeration defined statically in RubySlicc_Exports.sm. * * * normal protocol fixes for nilay's parser machine type fix |
11282:afdcebd314be |
20-Jul-2015 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
ruby: slicc: remove support for single machine, multiple types
This patch is imported from reviewboard patch 2550 by Nilay. It was possible to specify multiple machine types with a single state machine. This seems unnecessary and is being removed. |
11209:d5a7a4da9f63 |
13-Nov-2015 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
slicc: fixes for the Address to Addr changeset (11025)
misc changes now that Address has become Addr including int to address util function |
11208:fa3e56b6e0b6 |
13-Nov-2015 |
Joe Gross <joseph.gross@amd.com> |
ruby: add BoolVec
The BoolVec typedef and insertion operator overload function simplify usage of vectors of type bool |
11122:721d3e248f75 |
23-Sep-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: bloom filters: refactor code |
11118:75c1e564a725 |
18-Sep-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: print addresses in hex Changeset 4872dbdea907 replaced Address by Addr, but did not make changes to print statements. So the addresses which were being printed in hex earlier along with their line address, were now being printed in decimals. This patch adds a function printAddress(Addr) that can be used to print the address in hex along with the lines address. This function has been put to use in some of the places. At other places, change has been made to print just the address in hex. |
11114:2910a31917b7 |
16-Sep-2015 |
Lena Olson <lena@cs.wisc.edu> |
ruby: Add missing block deallocations in MOESI_hammer
Some blocks in MOESI hammer were not getting deallocated when they were set to an idle state (e.g. by invalidate or other_getx/s messages). While functionally correct, this caused some bad effects on performance, such as blocks in I in the L1s getting sent to the L2 upon eviction, in turn evicting valid blocks. Also, if a valid block was in LRU, that block could be evicted rather than a block in I. This patch adds in the missing deallocations.
Committed by: Nilay Vaish<nilay@cs.wisc.edu> |
11111:6da33e720481 |
16-Sep-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: message buffer, timer table: significant changes
This patch changes MessageBuffer and TimerTable, two structures used for buffering messages by components in ruby. These structures would no longer maintain pointers to clock objects. Functions in these structures have been changed to take as input current time in Tick. Similarly, these structures will not operate on Cycle valued latencies for different operations. The corresponding functions would need to be provided with these latencies by components invoking the relevant functions. These latencies should also be in Ticks.
I felt the need for these changes while trying to speed up ruby. The ultimate aim is to eliminate Consumer class and replace it with an EventManager object in the MessageBuffer and TimerTable classes. This object would be used for scheduling events. The event itself would contain information on the object and function to be invoked.
In hindsight, it seems I should have done this while I was moving away from use of a single global clock in the memory system. That change led to introduction of clock objects that replaced the global clock object. It never crossed my mind that having clock object pointers is not a good design. And now I really don't like the fact that we have separate consumer, receiver and sender pointers in message buffers. |
11107:43857904aff3 |
16-Sep-2015 |
Anthony Gutierrez <atgutier@umich.edu> |
slicc: export uint64_t instead of uint64 |
11087:3c4bda5a2f66 |
05-Sep-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: call setMRU from L1 controllers, not from sequencer Currently the sequencer calls the function setMRU that updates the replacement policy structures with the first level caches. While functionally this is correct, the problem is that this requires calling findTagInSet() which is an expensive function. This patch removes the calls to setMRU from the sequencer. All controllers should now update the replacement policy on their own.
The set and the way index for a given cache entry can be found within the AbstractCacheEntry structure. Use these indicies to update the replacement policy structures. |
11084:ee2fcca7b58a |
05-Sep-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: declare all protocol message buffers as parameters
MessageBuffer is a SimObject now. There were protocols that still declared some of the message buffers are variables of the controller, but not as input parameters. Special handling was required for these variables in the SLICC compiler. This patch changes this. Now all message buffers are declared as input parameters. |
11049:dfb0aa3f0649 |
19-Aug-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: reverts to changeset: bf82f1f7b040 |
11048:110cce93d398 |
14-Aug-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: add accessor functions to SLICC def of MachineID |
11033:9a0022457323 |
14-Aug-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: call setMRU from L1 controllers, not from sequencer Currently the sequencer calls the function setMRU that updates the replacement policy structures with the first level caches. While functionally this is correct, the problem is that this requires calling findTagInSet() which is an expensive function. This patch removes the calls to setMRU from the sequencer. All controllers should now update the replacement policy on their own.
The set and the way index for a given cache entry can be found within the AbstractCacheEntry structure. Use these indicies to update the replacement policy structures. |
11028:3a5190683bf2 |
14-Aug-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: drop the [] notation for lookup function.
This is in preparation for adding a second arugment to the lookup function for the CacheMemory class. The change to *.sm files was made using the following sed command:
sed -i 's/\[\([0-9A-Za-z._()]*\)\]/.lookup(\1)/' src/mem/protocol/*.sm |
11025:4872dbdea907 |
14-Aug-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: replace Address by Addr This patch eliminates the type Address defined by the ruby memory system. This memory system would now use the type Addr that is in use by the rest of the system. |
11024:bc179fa0b91b |
14-Aug-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: rename variables Addr to addr
Avoid clash between type Addr and variable name Addr. |
11022:e6e3b7097810 |
14-Aug-2015 |
Joel Hestness <jthestness@gmail.com> |
ruby: Protocol changes for SimObject MessageBuffers |
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. |
11020:882ce080c9f7 |
14-Aug-2015 |
Joel Hestness <jthestness@gmail.com> |
ruby: Change PerfectCacheMemory::lookup to return pointer
CacheMemory and DirectoryMemory lookup functions return pointers to entries stored in the memory. Bring PerfectCacheMemory in line with this convention, and clean up SLICC code generation that was in place solely to handle references like that which was returned by PerfectCacheMemory::lookup. |
10990:0a45bbe8536a |
03-Aug-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: mesi three level: multiple corrections to the protocol
1. Eliminate state NP in L0 and L1 Caches: The two states 'NP' and 'I' both mean that the cache block is not present in the cache. 'I' also means that the cache entry has been allocated. This causes problems when we do not correctly initialize the cache entry when it is re-used. Hence, this patch eliminates the state NP altogether. Everytime a new block comes into the cache, a cache entry is allocated. Everytime a block leaves, the corresponding entry is deallocated.
2. Separate transient state for instruction fetches: purely for accouting purposes.
3. Drop state IS_I in L1 Cache and the message type STALE_DATA: when invalidation is received for a block in IS, the block used to be moved to IS_I. This meant that the data that would arrive in future would be used but not stored since the controller lost the permissions after gaining them. This state is being dropped and now invalidation messages would not processed till the data has arrived. This also means that STALE_DATA type is not longer required. |
10989:75f7ae6304f3 |
03-Aug-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: mesi two,three level: copy data only when dirty
The level 2 controller has a bug. In one particular action, the data block was copied from a message irrespective whether the block is dirty or not. In cases when L1 sends no data, the data value copied was incorrect. |
10984:a86f453a7caa |
20-Jul-2015 |
Brad Beckmann <Brad.Beckmann@amd.com> |
slicc: enable overloading in functions not in classes
For many years the slicc symbol table has supported overloaded functions in external classes. This patch extends that support to functions that are not part of classes (a.k.a. no parent). For example, this support allows slicc to understand that mapAddressToRange is overloaded and the NodeID is an optional parameter. |
10979:3c11859e4a81 |
20-Jul-2015 |
David Hashe <david.hashe@amd.com> |
ruby: adds size and empty apis to the msg buffer stallmap |
10978:436d5dde4bb7 |
20-Jul-2015 |
David Hashe <david.hashe@amd.com> |
ruby: fix deadlock bug in banked array resource checks
The Ruby banked array resource checks (initiated from SLICC) did a check and allocate at the same time. If a transition needs more than one resource, then it might check/allocate resource #1, then fail to get resource #2. Another transition might then try to get the same resources, but in reverse order. Deadlock.
This patch separates resource checking and resource reservation into two steps to avoid deadlock. |
10975:eba4e93665fc |
20-Jul-2015 |
David Hashe <david.hashe@amd.com> |
mem: add request types for acquire and release
Add support for acquire and release requests. These synchronization operations are commonly supported by several modern instruction sets. |
10974:bbdf1177f250 |
20-Jul-2015 |
David Hashe <david.hashe@amd.com> |
ruby: allocate a block in CacheMemory without updating LRU state |
10973:4820cc8408b0 |
20-Jul-2015 |
David Hashe <david.hashe@amd.com> |
ruby: speed up function used for cache walks
This patch adds a few helpful functions that allow .sm files to directly invalidate all cache blocks using a trigger queue rather than rely on each individual cache block to be invalidated via requests from the mandatory queue. |
10969:a588fceeb834 |
20-Jul-2015 |
David Hashe <david.hashe@amd.com> |
ruby: give access to cache tag/data latencies from SLICC
This patch exposes the tag and data array latencies to the SLICC state machines so that it can be used to determine the correct enqueue latency for response messages. |
10963:51f40b101a56 |
20-Jul-2015 |
David Hashe <david.hashe@amd.com> |
slicc: support for multiple message types on the same buffer
This patch allows SLICC protocols to use more than one message type with a message buffer. For example, you can declare two in ports as such:
in_port(ResponseQueue_in, ResponseMsg, responseFromDir, rank=3) { ... } in_port(tgtResponseQueue_in, TgtResponseMsg, responseFromDir, rank=2) { ... } |
10956:19515f842044 |
20-Jul-2015 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: re-added the addressToInt slicc interface function
This helper function is very useful converting address offsets to integers that can be used for protocol specific destination mapping. |
10895:287285860dd6 |
04-Jul-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: drop NetworkMessage class
This patch drops the NetworkMessage class. The relevant data members and functions have been moved to the Message class, which was the parent of NetworkMessage. |
10894:52c793be01e7 |
04-Jul-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: mesi three level: name change to avoid clash The accessor function getDestination() for Destination variable in the coherence message clashes with the getDestination() that is part of the Message class. Hence the name change. |
10865:282c2a89ace8 |
07-Jun-2015 |
Marco Elver <marco.elver@ed.ac.uk> |
ruby: Fix MESI consistency bug
Fixes missed forward eviction to CPU. With the O3CPU this can lead to load-load reordering, as the LQ is never notified of the invalidate.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
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. |
10522:13312d6e1caf |
06-Nov-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: coherence protocols: remove data block from dirctory entry This patch removes the data block present in the directory entry structure of each protocol in gem5's mainline. Firstly, this is required for moving towards common set of memory controllers for classic and ruby memory systems. Secondly, the data block was being misused in several places. It was being used for having free access to the physical memory instead of calling on the memory controller.
From now on, the directory controller will not have a direct visibility into the physical memory. The Memory Vector object now resides in the Memory Controller class. This also means that some significant changes are being made to the functional accesses in ruby. |
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. |
10443:36afc9dc6f7e |
11-Oct-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: mesi: slight renaming |
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. |
10308:8c0870dbae5c |
01-Sep-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: slicc: change the way configurable members are specified There are two changes this patch makes to the way configurable members of a state machine are specified in SLICC. The first change is that the data member declarations will need to be separated by a semi-colon instead of a comma. Secondly, the default value to be assigned would now use SLICC's assignment operator i.e. ':='. |
10306:4c0de6e0669c |
01-Sep-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: mesi three level: slight naming changes. |
10305:76745b567dc3 |
01-Sep-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: slicc: donot prefix machine name to variables This changeset does away with prefixing of member variables of state machines with the identity of the machine itself. |
10231:cb2e6950956d |
31-May-2014 |
Steve Reinhardt <steve.reinhardt@amd.com> |
style: eliminate equality tests with true and false
Using '== true' in a boolean expression is totally redundant, and using '== false' is pretty verbose (and arguably less readable in most cases) compared to '!'.
It's somewhat of a pet peeve, perhaps, but I had some time waiting for some tests to run and decided to clean these up.
Unfortunately, SLICC appears not to have the '!' operator, so I had to leave the '== false' tests in the SLICC code. |
10227:3ffc86fefc49 |
23-May-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: remove old protocol documentation |
10226:056363356d15 |
23-May-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: message buffer: drop dequeue_getDelayCycles() The functionality of updating and returning the delay cycles would now be performed by the dequeue() function itself. |
10155:3b0bcc8c34ca |
08-Apr-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: slicc: change enqueue statement As of now, the enqueue statement can take in any number of 'pairs' as argument. But we only use the pair in which latency is the key. This latency is allowed to be either a fixed integer or a member variable of controller in which the expression appears. This patch drops the use of pairs in an enqueue statement. Instead, an expression is allowed which will be interpreted to be the latency of the enqueue. This expression can anything allowed by slicc including a constant integer or a member variable. |
10154:525b7e432f76 |
08-Apr-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: coherence protocols: drop the phrase IntraChip The phrase is no longer valid since we do not distinguish between inter and intra chip communication. |
10084:38aeea570604 |
23-Feb-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: protocols: remove unused action z_stall |
10077:552db6109dd3 |
20-Feb-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: mesi three level: rename incorrectly named files Two files had been incorrectly named with a .cache suffix. |
10014:a362694dda2d |
17-Jan-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: remove unused label no_vector |
10008:5176f0a71e56 |
04-Jan-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: add a three level MESI protocol.
The first two levels (L0, L1) are private to the core, the third level (L2)is possibly shared. The protocol supports clustered designs. For example, one can have two sets of two cores. Each core has an L0 and L1 cache. There are two L2 controllers where each set accesses only one of the L2 controllers. |
10007:94d286db85c1 |
04-Jan-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: rename MESI_CMP_directory to MESI_Two_Level
This is because the next patch introduces a three level hierarchy. |
10005:8c2b0dc16ccd |
04-Jan-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: add support for clusters
A cluster over here means a set of controllers that can be accessed only by a certain set of cores. For example, consider a two level hierarchy. Assume there are 4 L1 controllers (private) and 2 L2 controllers. We can have two different hierarchies here:
a. the address space is partitioned between the two L2 controllers. Each L1 controller accesses both the L2 controllers. In this case, each L1 controller is a cluster initself.
b. both the L2 controllers can cache any address. An L1 controller has access to only one of the L2 controllers. In this case, each L2 controller along with the L1 controllers that access it, form a cluster.
This patch allows for each controller to have a cluster ID, which is 0 by default. By setting the cluster ID properly, one can instantiate hierarchies with clusters. Note that the coherence protocol might have to be changed as well. |
9997:4e4437251d35 |
26-Dec-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: fix bugs in mesi cmp directory protocol This patch fixes couple of bugs in the L2 controller of the mesi cmp directory protocol.
1. The state MT_I was transitioning to NP on receiving a clean writeback from the L1 controller. This patch makes it inform the directory controller about the writeback.
2. The L2 controller was sending the dirty bit to the L1 controller and the L2 controller used writeback from the L1 controller to update the dirty bit unconditionally. Now, the L1 controller always assumes that the incoming data is clean. The L2 controller updates the dirty bit only when the L1 controller writes to the block.
3. Certain unused functions and events are being removed. |
9994:1aa497ac86b2 |
20-Dec-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: mesi: remove owner and sharer fields from directory tags
The directory controller should not have the sharer field since there is only one level 2 cache. Anyway the field was not in use. The owner field was being used to track the l2 cache version (in case of distributed l2) that has the cache block under consideration. The information is not required since the version of the level 2 cache can be obtained from a subset of the address bits. |
9947:964b9eaab6b0 |
30-Oct-2013 |
Lluc Alvarez <lluc.alvarez@bsc.es> |
ruby: set SenderMachine in messages of MOESI_CMP_directory This patch adds missing initializations of the SenderMachine field of out_msg's when thery are created in the L2 cache controller of the MOESI_CMP_directory coherence protocol. When an out_msg is created and this field is left uninitialized, it is set to the default value MachineType_NUM. This causes a panic in the MachineType_to_string function when gem5 is executed with the Ruby debug flag on and it tries to print the message.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
9860:7248fa3e6e0f |
06-Sep-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: remove undefined message size type This message size type does not work well with one of the statistical variables. It also seems unnecessary. |
9775:09ea1346e89e |
25-Jun-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: moesi cmp directory: separate actions for external hits This patch adds separate actions for requests that missed in the local cache and messages were sent out to get the requested line. These separate actions are required for differentiating between the hit and miss latencies in the statistics collected. |
9774:f9bf34ba4172 |
25-Jun-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: mesi cmp directory: separate actions for external hits This patch adds separate actions for requests that missed in the local cache and messages were sent out to get the requested line. These separate actions are required for differentiating between the hit and miss latencies in the statistics collected. |
9773:915be89faf30 |
25-Jun-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: profiler: lots of inter-related changes The patch started of with removing the global variables from the profiler for profiling the miss latency of requests made to the cache. The corrresponding histograms have been moved to the Sequencer. These are combined together when the histograms are printed. Separate histograms are now maintained for tracking latency of all requests together, of hits only and of misses only.
A particular set of histograms used to use the type GenericMachineType defined in one of the protocol files. This patch removes this type. Now, everything that relied on this type would use MachineType instead. To do this, SLICC has been changed so that multiple machine types can be declared by a controller in its preamble. |
9771:57aac1719f86 |
24-Jun-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: remove the three files related to profiling This patch removes the following three files: RubySlicc_Profiler.sm, RubySlicc_Profiler_interface.cc and RubySlicc_Profiler_interface.hh. Only one function prototyped in the file RubySlicc_Profiler.sm. Rest of the code appearing in any of these files is not in use. Therefore, these files are being removed.
That one single function, profileMsgDelay(), is being moved to the protocol files where it is in use. If we need any of these deleted functions, I think the right way to make them visible is to have the AbstractController class in a .sm and let the controller state machine inherit from this class. The AbstractController class can then have the prototypes of these profiling functions in its definition. |
9769:bf245b82de17 |
20-Jun-2013 |
Lena Olson <lena@cs.wisc.edu> |
ruby: fix typo in MOESI_CMP_token protocol |
9768:ff17ab994003 |
18-Jun-2013 |
Lena Olson <lena@cs.wisc.edu> |
ruby: Fix prefetching for MESI_CMP_Directory
Transitions from present on PF_Ifetch were missing, causing a crash when prefetching is enabled.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
9766:488a71df39bc |
18-Jun-2013 |
Lena Olson <lena@cs.wisc.edu> |
ruby: restrict Address to being a type and not a variable name Change all occurrances of Address as a variable name to instead use Addr. Address is an allowed name in slicc even when Address is also being used as a type, leading to declarations of "Address Address". While this works, it prevents adding another field of type Address because the compiler then thinks Address is a variable name, not type.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
9697:f037e7b4a827 |
21-May-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: moesi hammer: cosmetic changes Updates copyright years, removes space at the end of lines, shortens variable names. |
9696:744fb905297c |
21-May-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: mesi cmp directory: cosmetic changes Updates copyright years, removes space at the end of lines, shortens variable names. |
9695:df1d9fee32a5 |
21-May-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: moesi cmp token: cosmetic changes Updates copyright years, removes space at the end of lines, shortens variable names. |
9694:692776126391 |
21-May-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: moesi cmp directory: cosmetic changes Updates copyright years, removes space at the end of lines, shortens variable names. |
9692:67d9da312ef0 |
21-May-2013 |
Nilay Vaish <nilay@cs.wisc.edu>, Malek Musleh <malek.musleh@gmail.com> |
ruby: add stats to .sm files, remove cache profiler This patch changes the way cache statistics are collected in ruby.
As of now, there is separate entity called CacheProfiler which holds statistical variables for caches. The CacheMemory class defines different functions for accessing the CacheProfiler. These functions are then invoked in the .sm files. I find this approach opaque and prone to error. Secondly, we probably should not be paying the cost of a function call for recording statistics.
Instead, this patch allows for accessing statistical variables in the .sm files. The collection would become transparent. Secondly, it would happen in place, so no function calls. The patch also removes the CacheProfiler class. |
9673:3885582ecc52 |
23-Apr-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: mesi coherence protocol: remove unused state M_MB |
9639:a1609f47cb83 |
17-Apr-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: moesi cmp directory: add copyright notice |
9599:e95479c2926f |
22-Mar-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: remove unsued profile functions |
9563:08d097040f90 |
28-Feb-2013 |
Dibakar Gope <gope@wisc.edu>, Nilay Vaish <nilay@cs.wisc.edu> |
ruby: mesi coherence protocol: invalidate lock The MESI CMP directory coherence protocol, while transitioning from SM to IM, did not invalidate the lock that it might have taken on a cache line. This patch adds an action for doing so.
The problem was found by Dibakar, but I was not happy with his proposed solution. So I implemented a different solution.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
9509:0adea7868e77 |
10-Feb-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: MI protocol: add a missing transition The transition for state MII and event Store was found missing during testing. The transition is being added. The controller will not stall the Store request in state MII |
9507:d2ab6d889fc7 |
10-Feb-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: replace Time with Cycles (final patch in the series) This patch is as of now the final patch in the series of patches that replace Time with Cycles.This patch further replaces Time with Cycles in Sequencer, Profiler, different protocols and related entities.
Though Time has not been completely removed, the places where it is in use seem benign as of now. |
9499:b03b556a8fbb |
10-Feb-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: replaces Time with Cycles in many places The patch started of with replacing Time with Cycles in the Consumer class. But to get ruby to compile, the rest of the changes had to be carried out. Subsequent patches will further this process, till we completely replace Time with Cycles. |
9496:28d88a0fda74 |
10-Feb-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: record fully busy cycle with in the controller This patch does several things. First, the counter for fully busy cycles for a controller is now kept with in the controller, instead of being part of the profiler. Second, the topology class no longer keeps an array of controllers which was only used for printing stats. Instead, ruby system will now ask each controller to print the stats. Thirdly, the statistical variable for recording how many different types were created is being moved in to the controller from the profiler. Note that for printing, the profiler will collate results from different controllers. |
9484:e96ff45795bc |
28-Jan-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: remove get_time() This patch replaces get_time() in *.sm files with curCycle() which is now possible since controllers are clocked objects. |
9465:4ae4f3f4b870 |
14-Jan-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
Ruby: use ClockedObject in Consumer class Many Ruby structures inherit from the Consumer, which is used for scheduling events. The Consumer used to relay on an Event Manager for scheduling events and on g_system_ptr for time. With this patch, the Consumer will now use a ClockedObject to schedule events and to query for current time. This resulted in several structures being converted from SimObjects to ClockedObjects. Also, the MessageBuffer class now requires a pointer to a ClockedObject so as to query for time. |
9366:bf8eb26c7b7e |
11-Dec-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: add support for prefetching to MESI protocol |
9364:e5fc9d588132 |
11-Dec-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: change slicc to allow for constructor args The patch adds support to slicc for recognizing arguments that should be passed to the constructor of a class. I did not like the fact that an explicit check was being carried on the type 'TBETable' to figure out the arguments to be passed to the constructor. The patch also moves some of the member variables that are declared for all the controllers to the base class AbstractController. |
9305:ac608464be80 |
18-Oct-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: functional access updates to network test protocol I had forgotten to change the network test protocol while making changes to ruby for supporting functional accesses. This patch updates the protocol so that it can compile correctly. |
9302:c2e70a9bc340 |
15-Oct-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: improved support for functional accesses This patch adds support to different entities in the ruby memory system for more reliable functional read/write accesses. Only the simple network has been augmented as of now. Later on Garnet will also support functional accesses. The patch adds functional access code to all the different types of messages that protocols can send around. These messages are functionally accessed by going through the buffers maintained by the network entities. The patch also rectifies some of the bugs found in coherence protocols while testing the patch.
With this patch applied, functional writes always succeed. But functional reads can still fail. |
9298:9a087e046c58 |
15-Oct-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: allow function definition in slicc structs This patch adds support for function definitions to appear in slicc structs. This is required for supporting functional accesses for different types of messages. Subsequent patches will use this to development. |
9273:05b12cb19cc8 |
02-Oct-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: rename template_hack to template I don't like using the word hack. Hence, the patch. |
9272:67c11eeafacf |
02-Oct-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: remove unused code in protocols |
9269:4ece3d8d22fa |
30-Sep-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
MI coherence protocol: add copyright notice |
9219:258753d3bc47 |
12-Sep-2012 |
Jason Power <power.jg@gmail.com> |
Ruby: Modify Scons so that we can put .sm files in extras Also allows for header files which are required in slicc generated code to be in a directory other than src/mem/ruby/slicc_interface. |
9168:4dc0fc0f68c2 |
25-Aug-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
MESI Protocol: Correct the virtual network in profile functions The virtual network in a couple of places was incorrectly mentioned as 3 in place of 1. This is being corrected. |
9167:b8de57c70759 |
25-Aug-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
MESI Coherence Protocol: Add copyright notice |
9116:9171e26543fa |
12-Jul-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
Ruby: remove some unused stuff from SLICC files |
9105:b576c490e7d1 |
11-Jul-2012 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: banked cache array resource model
This patch models a cache as separate tag and data arrays. The patch exposes the banked array as another resource that is checked by SLICC before a transition is allowed to execute. This is similar to how TBE entries and slots in output ports are modeled. |
9104:27d56b644e78 |
11-Jul-2012 |
Joel Hestness <hestness@cs.utexas.edu> |
ruby: tag and data cache access support
Updates to Ruby to support statistics counting of cache accesses. This feature serves multiple purposes beyond simple stats collection. It provides the foundation for ruby to model the cache tag and data arrays as physical resources, as well as provide the necessary input data for McPAT power modeling. |
8935:c955a451271e |
06-Apr-2012 |
Brad Beckmann <Brad.Beckmann@amd.com> |
MOESI_hammer: tbe allocation and dependent wakeup fixes |
8933:2727a5a0aadc |
06-Apr-2012 |
Brad Beckmann <Brad.Beckmann@amd.com> |
MOESI_hammer: fixed bug with single cpu + flushes, then modified the regression tester to check this functionality |
8881:042d509574c1 |
06-Mar-2012 |
Marc Orr <marc.orr@gmail.com> |
build scripts: Made minor modifications to reduce build overhead time.
1. --implicit-cache behavior is default. 2. makeEnv in src/SConscript is conditionally called. 3. decider set to MD5-timestamp 4. NO_HTML build option changed to SLICC_HTML (defaults to False) |
8827:38b8b9a97500 |
10-Feb-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
MESI: Add queues for stalled requests This patch adds support for stalling the requests queued up at different controllers for the MESI CMP directory protocol. Earlier the controllers would recycle the requests using some fixed latency. This results in younger requests getting serviced first at times, and can result in starvation. Instead all the requests that need a particular block to be in a stable state are moved to a separate queue, where they wait till that block returns to a stable state and then they are processed. |
8795:0909f8ed7aa0 |
07-Jan-2012 |
Gabe Black <gblack@eecs.umich.edu> |
Merge with main repository. |
8717:5c253f1031d7 |
23-Jan-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
O3, Ruby: Forward invalidations from Ruby to O3 CPU This patch implements the functionality for forwarding invalidations and replacements from the L1 cache of the Ruby memory system to the O3 CPU. The implementation adds a list of ports to RubyPort. Whenever a replacement or an invalidation is performed, the L1 cache forwards this to all the ports, which is the LSQ in case of the O3 CPU. |
8704:683e7b0b5771 |
17-Jan-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
Ruby: Change the access permissions for MOESI hammer
This patch changes the access permission for the WB_E_W state from Busy to Read_Write to avoid having issues in follow-on patches with functional accesses going through Ruby. This change was made after consultation with all involved parties and is more of a work-around than a fix. |
8678:08d6c1fbaecb |
10-Jan-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
MOESI Hammer: Remove a couple of bugs A couple of bugs were observed while building checkpointing support in Ruby. This patch changes transitions to remove those errors. |
8647:31ae249b397a |
05-Jan-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
MESI Coherence Protocol: Fix L2 miss statistics This patch removes calls to uu_ProfileMiss from transitions where the request is satisfied by the L2 cache controller. |
8644:acf68e5a8cd7 |
31-Dec-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
SLICC: Use pointers for directory entries SLICC uses pointers for cache and TBE entries but not for directory entries. This patch changes the protocols, SLICC and Ruby memory system so that even directory entries are referenced using pointers. |
8637:13ea13815bf9 |
01-Dec-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
MOESI_hammer: fixed L2 to L1 infinite stalls and deadlock |
8618:ce41ec640691 |
22-Nov-2011 |
Tushar Krishna <tushar@csail.mit.edu> |
Remove standard_1level_CMP-protocol.sm include statement from Network |
8611:d9c61e6f1848 |
04-Nov-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
MESI Protocol: Add functions for profiling misses |
8609:78da831670e4 |
03-Nov-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Protocol: Remove standard one and two level files |
8608:02d7ac5fb855 |
03-Nov-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Ruby: Remove some unused typedefs This patch removes some of the unused typedefs. It also moves some of the typedefs from Global.hh to TypeDefines.hh. The patch also eliminates the file NodeID.hh. |
8602:836f8fad4a4c |
28-Oct-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Ruby: Reorganize mapping of components In RubySlicc_ComponentMapping.hh, certain '#define's have been used for mapping MachineType to GenericMachineType. These '#define's are being eliminated and the code will now be generated by SLICC instead. Also are being eliminated some of the unused functions from RubySlicc_ComponentMapping.sm. |
8532:8f27cf8971fe |
01-Sep-2011 |
Lisa Hsu <Lisa.Hsu@amd.com> |
Functional Accesses: Update states to support Broadcast/Snooping protocols.
In the current implementation of Functional Accesses, it's very hard to implement broadcast or snooping protocols where the memory has no idea if it has exclusive access to a cache block or not. Without this knowledge, making sure the RW vs. RO permissions are right are next to impossible. So we add a new state called Backing_Store to enable the conveyance that this is the backup storage for a block, so that it can be written if it is the only possibly RW block in the system, or written even if there is another RW block in the system, without causing problems.
Also, a small change to actually set the m_name field for each Controller so that debugging can be easier. Now you can access a controller's name just by controller->getName(). |
8492:1ad244a20877 |
08-Aug-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
BuildEnv: Eliminate RUBY as build environment variable This patch replaces RUBY with PROTOCOL in all the SConscript files as the environment variable that decides whether or not certain components of the simulator are compiled. |
8485:7a9a7f2a3d46 |
03-Aug-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Ruby: Remove files and includes not in use |
8482:353abb676fa2 |
02-Aug-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Scons: Drop RUBY as compile time option. This patch drops RUBY as a compile time option. Instead the PROTOCOL option is used to figure out whether or not to build Ruby. If the specified protocol is 'None', then Ruby is not compiled. |
8456:5204873afc05 |
06-Jul-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: added generic dma machine |
8455:d59189f372e7 |
06-Jul-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
MOESI_hammer: Fixed uniprocessor DMA bug |
8454:fad37c6670a6 |
05-Jul-2011 |
Nathan Binkert <nate@binkert.org> |
slicc: add a protocol statement and an include statement All protocols must specify their name The include statement allows any file to include another file. |
8453:82fc1267d3bb |
05-Jul-2011 |
Nathan Binkert <nate@binkert.org> |
slicc: cleanup slicc code and make it less verbose |
8446:be8f4157c8f4 |
03-Jul-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Network_test: Conform it with functional access changes in Ruby Addition of functional access support to Ruby necessitated some changes to the way coherence protocols are written. I had forgotten to update the Network_test protocol. This patch makes those updates. |
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. |
8341:30daf1dd5c91 |
08-Jun-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Ruby: Correctly set access permissions for directory entries The access permissions for the directory entries are not being set correctly. This is because pointers are not used for handling directory entries. function. get and set functions for access permissions have been added to the Controller state machine. The changePermission() function provided by the AbstractEntry and AbstractCacheEntry classes has been exposed to SLICC code once again. The set_permission() functionality has been removed.
NOTE: Each protocol will have to define these get and set functions in order to compile successfully. |
8310:adb2d5f7407d |
20-May-2011 |
Tushar Krishna <tushar@csail.mit.edu> |
slicc: added vnet_type to MI_example
Forgot to add this to MI_example in my previous patch. |
8308:79cf09f5a234 |
18-May-2011 |
Tushar Krishna <tushar@csail.mit.edu> |
slicc: added vnet_type field to identify response vnets from others
Identifying response vnets versus other vnets will allow garnet to determine which vnets will carry data packets, and which will carry ctrl packets, and use appropriate buffer sizes (since data packets are larger than ctrl packets). This in turn allows the orion power model to accurately estimate buffer power. |
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. |
8194:aeec9e157d06 |
01-Apr-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
hammer: fixed dma uniproc error
Fixed an error reguarding DMA for uninprocessor systems. Basically removed an overly agressive optimization that lead to inconsistent state between the cache and the directory. |
8193:c7302d55d644 |
31-Mar-2011 |
Lisa Hsu <Lisa.Hsu@amd.com> |
CacheMemory: add allocateVoid() that is == allocate() but no return value. This function duplicates the functionality of allocate() exactly, except that it does not return a return value. In protocols where you just want to allocate a block but do not want that block to be your implicitly passed cache_entry, use this function. Otherwise, SLICC will complain if you do not consume the pointer returned by allocate(), and if you do a dummy assignment Entry foo := cache.allocate(address), the C++ compiler will complain of an unused variable. This is kind of a hack to get around those issues, but suggestions welcome. |
8191:777459f7c61f |
31-Mar-2011 |
Lisa Hsu <Lisa.Hsu@amd.com> |
Ruby: Add new object called WireBuffer to mimic a Wire. This is a substitute for MessageBuffers between controllers where you don't want messages to actually go through the Network, because requests/responses can always get reordered wrt to one another (even if you turn off Randomization and turn on Ordered) because you are, after all, going through a network with contention. For systems where you model multiple controllers that are very tightly coupled and do not actually go through a network, it is a pain to have to write a coherence protocol to account for mixed up request/response orderings despite the fact that it's completely unrealistic. This is *not* meant as a substitute for real MessageBuffers when messages do in fact go over a network. |
8188:20dbef14192d |
31-Mar-2011 |
Lisa Hsu <Lisa.Hsu@amd.com> |
Ruby: pass Packet->Req->contextId() to Ruby. It is useful for Ruby to understand from whence request packets came. This has all request packets going into Ruby pass the contextId value, if it exists. This supplants the old libruby proc_id value passed around in all the Messages, so I've also removed the unused unsigned proc_id; member generated by SLICC for all Message types. |
8184:a8d64545cda6 |
28-Mar-2011 |
Somayeh Sardashti <somayeh@cs.wisc.edu> |
This patch supports cache flushing in MOESI_hammer |
8174:e21f6e70169e |
22-Mar-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Ruby: Remove CacheMsg class from SLICC The goal of the patch is to do away with the CacheMsg class currently in use in coherence protocols. In place of CacheMsg, the RubyRequest class will used. This class is already present in slicc_interface/RubyRequest.hh. In fact, objects of class CacheMsg are generated by copying values from a RubyRequest object. |
8171:19444b1f092c |
21-Mar-2011 |
Tushar Krishna <tushar@csail.mit.edu> |
This patch adds the network tester for simple and garnet networks. The tester code is in testers/networktest. The tester can be invoked by configs/example/ruby_network_test.py. A dummy coherence protocol called Network_test is also addded for network-only simulations and testing. The protocol takes in messages from the tester and just pushes them into the network in the appropriate vnet, without storing any state. |
8165:5955406f7ed0 |
19-Mar-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Ruby: Convert CacheRequestType to RubyRequestType This patch converts CacheRequestType to RubyRequestType so that both the protocol dependent and independent code makes use of the same request type. |
8164:b043c0efa024 |
19-Mar-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Ruby: Convert AccessModeType to RubyAccessMode This patch converts AccessModeType to RubyAccessMode so that both the protocol dependent and independent code uses the same access mode. |
8163:19a654839a04 |
19-Mar-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
MOESI_hammer: minor fixes to full-bit dir |
8158:519fba665871 |
19-Mar-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
MOESI_hammer: fixed dma bug with shared data |
8157:d2cf4b19e8ad |
19-Mar-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
MOESI_CMP_directory: significant dma bug fixes |
8156:9a6a02a235f1 |
18-Mar-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
SLICC: Remove external_type for structures In SLICC, in order to define a type a data type for which it should not generate any code, the keyword external_type is used. For those data types for which code should be generated, the keyword structure is used. This patch eliminates the use of keyword external_type for defining structures. structure key word can now have an optional attribute external, which would be used for figuring out whether or not to generate the code for this structure. Also, now structures can have functions as well data members in them. |
8155:099771c7725d |
18-Mar-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
SLICC: Remove the keyword wake_up_dependents In order to add stall and wait facility for protocols, a keyword wake_up_dependents was introduced. This patch removes the keyword, instead this functionality is now implemented as function call. |
8154:f3d1493787d4 |
18-Mar-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
SLICC: Remove the keyword wake_up_all_dependents In order to add stall and wait facility for protocols, a keyword wake_up_all_dependents was introduced. This patch removes the keyword, instead this functionality is now implemented as function call. |
8131:03f7df749b9d |
17-Mar-2011 |
Lisa Hsu <Lisa.Hsu@amd.com> |
Ruby: expose a simple mod function in slicc interface. |
8121:457c24115bde |
04-Mar-2011 |
Gabe Black <gblack@eecs.umich.edu> |
SCons: Clean up some inconsistent capitalization in scons options. |
8086:bf0335d98250 |
23-Feb-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: automate permission setting
This patch integrates permissions with cache and memory states, and then automates the setting of permissions within the generated code. No longer does one need to manually set the permissions within the setState funciton. This patch will faciliate easier functional access support by always correctly setting permissions for both cache and memory states. |
8085:d1eb504fd302 |
23-Feb-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
MOESI_hammer: cache probe address clean up |
8084:d1bb88080be4 |
23-Feb-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: cleaned up access permission enum |
8083:bba14984f2ce |
23-Feb-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: removed unsupported protocol files |
8053:e6ce478c05d3 |
22-Feb-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
m5: merged in hammer fix |
8051:c7f591ccf3a1 |
10-Feb-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
MOESI_hammer: fixed wakeup for SS->S transistion |
8050:5e58eaf00b58 |
19-Feb-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Ruby: Machine Type missing in MOESI CMP directory protocol In certain actions of the L1 cache controller, while creating an outgoing message, the machine type was not being set. This results in a segmentation fault when trace is collected. Joseph Pusudesris provided his patch for fixing this issue. |
8049:44f1ac4f587f |
19-Feb-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Ruby: clean MOESI CMP directory protocol The L1 cache controller file contains references to foo and goo queues, which are not in use at all. These have been removed. |
7961:e8f4bb35dca9 |
12-Feb-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Ruby: Reorder Cache Lookup in Protocol Files The patch changes the order in which L1 dcache and icache are looked up when a request comes in. Earlier, if a request came in for instruction fetch, the dcache was looked up before the icache, to correctly handle self-modifying code. But, in the common case, dcache is going to report a miss and the subsequent icache lookup is going to report a hit. Given the invariant - caches under the same controller keep track of disjoint sets of cache blocks, we can move the icache lookup before the dcache lookup. In case of a hit in the icache, using our invariant, we know that the dcache would have reported a miss. In case of a miss in the icache, we know that icache would have missed even if the dcache was looked up before looking up the icache. Effectively, we are doing the same thing as before, though in the common case, we expect reduction in the number of lookups. This was empirically confirmed for MOESI hammer. The ratio lookups to access requests is now about 1.1 to 1. |
7936:9c245e375e05 |
08-Feb-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
MESI CMP: Unset TBE pointer in L2 cache controller The TBE pointer in the MESI CMP implementation was not being set to NULL when the TBE is deallocated. This resulted in segmentation fault on testing the protocol when the ProtocolTrace was switched on. |
7922:7532067f818e |
07-Feb-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: support to stallAndWait the mandatory queue
By stalling and waiting the mandatory queue instead of recycling it, one can ensure that no incoming messages are starved when the mandatory queue puts signficant of pressure on the L1 cache controller (i.e. the ruby memtester). |
7918:409a2692b8e6 |
07-Feb-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
MOESI_hammer: fixed dir bug counting received acks |
7916:b3d642f01495 |
07-Feb-2011 |
Tushar Krishna <tushar@csail.mit.edu> |
MOESI_CMP_token: removed unused message fields |
7904:6f5299ff8260 |
07-Feb-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
MOESI_hammer: Added full-bit directory support |
7898:73bc24002f82 |
07-Feb-2011 |
Joel Hestness <hestness@cs.utexas.edu> |
MOESI_hammer: trigge queue fix. |
7839:9e556fb25900 |
17-Jan-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Change interface between coherence protocols and CacheMemory The purpose of this patch is to change the way CacheMemory interfaces with coherence protocols. Currently, whenever a cache controller (defined in the protocol under consideration) needs to carry out any operation on a cache block, it looks up the tag hash map and figures out whether or not the block exists in the cache. In case it does exist, the operation is carried out (which requires another lookup). As observed through profiling of different protocols, multiple such lookups take place for a given cache block. It was noted that the tag lookup takes anything from 10% to 20% of the simulation time. In order to reduce this time, this patch is being posted.
I have to acknowledge that the many of the thoughts that went in to this patch belong to Brad.
Changes to CacheMemory, TBETable and AbstractCacheEntry classes: 1. The lookup function belonging to CacheMemory class now returns a pointer to a cache block entry, instead of a reference. The pointer is NULL in case the block being looked up is not present in the cache. Similar change has been carried out in the lookup function of the TBETable class. 2. Function for setting and getting access permission of a cache block have been moved from CacheMemory class to AbstractCacheEntry class. 3. The allocate function in CacheMemory class now returns pointer to the allocated cache entry.
Changes to SLICC: 1. Each action now has implicit variables - cache_entry and tbe. cache_entry, if != NULL, must point to the cache entry for the address on which the action is being carried out. Similarly, tbe should also point to the transaction buffer entry of the address on which the action is being carried out. 2. If a cache entry or a transaction buffer entry is passed on as an argument to a function, it is presumed that a pointer is being passed on. 3. The cache entry and the tbe pointers received __implicitly__ by the actions, are passed __explicitly__ to the trigger function. 4. While performing an action, set/unset_cache_entry, set/unset_tbe are to be used for setting / unsetting cache entry and tbe pointers respectively. 5. is_valid() and is_invalid() has been made available for testing whether a given pointer 'is not NULL' and 'is NULL' respectively. 6. Local variables are now available, but they are assumed to be pointers always. 7. It is now possible for an object of the derieved class to make calls to a function defined in the interface. 8. An OOD token has been introduced in SLICC. It is same as the NULL token used in C/C++. If you are wondering, OOD stands for Out Of Domain. 9. static_cast can now taken an optional parameter that asks for casting the given variable to a pointer of the given type. 10. Functions can be annotated with 'return_by_pointer=yes' to return a pointer. 11. StateMachine has two new variables, EntryType and TBEType. EntryType is set to the type which inherits from 'AbstractCacheEntry'. There can only be one such type in the machine. TBEType is set to the type for which 'TBE' is used as the name.
All the protocols have been modified to conform with the new interface. |
7835:8f37a23e02d7 |
13-Jan-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Ruby: Fixes MESI CMP directory protocol The current implementation of MESI CMP directory protocol is broken. This patch, from Arkaprava Basu, fixes the protocol. |
7815:9f9e10967912 |
04-Jan-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
Ruby: Updates MOESI Hammer protocol This patch changes the manner in which data is copied from L1 to L2 cache in the implementation of the Hammer's cache coherence protocol. Earlier, data was copied directly from one cache entry to another. This has been broken in to two parts. First, the data is copied from the source cache entry to a transaction buffer entry. Then, data is copied from the transaction buffer entry to the destination cache entry.
This has been done to maintain the invariant - at any given instant, multiple caches under a controller are exclusive with respect to each other. |
7805:f249937228b5 |
23-Dec-2010 |
Nilay Vaish<nilay@cs.wisc.edu> |
This patch removes the WARN_* and ERROR_* from src/mem/ruby/common/Debug.hh file. These statements have been replaced with warn(), panic() and fatal() defined in src/base/misc.hh |
7780:42da07116e12 |
01-Dec-2010 |
Nilay Vaish <nilay@cs.wisc.edu> |
ruby: Converted old ruby debug calls to M5 debug calls
This patch developed by Nilay Vaish converts all the old GEMS-style ruby debug calls to the appropriate M5 debug calls. |
7631:9bd6e86476d2 |
24-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
MOESI_hammer: fixed bug for dma reads in single cpu systems |
7569:96a602c5368d |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Added merge GETS optimization to hammer
Added an optimization that merges multiple pending GETS requests into a single request to the owner node. |
7567:238f99c9f441 |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Stall and wait input messages instead of recycling
This patch allows messages to be stalled in their input buffers and wait until a corresponding address changes state. In order to make this work, all in_ports must be ranked in order of dependence and those in_ports that may unblock an address, must wake up the stalled messages. Alot of this complexity is handled in slicc and the specification files simply annotate the in_ports. |
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. |
7565:9fc3475e8175 |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
MOESI_hammer: break down miss latency stalled cycles
This patch tracks the number of cycles a transaction is delayed at different points of the request-forward-response loop. |
7564:3559d47839a1 |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: added probe filter support to hammer |
7561:02a9a597fce4 |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Disable migratory sharing for token and hammer
This patch allows one to disable migratory sharing for those cache blocks that are accessed by atomic requests. While the implementations are different between the token and hammer protocols, the motivation is the same. For Alpha, LLSC semantics expect that normal loads do not unlock cache blocks that have been locked by LL accesses. Therefore, locked blocks should not transfer write permissions when responding to these load requests. Instead, only they only transfer read permissions so that the subsequent SC access can possibly succeed. |
7556:5dc128cab5dc |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: fixed token bugs associated with owner token counts
This patch fixes several bugs related to previous inconsistent assumptions on how many tokens the Owner had. Mike Marty should have fixes these bugs years ago. :) |
7554:40ba2226f274 |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: MOESI_CMP_token dma fixes
This patch fixes various protocol bugs regarding races between dma requests and persistent requests. |
7553:fcdd99057b8a |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Resurrected Ruby's deterministic tests
Added the request series and invalidate deterministic tests as new cpu models and removed the no longer needed ruby tests |
7552:2e4786ed3f90 |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Updated MOESI_hammer L2 latency behavior
Previously, the MOESI_hammer protocol calculated the same latency for L1 and L2 hits. This was because the protocol was written using the old ruby assumption that L1 hits used the sequencer fast path. Since ruby no longer uses the fast-path, the protocol delays L2 hits by placing them on the trigger queue. |
7551:b10ee98aea91 |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Reduced ruby latencies
The previous slower ruby latencies created a mismatch between the faster M5 cpu models and the much slower ruby memory system. Specifically smp interrupts were much slower and infrequent, as well as cpus moving in and out of spin locks. The result was many cpus were idle for large periods of time.
These changes fix the latency mismatch. |
7550:7d97cec15818 |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: fix ruby llsc support to sync sc outcomes
Added support so that ruby can determine the outcome of store conditional operations and reflect that outcome to M5 physical memory and cpus. |
7549:08dbd22d58a0 |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Fixed L2 cache miss profiling
Fixed L2 cache miss profiling for the MOESI_CMP_token protocol |
7548:764a7401e217 |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Added bcast msg profiling to hammer and token |
7546:84e8f914b3b8 |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Reincarnated the responding machine profiling
This patch adds back to ruby the capability to understand the response time for messages that hit in different levels of the cache heirarchy. Specifically add support for the MI_example, MOESI_hammer, and MOESI_CMP_token protocols. |
7545:3d5d3653eaa4 |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
MOESI_CMP_token: Fixed dma persistent lockdown bugs |
7536:2eb9d43d7b41 |
20-Aug-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
MESI_CMP_directory: bug fix for old PUTX requests |
7055:4e24742201d7 |
02-Apr-2010 |
Nathan Binkert <nate@binkert.org> |
ruby: get "using namespace" out of headers In addition to obvious changes, this required a slight change to the slicc grammar to allow types with :: in them. Otherwise slicc barfs on std::string which we need for the headers that slicc generates. |
7033:35cb92cbd50c |
22-Mar-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Removed the unnecessary MachineType message fields |
7028:56dfde6abe48 |
22-Mar-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Reordered protocol buffers
Reordered vnet priorities to agree with PerfectSwitch for protocols MI_example, MOESI_CMP_token, and MOESI_hammer |
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. |
7022:836ba66301a1 |
22-Mar-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Minor dma latency initialization fix |
7017:7b557c87a19a |
22-Mar-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Fixed small data msg bug in MOESI_hammer-dir |
7012:0ef205fb6d6f |
22-Mar-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Fix MOESI_hammer cache profiler calls for L2 misses |
6999:f226c098c393 |
10-Mar-2010 |
Nathan Binkert <nate@binkert.org> |
slicc: have a central mechanism for creating a code_formatter. This makes it easier to add global variables like protocol |
6970:3d8241813e4b |
10-Feb-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Initialize sender in MI_example-dir |
6967:ee82497f749c |
01-Feb-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Set default protocol back to MI_example |
6928:5bd33f7c26ea |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
m5: Regression Tester Update
This patch includes the necessary regression updates to test the new ruby configuration system. The patch includes support for multiple ruby protocols and adds the ruby random tester. The patch removes atomic mode test for ruby since ruby does not support atomic mode acceses. These tests can be added back in when ruby supports atomic mode for real. |
6926:775342cda4db |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: removed last level cache support
Removed the last level cache support and MOESI_hammer's dependency on it. Replaces the LLC support with the more generic MachineType count. |
6925:a27441e3d106 |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Added a Scons option to prevent HTML file creation |
6922:1620cffaa3b6 |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Removed static members in RubyPort including hitcallback Removed static members in RubyPort and removed the ruby request unique id. |
6915:13e4df0df905 |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: MESI_CMP_directory updated to the new config system |
6914:af5360e5ccd6 |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Sorted the file includes to maintain consistency |
6913:a846f65efe55 |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Renamed the MESI directory sm file
Renamed the MESI directory file to be consistent with all other protocols. |
6912:5d6887ca9dc4 |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Removed the GPL header in MESI_CMP_directory-msg
I'm not sure how this got past our initial ruby code import, but this obviously needed to be removed. |
6911:1fdbff869ff4 |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: MOESI_CMP_directory updated to the new config system |
6910:70026d87d4f1 |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Added atomic support to MOESI_CMP_token |
6909:041a27b02642 |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: fixed memory fetch bug for persistent requests |
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 |
6900:5d01c182d6a7 |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Added atomic support to MOESI_hammer |
6898:dff0720d106d |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: fixed MOESI_hammer data writebacks to the directory |
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. |
6888:de8e755aca4f |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Converted MOESI_hammer dma cntrl to new config system |
6882:898047a3672c |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Ruby changes required to use the python config system This patch includes the necessary changes to connect ruby objects using the python configuration system. Mainly it consists of removing unnecessary ruby object pointers and connecting the necessary object pointers using the generated param objects. This patch includes the slicc changes necessary to connect generated ruby objects together using the python configuraiton system. |
6878:c3a3c09af8be |
29-Jan-2010 |
Steve Reinhardt <steve.reinhardt@amd.com> |
scons: ignore blank lines in .slicc files |
6877:2a1a3d916ca8 |
29-Jan-2010 |
Steve Reinhardt <steve.reinhardt@amd.com> |
ruby: Make SLICC-generated objects SimObjects. Also add SLICC support for state-machine parameter defaults (passed through to Python as SimObject Param defaults). |
6873:f55de179b43d |
29-Jan-2010 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: fix out_port declaration |
6863:21fbf0412e0d |
19-Jan-2010 |
Derek Hower <drh5@cs.wisc.edu> |
ruby: new atomics implementation
This patch changes the way that Ruby handles atomic RMW instructions. This implementation, unlike the prior one, is protocol independent. It works by locking an address from the sequencer immediately after the read portion of an RMW completes. When that address is locked, the coherence controller will only satisfy requests coming from one port (e.g., the mandatory queue) and will ignore all others. After the write portion completed, the line is unlocked. This should also work with multi-line atomics, as long as the blocks are always acquired in the same order. |
6862:3d308cbd1657 |
19-Jan-2010 |
Derek Hower <drh5@cs.wisc.edu> |
merge |
6861:7561088131f9 |
04-Dec-2009 |
Derek Hower <drh5@cs.wisc.edu> |
ruby: cleaned up ruby-lang configuration |
6849:3c557ac2ca74 |
25-Sep-2009 |
Derek Hower <drh5@cs.wisc.edu> |
protocol: cleaned up MESI...got rid of unneccessary virtual networks |
6843:de4b394c6792 |
15-Sep-2009 |
Derek Hower <drh5@cs.wisc.edu> |
ruby: added broadcast mechanism |
6831:f1ee92cfcc10 |
10-Sep-2009 |
Derek Hower <drh5@cs.wisc.edu> |
protocol: made MI_example work with unordered networks |
6797:7bf0a839c237 |
18-Nov-2009 |
Brad Beckmann <Brad.Beckmann@amd.com> |
Resurrection of the CMP token protocol to GEM5 |
6790:14c356da6ed3 |
18-Nov-2009 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: MOESI hammer support for DMA reads and writes |
6789:53caf4b9186d |
18-Nov-2009 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Added a memory controller feature to MOESI hammer |
6788:c43f6fdcc24c |
18-Nov-2009 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Hammer ruby configuration support |
6787:b9c7716f6aa6 |
18-Nov-2009 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Changes necessary to get the hammer protocol to work in GEM5 |
6786:000fa68c57a9 |
18-Nov-2009 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: added the original hammer protocols from old ruby |
6785:bb675ba62c79 |
18-Nov-2009 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: returns the number of LLC needed for broadcast Added feature to CacheMemory to return the number of last level caches. This count is need for broadcast protocols such as MOESI_hammer. |
6777:6b6b8f01429c |
18-Nov-2009 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: Removed unused action z_stall |
6774:554d84a850d6 |
18-Nov-2009 |
Brad Beckmann <Brad.Beckmann@amd.com> |
ruby: fixed dma mi example to work with multiple dma ports |
6714:028047200ff7 |
05-Nov-2009 |
Steve Reinhardt <steve.reinhardt@amd.com> |
slicc: tweak file enumeration for scons Right now .cc and .hh files are handled separately, but then they're just munged together at the end by scons, so it doesn't buy us anything. Might as well munge from the start since we'll eventually be adding generated Python files to the list too. |
6713:4b6fb0a99039 |
05-Nov-2009 |
Steve Reinhardt <steve.reinhardt@amd.com> |
slicc: whack some of Nate's leftover debug code |
6657:ef5fae93a3b2 |
22-Sep-2009 |
Nathan Binkert <nate@binkert.org> |
slicc: Pure python implementation of slicc. This is simply a translation of the C++ slicc into python with very minimal reorganization of the code. The output can be verified as nearly identical by doing a "diff -wBur".
Slicc can easily be run manually by using util/slicc |
6655:380a32b43336 |
22-Sep-2009 |
Nathan Binkert <nate@binkert.org> |
scons: add slicc and ply to sys.path and PYTHONPATH so everyone has access |
6635:3b2d7fdff6b1 |
11-Sep-2009 |
pdudnik@gmail.com |
Added new MESI files |
6633:9082a3fe5608 |
11-Sep-2009 |
pdudnik@gmail.com |
Somayeh's MESI protocol with Polina's bug fixes |
6632:deb20a55147c |
11-Sep-2009 |
pdudnik@gmail.com |
MI data corruption bug fix |
6630:17e885fd7246 |
11-Sep-2009 |
pdudnik@gmail.com |
MOESI data corruption bug fix |
6628:369b61762d7b |
31-Aug-2009 |
pdudnik@gmail.com |
[mq]: MOESI_patch |
6626:8ea43024230b |
28-Aug-2009 |
pdudnik@gmail.com |
imported patch mi_patch |
6494:be123e27612f |
11-Aug-2009 |
Brad Beckmann <Brad.Beckmann@amd.com> |
merged Tushar's bug fix with public repository changes |
6493:1fa51760a963 |
07-Aug-2009 |
Tushar Krishna <Tushar.Krishna@amd.com> |
bug fix for data_msg_size in network/Network.cc |
6491:fe8a24516bb7 |
09-Aug-2009 |
Derek Hower <drh5@cs.wisc.edu> |
protocol: added recycle actions to MOESI DMA events |
6490:2b448f0329b0 |
06-Aug-2009 |
Derek Hower <drh5@cs.wisc.edu> |
fixed MOESI_CMP_directory bug |
6489:105109db1847 |
06-Aug-2009 |
Derek Hower <drh5@cs.wisc.edu> |
protocol: fixed MOESI_CMP_directory bug |
6472:d7bb25f0687a |
05-Aug-2009 |
Derek Hower <drh5@cs.wisc.edu> |
merge |
6469:e983bc0f31a0 |
05-Aug-2009 |
Derek Hower <drh5@cs.wisc.edu> |
protocol: made MI_example dma mapping generic |
6468:26abdfe2d980 |
05-Aug-2009 |
Derek Hower <drh5@cs.wisc.edu> |
ruby: made mapAddressToRange based off a bit count |
6467:5670eee2a866 |
04-Aug-2009 |
Derek Hower <drh5@cs.wisc.edu> |
slicc: added MOESI_CMP_directory, DMA SequencerMsg, parameterized controllers
This changeset contains a lot of different changes that are too mingled to separate. They are:
1. Added MOESI_CMP_directory
I made the changes necessary to bring back MOESI_CMP_directory, including adding a DMA controller. I got rid of MOESI_CMP_directory_m and made MOESI_CMP_directory use a memory controller. Added a new configuration for two level protocols in general, and MOESI_CMP_directory in particular.
2. DMA Sequencer uses a generic SequencerMsg
I will eventually make the cache Sequencer use this type as well. It doesn't contain an offset field, just a physical address and a length. MI_example has been updated to deal with this.
3. Parameterized Controllers
SLICC controllers can now take custom parameters to use for mapping, latencies, etc. Currently, only int parameters are supported. |
6466:4e66dd2decd7 |
04-Aug-2009 |
Derek Hower <drh5@cs.wisc.edu> |
slicc: generate html by default |
6374:11423b4639c0 |
20-Jul-2009 |
Derek Hower <drh5@cs.wisc.edu> |
ruby: moved cache stats from Profiler to CacheMemory
Caches are now responsible for their own statistic gathering. This requires a direct callback from the protocol on misses, and so all future protocols need to take this into account. |
6368:cecc7019b458 |
18-Jul-2009 |
Derek Hower <drh5@cs.wisc.edu> |
ruby: fixed dma sequencer bug
The DMASequencer was still using a parameter from the old RubyConfig, causing an offset error when the requested data wasn't block aligned. This changeset also includes a fix to MI_example for a similar bug. |
6297:57650468aff1 |
08-Jul-2009 |
Derek Hower <drh5@cs.wisc.edu> |
slicc: fixed MI_example bug. The directory wasn't deallocating the TBE, leading to a leak. Also increased the default max TBE size to 256 to allow memtest to pass the regression. |
6295:5b1049c70664 |
08-Jul-2009 |
Derek Hower <drh5@cs.wisc.edu> |
slicc: Fixed MI_example bug. The directory was not writing data to DRAM after a PUTX. |
6287:d60118c43d60 |
06-Jul-2009 |
Nathan Binkert <nate@binkert.org> |
slicc: update parser.py for changes in slicc language. |
6286:40b142645016 |
06-Jul-2009 |
Nathan Binkert <nate@binkert.org> |
scons: update SCons files for changes in ruby. |
6285:ce086eca1ede |
06-Jul-2009 |
Nathan Binkert <nate@binkert.org> |
ruby: Import the latest ruby changes from gems. This was done with an automated process, so there could be things that were done in this tree in the past that didn't make it. One known regression is that atomic memory operations do not seem to work properly anymore. |
6168:ba6fe02228db |
11-May-2009 |
Nathan Binkert <nate@binkert.org> |
ruby: add RUBY sticky option that must be set to add ruby to the build Default is false |
6163:92318648212f |
11-May-2009 |
Polina Dudnik <pdudnik@gmail.com> |
ruby: decommission code
1. Set.* and BigSet.* are replaced with OptBigSet.* which was renamed Set.* 2. Decomissioned all bloom filters 3. Decomissioned ruby/simics directory |
6160:91e31308be1e |
11-May-2009 |
Polina Dudnik <pdudnik@gmail.com> |
ruby: Remove transactional access types (e.g. LD_XACT) from CacheRequestType
1. Modified enumeration 2. Also modified profiler 3. Remove transactions from Tester 4. Edited XACT_MEM out of Synthetic Driver |
6157:eaf2fd8f54c0 |
11-May-2009 |
Nathan Binkert <nate@binkert.org> |
ruby: Migrate all of ruby and slicc to SCons. Add the PROTOCOL sticky option sets the coherence protocol that slicc will parse and therefore ruby will use. This whole process was made difficult by the fact that the set of files that are output by slicc are not easily known ahead of time. The easiest thing wound up being to write a parser for slicc that would tell me. Incidentally this means we now have a slicc grammar written in python. |
6153:0011560d49b0 |
11-May-2009 |
Dan Gibson <gibson@cs.wisc.edu> |
ruby: remove unnecessary code.
1) Removing files from the ruby build left some unresovled symbols. Those have been fixed.
2) Most of the dependencies on Simics data types and the simics interface files have been removed.
3) Almost all mention of opal is gone.
4) Huge chunks of LogTM are now gone.
5) Handling 1-4 left ~hundreds of unresolved references, which were fixed, yielding a snowball effect (and the massive size of this delta). |
6152:705b277e1141 |
11-May-2009 |
Derek Hower <drh5@cs.wisc.edu> |
ruby: Cleaned up sequencer. Removed LogTM specific code. |
6145:15cca6ab723a |
11-May-2009 |
Nathan Binkert <nate@binkert.org> |
ruby: Import ruby and slicc from GEMS
We eventually plan to replace the m5 cache hierarchy with the GEMS hierarchy, but for now we will make both live alongside eachother. |