Hello Andreas,
Ok. So below code make sure that the next scheduling decision happens early
enough. Is that correct?
// Update the minimum timing between the requests, this is a
// conservative estimate of when we have to schedule the next
// request to not introduce any unecessary bubbles. In most cases
// we will wake up sooner than we have to.
nextReqTime = busBusyUntil - (tRP + tRCD + tCL);
Thanks,
Prathap
On Fri, Jul 10, 2015 at 11:51 AM, Andreas Hansson <[email protected]>
wrote:
> Hi Prathap,
>
> If we have no row hits left in the queue, the open-adaptive (and
> close-adaptive) policy will auto precharge. The next scheduling decision
> will happen early enough that we can hide any preparation needed to not
> introduce bubbles on the bus. Thus, the activate will happen early enough
> to get 100% utilisation if this is possible.
>
> Andreas
>
> From: gem5-users <[email protected]> on behalf of Prathap
> Kolakkampadath <[email protected]>
> Reply-To: gem5 users mailing list <[email protected]>
> Date: Friday, 10 July 2015 17:11
> To: gem5 users mailing list <[email protected]>
> Subject: Re: [gem5-users] Suspecting bubbles in the DRAM controller
> command bus
>
> Hello Andreas,
>
> I am still not very clear.
> >> If we have not already precharged, we need to take the hit and do it
> now.
> What If we don't have any row hits left in the queue? I agree that with
> open-adaptive policy, the Bank1 will be auto precharged. According to the
> code snippet below, it still has to issue an activate now. Shouldn't this
> have done back in time(Bank level parallelism)?
>
> Thanks,
> Prathap
>
>
>
>
>
>
> On Fri, Jul 10, 2015 at 2:16 AM, Andreas Hansson <[email protected]>
> wrote:
>
>> Hi Prathap,
>>
>> The expression ensures that we do not “go back in time” when deciding
>> to precharge the bank. If we have not already precharged, we need to take
>> the hit and do it now. For the access pattern you describe, with an
>> closed-adaptive or open-adaptive page policy we will issue the last column
>> access with an auto-precharge. In any case, if R0-9 are to bank 0 and R10
>> to bank 1 then we can prepare R10 without the need to precharge bank 0.
>>
>> Andreas
>>
>> From: gem5-users <[email protected]> on behalf of Prathap
>> Kolakkampadath <[email protected]>
>> Reply-To: gem5 users mailing list <[email protected]>
>> Date: Thursday, 9 July 2015 18:26
>> To: gem5 users mailing list <[email protected]>
>> Subject: [gem5-users] Suspecting bubbles in the DRAM controller command
>> bus
>>
>> Hello Users,
>>
>> I suspect the DRAM controller code is adding unwanted bubbles in the
>> command bus.
>>
>> Consider there are 10 row hit read requests- R0 and R9- in the queue,
>> all targeting Bank0 and a Row miss request- R10 -to Bank1 of same rank and
>> numbered in the arrival order. According to FR-FCFS in open-page policy,
>> the DRAM controller process all row-hit requests to Bank0 and then choose
>> the row-miss request to Bank1. I suspect the problem lies here in the
>> controller code, when it updates the access latency of the row miss
>> request- R10 - to bank1.
>>
>> According to JEDEC timing constraints, the controller can issue
>> Precharge to another bank after a clock cycle(tCK) delay and Activate
>> after tRRD cycles delay(ACT-ACT delay between two banks). This means, by
>> the time DRAM controller process the 10 row hit requests, the Bank1 should
>> be precharged and activated.
>>
>>
>> However, I am not sure if this is taken care of in the below snippet of
>> code.
>>
>> if (bank.openRow == dram_pkt->row) {
>> // nothing to do
>> } else {
>> row_hit = false;
>>
>> // If there is a page open, precharge it.
>> if (bank.openRow != Bank::NO_ROW) {
>> *prechargeBank(bank, std::max(bank.preAllowedAt, curTick()))*
>> ;
>> }
>>
>> // next we need to account for the delay in activating the
>> // page
>> Tick act_tick = std::max(bank.actAllowedAt, curTick());
>>
>> // Record the activation and deal with all the global timing
>> // constraints caused be a new activation (tRRD and tXAW)
>> activateBank(bank, act_tick, dram_pkt->row);
>>
>> // issue the command as early as possible
>> cmd_at = bank.colAllowedAt;
>> }
>>
>> shouldn't this be
>>
>> *prechargeBank(bank, std::max(bank.preAllowedAt, dram_pkt->entrytime)*;
>>
>> I am not sure if my understanding is correct. Please clarify.
>>
>> 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.
>>
>> ARM Limited, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ,
>> Registered in England & Wales, Company No: 2557590
>> ARM Holdings plc, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ,
>> Registered in England & Wales, Company No: 2548782
>>
>> _______________________________________________
>> gem5-users mailing list
>> [email protected]
>> 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.
>
> ARM Limited, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ,
> Registered in England & Wales, Company No: 2557590
> ARM Holdings plc, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ,
> Registered in England & Wales, Company No: 2548782
>
> _______________________________________________
> gem5-users mailing list
> [email protected]
> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
>
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users