> On Oct. 10, 2015, 8:30 p.m., Nilay Vaish wrote:
> > src/mem/ruby/system/Sequencer.cc, lines 180-184
> > <http://reviews.gem5.org/r/3149/diff/1/?file=50270#file50270line180>
> >
> >     I prefer this check being done just before insertRequest() is called.
> 
> Joel Hestness wrote:
>     I considered your request, but I don't understand why this check should 
> be moved. To check whether the line is blocked requires making a line address 
> out of the request address, which happens just before this, and this check is 
> consistent with other checks in insertRequest. Namely, this checks if there 
> is an outstanding operation for the line. Sequencer::makeRequest() just does 
> the translation of the packet to a RubyRequest, so returning from there with 
> RequestStatus_Aliased is inconsistent with the functionionality of that 
> method. Can you clarify why you think it should be moved?
> 
> Nilay Vaish wrote:
>     insertRequest() is meant for deciding whether to put this request into
>     either of the read / write tables.  And I think that's what it should be
>     doing and nothing more.  It should not be the responsibility of the 
> insertRequest() 
>     to check if there is some RMW operation going on the address.
>     
>     > I considered your request, but I don't understand why this check should 
> be moved. To check whether the line is blocked requires making a > line 
> address out of the request address, which happens just before this,
>     
>     Making line address is just one operation, other than the fact that we 
> use a global pointer to get the block size.
>     
>     > and this check is consistent with other checks in insertRequest. 
>     
>     The only check in insertRequest() is which table to put the request into.
>     
>     
>     > Namely, this checks if there is an outstanding operation for the line. 
> Sequencer::makeRequest() just does the translation 
>     > of the packet to a RubyRequest, so returning from there with 
> RequestStatus_Aliased is inconsistent with the functionionality of that 
>     > method. Can you clarify why you think it should be moved?
>     
>     If you are worried about the return type, add a new one.
> 
> Joel Hestness wrote:
>     > insertRequest() is meant for deciding whether to put this request into 
> either of the read / write tables.  And I think that's what it should be 
> doing and nothing more.  It should not be the responsibility of the 
> insertRequest() to check if there is some RMW operation going on the address.
>     
>     Sorry, I'm still not clear about what you're arguing. This new isBlocked 
> check is also checking whether to put the request into the read or write 
> tables. It does so based on what accesses are currently in progress (i.e. an 
> in-flight Locked_RMW), so it is consistent with the checks already in 
> insertRequest. As I said, makeRequest only does translation from Packets to 
> RubyRequests, so it has very different functionality than this new isBlocked 
> check. To me, it doesn't make sense to move the isBlocked check into 
> makeRequest.
>     
>     Also of note, the isBlocked condition should only evaluate to true very 
> infrequently, so there isn't any need to optimize the check's location for 
> performance.

Joel, if you decide to keep this inside insertRequest() then you might move it 
up two lines so that it is called before the default_entry is created. It's 
really minor, but it doesn't make sense to create the default_entry before the 
check.


- Brandon


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


On Oct. 9, 2015, 3:15 p.m., Joel Hestness wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://reviews.gem5.org/r/3149/
> -----------------------------------------------------------
> 
> (Updated Oct. 9, 2015, 3:15 p.m.)
> 
> 
> Review request for Default.
> 
> 
> Repository: gem5
> 
> 
> Description
> -------
> 
> Changeset 11157:65d87638830f
> ---------------------------
> ruby: Fix block_on behavior
> 
> Ruby's controller block_on behavior aimed to block MessageBuffer requests into
> SLICC controllers when a Locked_RMW was in flight. Unfortunately, this
> functionality only partially works: When non-Locked_RMW memory accesses are
> issued to the sequencer to an address with an in-flight Locked_RMW, the
> sequencer may pass those accesses through to the controller. At the 
> controller,
> a number of incorrect activities can occur depending on the protocol. In
> MOESI_hammer, for example, an intermediate IFETCH will cause an L1D to L2
> transfer, which cannot be serviced, because the block_on functionality blocks
> the trigger queue, resulting in a deadlock. Further, if an intermediate store
> arrives (e.g. from a separate SMT thread), the sequencer allows the request
> through to the controller, and the atomicity of the Locked_RMW may be broken.
> 
> To avoid these problems, disallow the Sequencer from passing any memory
> accesses to the controller besides Locked_RMW_Write when a Locked_RMW is in-
> flight.
> 
> 
> Diffs
> -----
> 
>   src/mem/ruby/slicc_interface/AbstractController.hh bd894d2bdd7c 
>   src/mem/ruby/slicc_interface/AbstractController.cc bd894d2bdd7c 
>   src/mem/ruby/system/Sequencer.cc bd894d2bdd7c 
> 
> Diff: http://reviews.gem5.org/r/3149/diff/
> 
> 
> Testing
> -------
> 
> Considered many other potential solutions on gem5-gpu email list, which seem
> unlikely to function as desired:
> https://groups.google.com/forum/#!topic/gem5-gpu-dev/RQv4SxIKv7g
> 
> Found reproducible version of the IFETCH bug with gem5 11139:bd894d2bdd7c 
> (using the xsave disable patch in this email thread:  
> http://comments.gmane.org/gmane.comp.emulators.m5.devel/24558 )
> 
> Reproducible command line: ../build/X86_MOESI_hammer/gem5.opt 
> --outdir=$outdir ../configs/example/fs.py --ruby --cpu-type=detailed --caches 
> --num-cpus=4 --script ../configs/boot/hack_back_ckpt.rcS --kernel 
> ../../full_system_files/binaries/x86_64-vmlinux-2.6.28.4-smp
> 
> Verified that the patch fixes the reproducible bug and tested that booting
> Linux works with O3CPU and numerous other system configurations.
> 
> 
> Thanks,
> 
> Joel Hestness
> 
>

_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to