Hi Joel,

I would suggest o keep the queued ports, but add methods to reserve resources, 
query if it has free space, and a way to register callbacks so that the 
MemObject is made aware when packets are sent. That way we can use the queue in 
the cache, memory controller etc, without having all the issues of the “naked” 
port interface, but still enforcing a bounded queue.

When a packet arrives to the module we call reserve on the output port. Then 
when we actually add the packet we know that there is space. When request 
packets arrive we check if the queue is full, and if so we block any new 
requests. Then through the callback we can unblock the DRAM controller in this 
case.

What do you think?

Andreas

From: Joel Hestness <[email protected]<mailto:[email protected]>>
Date: Tuesday, 2 February 2016 at 00:24
To: Andreas Hansson <[email protected]<mailto:[email protected]>>
Cc: gem5 Developer List <[email protected]<mailto:[email protected]>>
Subject: Follow-up: Removing QueuedSlavePort from DRAMCtrl

Hi Andreas,
  I'd like to circle back on the thread about removing the QueuedSlavePort 
response queue from DRAMCtrl. I've been working to shift over to DRAMCtrl from 
the RubyMemoryController, but nearly all of my simulations now crash on the 
DRAMCtrl's response queue. Since I need the DRAMCtrl to work, I'll be looking 
into this now. However, based on my inspection of the code, it looks pretty 
non-trivial to remove the QueueSlavePort, so I'm hoping you can at least help 
me work through the changes.

  To reproduce the issue, I've put together a slim gem5 patch (attached) to use 
the memtest.py script to generate accesses. Here's the command line I used:

% build/X86/gem5.opt --debug-flag=DRAM --outdir=$outdir 
configs/example/memtest.py -u 100

  If you're still willing to take a stab at it, let me know if/how I can help. 
Otherwise, I'll start working on it. It seems the trickiest thing is going to 
be modeling the arbitrary frontendLatency and backendLatency while still 
counting all of the accesses that are in the controller when it needs to block 
back to the input queue. These latencies are currently assessed with scheduling 
in the port response queue. Any suggestions you could give would be appreciated.

  Thanks!
  Joel


Below here is our conversation from the email thread "[gem5-dev] Review Request 
3116: ruby: RubyMemoryControl delete requests"

On Wed, Sep 23, 2015 at 3:51 PM, Andreas Hansson 
<[email protected]<mailto:[email protected]>> wrote:
Great. Thanks Joel.

If anything pops up on our side I’ll let you know.

Andreas

From: Joel Hestness <[email protected]<mailto:[email protected]>>
Date: Wednesday, 23 September 2015 20:29

To: Andreas Hansson <[email protected]<mailto:[email protected]>>
Cc: gem5 Developer List <[email protected]<mailto:[email protected]>>
Subject: Re: [gem5-dev] Review Request 3116: ruby: RubyMemoryControl delete 
requests


I don’t think there is any big difference in our expectations, quite the 
contrary :-). GPUs are very important to us (and so is throughput computing in 
general), and we run plenty simulations with lots of memory-level parallelism 
from non-CPU components. Still, we haven’t run into the issue.

Ok, cool. Thanks for the context.


If you have practical examples that run into problems let me know, and we’ll 
get it fixed.

I'm having trouble assembling a practical example (with or without using 
gem5-gpu). I'll keep you posted if I find something reasonable.

  Thanks!
  Joel


From: Joel Hestness <[email protected]<mailto:[email protected]>>
Date: Tuesday, 22 September 2015 19:58

To: Andreas Hansson <[email protected]<mailto:[email protected]>>
Cc: gem5 Developer List <[email protected]<mailto:[email protected]>>
Subject: Re: [gem5-dev] Review Request 3116: ruby: RubyMemoryControl delete 
requests

Hi Andreas,

If it is a real problem affecting end users I am indeed volunteering to fix the 
DRAMCtrl use of QueuedSlavePort. In the classic memory system there are enough 
points of regulation (LSQs, MSHR limits, crossbar layers etc) that having a 
single memory channel with >100 queued up responses waiting to be sent is 
extremely unlikely. Hence, until now the added complexity has not been needed. 
If there is regulation on the number of requests in Ruby, then I would argue 
that it is equally unlikely there…I could be wrong.

Ok. I think a big part of the difference between our expectations is just the 
cores that we're modeling. AMD and gem5-gpu can model aggressive GPU cores with 
potential to expose, perhaps, 4-32x more memory-level parallel requests than a 
comparable number of multithreaded CPU cores. I feel that this difference 
warrants different handling of accesses in the memory controller.

  Joel



From: Joel Hestness <[email protected]<mailto:[email protected]>>
Date: Tuesday, 22 September 2015 17:48

To: Andreas Hansson <[email protected]<mailto:[email protected]>>
Cc: gem5 Developer List <[email protected]<mailto:[email protected]>>
Subject: Re: [gem5-dev] Review Request 3116: ruby: RubyMemoryControl delete 
requests

Hi Andreas,

Thanks for the "ship it!"

Do we really need to remove the use of QueuedSlavePort in DRAMCtrl? It will 
make the controller more complex, and I don’t want to do it “just in case”.

Sorry, I misread your email as offering to change the DRAMCtrl. I'm not sure 
who should make that change, but I think it should get done. The memory access 
response path starts at the DRAMCtrl and ends at the RubyPort. If we add 
control flow to the RubyPort, packets will probably back-up more quickly on the 
response path back to where there are open buffers. I expect the DRAMCtrl 
QueuedPort problem becomes more prevalent as Ruby adds flow control, unless we 
add a limitation on outstanding requests to memory from directory controllers.

How does the classic memory model deal with this?

  Joel


From: Joel Hestness <[email protected]<mailto:[email protected]>>
Date: Tuesday, 22 September 2015 17:30
To: Andreas Hansson <[email protected]<mailto:[email protected]>>
Cc: gem5 Developer List <[email protected]<mailto:[email protected]>>

Subject: Re: [gem5-dev] Review Request 3116: ruby: RubyMemoryControl delete 
requests

Hi guys,
  Thanks for the discussion here. I had quickly tested other memory 
controllers, but hadn't connected the dots that this might be the same problem 
Brad/AMD are running into.

  My preference would be that we remove the QueuedSlavePort from the DRAMCtrls. 
That would at least eliminate DRAMCtrls as a potential source of the 
QueueSlavePort packet overflows, and would allow us to more closely focus on 
the RubyPort problem when we get to it.

  Can we reach resolution on this patch though? Are we okay with actually 
fixing the memory leak in mainline?

  Joel


On Tue, Sep 22, 2015 at 11:19 AM, Andreas Hansson 
<[email protected]<mailto:[email protected]>> wrote:
Hi Brad,

We can remove the use of QueuedSlavePort in the memory controller and
simply not accept requests if the response queue is full. Is this needed?
If so we’ll make sure someone gets this in place. The only reason we
haven’t done it is because it hasn’t been needed.

The use of QueuedPorts in the Ruby adapters is a whole different story. I
think most of these can be removed and actually use flow control. I’m
happy to code it up, but there is such a flux at the moment that I didn’t
want to post yet another patch changing the Ruby port. I really do think
we should avoid having implicit buffers for 1000’s of kilobytes to the
largest extend possible. If we really need a constructor parameter to make
it “infinite” for some quirky Ruby use-case, then let’s do that...

Andreas


On 22/09/2015 17:14, "gem5-dev on behalf of Beckmann, Brad"
<[email protected]<mailto:[email protected]> on behalf of 
[email protected]<mailto:[email protected]>> wrote:

>From AMD's perspective, we have deprecated our usage of RubyMemoryControl
>and we are using the new Memory Controllers with the port interface.
>
>That being said, I completely agree with Joel that the packet queue
>finite invisible buffer limit of 100 needs to go!  As you know, we tried
>very hard several months ago to essentially make this a infinite buffer,
>but Andreas would not allow us to check it in.  We are going to post that
>patch again in a few weeks when we post our GPU model.  Our GPU model
>will not work unless we increase that limit.
>
>Andreas you keep arguing that if you exceed that limit, that something is
>fundamentally broken.  Please keep in mind that there are many uses of
>gem5 beyond what you use it for.  Also this is a research simulator and
>we should not restrict ourselves to what we think is practical in real
>hardware.  Finally, the fact that the finite limit is invisible to the
>producer is just bad software engineering.
>
>I beg you to please allow us to remove this finite invisible limit!
>
>Brad
>
>
>
>-----Original Message-----
>From: gem5-dev 
>[mailto:[email protected]<mailto:[email protected]>] On Behalf 
>Of Andreas
>Hansson
>Sent: Tuesday, September 22, 2015 6:35 AM
>To: Andreas Hansson; Default; Joel Hestness
>Subject: Re: [gem5-dev] Review Request 3116: ruby: RubyMemoryControl
>delete requests
>
>
>
>> On Sept. 21, 2015, 8:42 a.m., Andreas Hansson wrote:
>> > Can we just prune the whole RubyMemoryControl rather? Has it not been
>>deprecated long enough?
>>
>> Joel Hestness wrote:
>>     Unless I'm overlooking something, for Ruby users, I don't see other
>>memory controllers that are guaranteed to work. Besides
>>RubyMemoryControl, all others use a QueuedSlavePort for their input
>>queues. Given that Ruby hasn't added complete flow control, PacketQueue
>>size restrictions can be exceeded (triggering the panic). This occurs
>>infrequently/irregularly with aggressive GPUs in gem5-gpu, and appears
>>difficult to fix in a systematic way.
>>
>>     Regardless of the fact we've deprecated RubyMemoryControl, this is
>>a necessary fix.
>
>No memory controller is using QueuedSlaavePort for any _input_ queues.
>The DRAMCtrl class uses it for the response _output_ queue, that's all.
>If that is really an issue we can move away from it and enfore an upper
>bound on responses by not accepting new requests. That said, if we hit
>the limit I would argue something else is fundamentally broken in the
>system and should be addressed.
>
>In any case, the discussion whether to remove RubyMemoryControl or not
>should be completely decoupled.
>
>
>- Andreas


--
  Joel Hestness
  PhD Candidate, Computer Architecture
  Dept. of Computer Science, University of Wisconsin - Madison
  http://pages.cs.wisc.edu/~hestness/
IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium. Thank you.
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to