Hello Andreas, see my comments below.
Thanks, Prathap On Wed, Nov 11, 2015 at 12:59 PM, Andreas Hansson <andreas.hans...@arm.com> wrote: > Hi Prathap, > > Ok, so for FCFS we are seeing the expected behaviour. Agreed? > >> Agreed. Because CAS is ordered. > > I completely agree on the point of the ordered CAS, and for FR-FCFS we > could indeed hit the case you describe. Additionally, the model makes > scheduling decisions “conservatively” early (assuming it has to precharge > the page), so there is also an inherent window where we decide to do > something, and something else could show up in the meanwhile, which we > would have chosen instead. > > I agree that we could fix this. The arguments against: 1) in any case, a > real controller has a pipeline latency that will limit the visibility to > the scheduler, so if the window is in the order of the “fronted pipeline > latency” of the model then it’s not really a problem since we would have > missed them in reality as well (admittedly here it is slightly longer), 2) > with more things in the queues (typical case), the likelihood of having to > make a bad decision because of this window is very small, 3) I fear it > might add quite some complexity to account for these gaps (as opposed to > just tracking next CAS), with a very small impact in most full-blown > use-cases. > >> I agree that this may not be an issue on larger use-cases, however the implementation differs from how a real DRAM controllers schedules the commands, where CAS can be reordered based >> on the readiness of the respective Bank. > > It would be great to actually figure out if this is an issue on larger > use-cases, and what the performance impact on the simulator is for fixing > the issue. Will you take a stab at coding up a fix? > >> I think this can be easily fixed by "updating the next CAS to banks, only if the packet is a row hit". I believe this works assuming tRRD for any DRAM module is greater than the CAS-CAS delay. >> I did a fix and ran dram_sweep.py. There was absolutely no difference in the performance, which was expected. >> Presently i am not able to anticipate any other complexity. > > Andreas > > From: gem5-users <gem5-users-boun...@gem5.org> on behalf of Prathap > Kolakkampadath <kvprat...@gmail.com> > Reply-To: gem5 users mailing list <gem5-users@gem5.org> > Date: Wednesday, 11 November 2015 at 18:47 > > To: gem5 users mailing list <gem5-users@gem5.org> > Subject: Re: [gem5-users] Modelling command bus contention in DRAM > controller > > Hello Andreas, > > Please see my comments below > > Thanks, > Prathap > > On Wed, Nov 11, 2015 at 12:38 PM, Andreas Hansson <andreas.hans...@arm.com > > wrote: > >> Hi Prathap, >> >> I don’t quite understand the statement about the second CAS being issued >> before the first one. FCFS by construction won’t do that (in any case, >> please do not use FCFS for anything besides debugging, it’s really not >> representative). >> > > >>>> This could happen even in fr-fcfs, incase a hit request arrives soon > after a miss request has been selected by the scheduler. > >> >> The latency you quote for access (2), is that taking the colAllowedAt and >> busBusyUntil into account? Remember that doDRAMAccess is not necessarily >> coinciding with then this access actually starts. >> > > >>>> My point here is a CAS to a bank has to be issued as soon as the > bank is available. In that case, the request 2 should be ready before > request one. However, in the current implementation, "all CAS are strictly > ordered". > >> >> It could very well be that there is a bug, and if there is we should get >> it sorted. >> > >>>> I believe that this could be a bug. > >> >> Andreas >> >> From: gem5-users <gem5-users-boun...@gem5.org> on behalf of Prathap >> Kolakkampadath <kvprat...@gmail.com> >> Reply-To: gem5 users mailing list <gem5-users@gem5.org> >> Date: Wednesday, 11 November 2015 at 17:43 >> >> To: gem5 users mailing list <gem5-users@gem5.org> >> Subject: Re: [gem5-users] Modelling command bus contention in DRAM >> controller >> >> Hello Andreas, >> >> I believe it is restrictive. >> Below is the DRAM trace under fcfs scheduler for two requests, where >> first request is a RowMiss request to Bank0 >> and second request is a RowHit request to Bank1. >> >> 1) *Memory access latency of first miss request*. >> From the trace, the Memory access latency of the first miss request >> is 52.5ns (tRP(15) + tRCD(15) + tCL(15) + tBURST(7.5)). >> This is expected. >> 2) *Memory access latency of second request, which is a Hit to a >> different Bank.* >> From the trace, the memory access latency for the second request is >> also 52.5ns >> This is unexpected. CAS of this ready request should have issued >> before the CAS of the first Miss request. >> >> In doDRAMAccess() the miss request is updating the next read/write burst >> of all banks, thus the CAS of Ready request >> can now be issued only after the CAS of the Miss Request. >> >> 321190719635810: system.mem_ctrls: Timing access to addr 4291233984, >> rank/bank/row 0 0 65422 >> 321190719635810: system.mem_ctrls: RowMiss:READ >> 321190719635810: system.mem_ctrls: Access to 4291233984, ready at >> 321190719688310 bus busy until 321190719688310. >> 321190719643310: system.mem_ctrls: Timing access to addr 3983119872, >> rank/bank/row 0 1 56019 >> 321190719643310: system.mem_ctrls: RowHit:READ >> 321190719643310: system.mem_ctrls: Access to 3983119872, ready at >> 321190719695810 bus busy until 321190719695810. >> >> Please let me know what you think. >> >> Thanks, >> Prathap >> >> >> On Wed, Nov 11, 2015 at 3:00 AM, Andreas Hansson <andreas.hans...@arm.com >> > wrote: >> >>> Hi Prathap, >>> >>> Could you elaborate on why you think this line is causing problems. It >>> sounds like you are suggesting this line is too restrictive? >>> >>> It simply enforces a minimum col-to-col timing, there could still be >>> other constraints that are more restrictive. >>> >>> Andreas >>> >>> From: gem5-users <gem5-users-boun...@gem5.org> on behalf of Prathap >>> Kolakkampadath <kvprat...@gmail.com> >>> Reply-To: gem5 users mailing list <gem5-users@gem5.org> >>> Date: Tuesday, 10 November 2015 at 21:30 >>> >>> To: gem5 users mailing list <gem5-users@gem5.org> >>> Subject: Re: [gem5-users] Modelling command bus contention in DRAM >>> controller >>> >>> Hi Andreas, >>> >>> To be more precise, I believe the below code snippet in doDRAMAccess(), >>> should be called only for the Row Hit request. For a Row Miss request why >>> do we have to update the bank.colAllowedAt for all the Banks? >>> >>> // update the time for the next read/write burst for each >>> >>> // bank (add a max with tCCD/tCCD_L here) >>> >>> ranks[j]->banks[i].colAllowedAt = std::max(cmd_at + >>> cmd_dly,ranks[j]->banks[i].colAllowedAt) >>> >>> >>> Thanks, >>> >>> Prathap >>> >>> >>> >>> On Tue, Nov 10, 2015 at 12:13 PM, Prathap Kolakkampadath < >>> kvprat...@gmail.com> wrote: >>> >>>> Hi Andreas, >>>> >>>> As you said all the act-act are taken in to account. >>>> All col-to-col is taken in to account except, if there is a open >>>> request(Hit) after a closed request(Miss). >>>> If i am using* FCFS* scheduler, and there are two requests in the >>>> queue Request1 and Request2 like below, according >>>> to the current implementation CAS of Request2 is only issued after CAS >>>> of Request1. Is that correct? >>>> I don't see in doDramAccess(), where the CAS of second request is >>>> updated ahead of CAS of first request. >>>> >>>> *Request1@Bank1 (PRE-ACT-CAS) --> Request2@Bank2 (CAS)* >>>> >>>> Could you please clarify? >>>> >>>> I will also take a look into the util/dram_sweep_plot.py. >>>> >>>> Thanks, >>>> Prathap >>>> >>>> On Tue, Nov 10, 2015 at 9:41 AM, Andreas Hansson < >>>> andreas.hans...@arm.com> wrote: >>>> >>>>> Hi Prathap, >>>>> >>>>> All the col-to-col, act-to-act etc are taken into account, just not >>>>> command-bus contention. Have a look at util/dram_sweep_plot.py for a >>>>> graphical “test bench” for the DRAM controller. As you will see, it never >>>>> exceeds the theoretical max. This script relies on the >>>>> configs/dram/sweep.py for the actual generation of data. >>>>> >>>>> Andreas >>>>> >>>>> From: gem5-users <gem5-users-boun...@gem5.org> on behalf of Prathap >>>>> Kolakkampadath <kvprat...@gmail.com> >>>>> Reply-To: gem5 users mailing list <gem5-users@gem5.org> >>>>> Date: Monday, 9 November 2015 at 21:53 >>>>> To: gem5 users mailing list <gem5-users@gem5.org> >>>>> Subject: Re: [gem5-users] Modelling command bus contention in DRAM >>>>> controller >>>>> >>>>> Hello Andreas, >>>>> >>>>> One problem could be when there is a Miss request followed by a Hit >>>>> request. Taking the below example, initially queue has only one request >>>>> R1(Miss), as soon as the this request is selected there >>>>> is another request in the queue R2(Hit). Here CAS of R2 is ready and >>>>> can be issued right away in the next clock cycle. However, i believe in >>>>> the simulator, while it computes the ready time of R1, it also recomputes >>>>> the >>>>> next CAS that can be issued to other Banks. Thus the CAS of R2 can now >>>>> be issued only after the CAS of R1. If i am right, this could be a >>>>> problem? >>>>> >>>>> Request1@Bank1 (PRE-ACT-CAS) --> Request2@Bank2 (CAS) >>>>> >>>>> Thanks, >>>>> Prathap >>>>> >>>>> On Mon, Nov 9, 2015 at 1:27 PM, Andreas Hansson < >>>>> andreas.hans...@arm.com> wrote: >>>>> >>>>>> Hi Prathap, >>>>>> >>>>>> Command-bus contention is intentionally not modelled. The main reason >>>>>> for this is to keep the model performant. Moreover, in real devices the >>>>>> command bus is typically designed to _not_ be a bottleneck. Admittedly >>>>>> this >>>>>> choice could be reassessed if needed. >>>>>> >>>>>> Andreas >>>>>> >>>>>> From: gem5-users <gem5-users-boun...@gem5.org> on behalf of Prathap >>>>>> Kolakkampadath <kvprat...@gmail.com> >>>>>> Reply-To: gem5 users mailing list <gem5-users@gem5.org> >>>>>> Date: Monday, 9 November 2015 at 18:25 >>>>>> To: gem5 users mailing list <gem5-users@gem5.org> >>>>>> Subject: [gem5-users] Modelling command bus contention in DRAM >>>>>> controller >>>>>> >>>>>> >>>>>> Hello Users, >>>>>> >>>>>> After closely looking at the doDRAMAccess() of dram controller >>>>>> implementation in GEM5, i suspect that the current implementation may not >>>>>> be taking in to account the command bus contention that could happen if >>>>>> DRAM timing constraints take particular values. >>>>>> >>>>>> For example in the below scenario, the queue has two closed requests >>>>>> one to Bank1 and other to Bank2. >>>>>> >>>>>> Request1@Bank1 (PRE-ACT-CAS) --> Request2@Bank2 (PRE-ACT-CAS) >>>>>> >>>>>> Lets say tRP(8cycles), tRCD(8cycles), tCL(8cycles), and tRRD(8 >>>>>> cycles). In this case ACT of R2 and CAS of R1 becomes active at the same >>>>>> time. >>>>>> At this point one command needs to be delayed by one clock cycle. I >>>>>> don't see how simulator is handling this? If the simulator is handling >>>>>> this, could someone please point me to the code snippet where this is >>>>>> handled. >>>>>> >>>>>> >>>>>> Thanks, >>>>>> Prathap >>>>>> >>>>>> >>>>>> ------------------------------ >>>>>> >>>>>> -- 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-users mailing list >>>>>> gem5-users@gem5.org >>>>>> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users >>>>>> >>>>> >>>>> >>>>> ------------------------------ >>>>> >>>>> -- 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-users mailing list >>>>> gem5-users@gem5.org >>>>> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users >>>>> >>>> >>>> >>> >>> ------------------------------ >>> >>> -- 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-users mailing list >>> gem5-users@gem5.org >>> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users >>> >> >> >> ------------------------------ >> >> -- 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-users mailing list >> gem5-users@gem5.org >> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users >> > > > ------------------------------ > > -- 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-users mailing list > gem5-users@gem5.org > http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users >
_______________________________________________ gem5-users mailing list gem5-users@gem5.org http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users