Hi, all, This issue has not been fixed yet. Can anyone suggest how to fix this?
To deal with the invalid address, I tried to define a new python class, PIOBus, inherent from Noncoherent bus and the new python class contains BadAddr member, like the way used in classic memory system. Then I use the PIOBus when creating Alpha system, but it is said that BadAddr is not connected to the system. Thanks! -----Original Message----- From: gem5-users-boun...@gem5.org [mailto:gem5-users-boun...@gem5.org] On Behalf Of Nilay Vaish Sent: Friday, May 18, 2012 8:45 PM To: gem5 users mailing list Subject: Re: [gem5-users] Panic due to bad address on speculation in O3CPU Try it out! I think you would just need to replace the call to Bus() with a call to MemBus(). -- Nilay On Fri, 18 May 2012, Ripudaman Singh wrote: > Hi Nilay, > > Yes, I see the instantiation of bad address in MemBus but this is not being > used for Ruby. > It is done only for classic memory system as Steve mentioned. > > Can we do a similar thing for Ruby? > > Thanks, > Ripudaman Singh > > > >> Date: Thu, 17 May 2012 22:44:56 -0500 (CDT) >> From: Nilay Vaish <ni...@cs.wisc.edu> >> To: gem5 users mailing list <gem5-users@gem5.org> >> Subject: Re: [gem5-users] gem5-users Digest, Vol 70, Issue 73 >> Message-ID: <pine.lnx.4.64.1205172233170.31...@ribera.cs.wisc.edu> >> Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed >> >> If you look at the definition of MemBus in configs/common/FSConfig.py, you >> would find a bad address device being instantiated. It seems that this >> device would respond in case no port exists for the address being >> accessed. >> >> -- >> Nilay >> >> On Thu, 17 May 2012, Ripudaman Singh wrote: >> >>> Hi Steve/Nilay, >>> >>> Thanks for your response. >>> >>> I see following messages from RubyPort: >>> >>> On a Valid Address: >>> 9001116318499: system.l1_cntrl0.sequencer-port1: Timing access caught for >>> address 0x7f012d80 >>> 9001116318499: system.l1_cntrl0.sequencer-port1: Request found in 0 - >>> 0x7fffffff range >>> 9001116318499: system.l1_cntrl0.sequencer-port1: Request 0x7f012d80 >> issued >>> >>> On the Bad Address: >>> 9001116318812: system.l1_cntrl0.sequencer-port1: Timing access caught for >>> address 0x47f23002c >>> 9001116318812: system.l1_cntrl0.sequencer-port1: Request for address >>> 0x0x47f23002c is assumed to be a pio request >>> >>> Hence Ruby assumes its a pio request since it doesn't lie in actual >>> Physical Memory Range. >>> >>> The complete flow is: >>> RubyPort::M5Port::recvTiming -> RubyPort::PioPort::sendTiming >>> -> SimpleTimingPort::sendDeferredPacket -> Port::sendTiming >>> -> Bus::recvTiming -> Bus::findPort >>> >>> This would be for any request actually. Just second function sendTiming >>> would be RubyPort::M5Port::sendTiming instead of PioPort. >>> And from front-end LSQ the access is sent to dcache port without any >> check >>> made on physical address. >>> >>> Also, I couldn't find the usage of BadAddressError in classic memory >>> system. It is defined as one of responses for memory cmds but couldn't >> find >>> where it is being used. >>> >>> Any further suggestions on a clean fix? >>> >>> Thanks, >>> Ripudaman Singh >>> >>> Date: Wed, 16 May 2012 21:47:07 -0700 >>>> From: Steve Reinhardt <ste...@gmail.com> >>>> To: gem5 users mailing list <gem5-users@gem5.org> >>>> Subject: Re: [gem5-users] Panic due to bad address on speculation in >>>> O3CPU >>>> Message-ID: >>>> <CAHgMoh8KyYr= >> ud-orzzyq4befpatoqvt4fr6tqbqww0mtdo...@mail.gmail.com >>>>> >>>> Content-Type: text/plain; charset="iso-8859-1" >>>> >>>> I suspect the device bus that Ruby uses doesn't have a default bad >> address >>>> responder like the non-Ruby memory system does. This is the "fake >> device" >>>> that responds with BadAddressError when there's no device associated >> with >>>> an address. >>>> >>>> Steve >>>> >>>> On Wed, May 16, 2012 at 8:33 PM, Nilay Vaish <ni...@cs.wisc.edu> wrote: >>>> >>>>> From the source of the panic message, it seems Ruby never came into >>>>> picture. Or if it did, it just assumed that this address lies in some >>>>> device' address space. In fact that seems to be the reason why no check >>>>> appears in the O3 CPU on whether or not the address lies in the >> physical >>>>> memory's address range. >>>>> >>>>> -- >>>>> Nilay >>>>> >>>>> >>>>> On Wed, 16 May 2012, Steve Reinhardt wrote: >>>>> >>>>> A bad address access should really just return a BadAddressError and >> not >>>>>> panic. Then the CPU can easily ignore the error if the instruction >> that >>>>>> caused the error is not committed. >>>>>> >>>>>> I believe this is what happens with the classic memory system. It may >>>>>> just >>>>>> be a Ruby issue that the same thing doesn't happen there. I'm >> surprised >>>>>> we >>>>>> haven't run into this already. >>>>>> >>>>>> Steve >>>>>> >>>>>> On Wed, May 16, 2012 at 5:32 PM, Ripudaman Singh >>>>>> <ripudaman.i...@gmail.com>**wrote: >>>>>> >>>>>> Hi, >>>>>>> >>>>>>> I get following error while running a benchmark with O3CPU and Ruby >>>>>>> configuration: >>>>>>> panic: Unable to find destination for addr 0x47f23002c >>>>>>> @ cycle 5749353955244 >>>>>>> [findPort:build_alpha_fs_**moesi_cmp_dir/build/ALPHA_FS_** >>>>>>> MOESI_CMP_directory/mem/bus.**cc, >>>>>>> line 359] >>>>>>> Memory Usage: 2711992 KBytes >>>>>>> Program aborted at cycle 5749353955244 >>>>>>> >>>>>>> On debug, I found that it happens because of bad address generated on >>>>>>> speculation. >>>>>>> In other words, core keeps fetching from predicted branch target (or >>>>>>> targets since it encounters other branches on the speculated path) >> and >>>>>>> branch will mispredict eventually (confirmed on comparing with trace >>>> from >>>>>>> TimingSimple CPU). >>>>>>> But before misprediction happens, it leads to an invalid load address >>>> and >>>>>>> generates above error. >>>>>>> >>>>>>> I see a check for an invalid address for instruction cache access in >>>>>>> fetch_impl.hh (reproduced below from function finishTranslation) >> which >>>>>>> stalls fetch stage. >>>>>>> if (!cpu->system->isMemAddr(mem_**req->getPaddr())) { >>>>>>> warn("Address %#x is outside of physical memory, stopping >>>>>>> fetch\n", >>>>>>> mem_req->getPaddr()); >>>>>>> fetchStatus[tid] = NoGoodAddr; >>>>>>> delete mem_req; >>>>>>> memReq[tid] = NULL; >>>>>>> return; >>>>>>> } >>>>>>> >>>>>>> But there is no such check for data or load access in iew or lsq. >>>>>>> I guess the fix would be to not execute (or squash?) the faulting >> load >>>>>>> and >>>>>>> somehow signal to fetch stage to stall as done for instruction cache. >>>> Can >>>>>>> you suggest how can I do that? >>>>>>> >>>>>>> I already tried limiting in-flight branches to 1. That works but >> gives >>>>>>> lower perf. So, I'm looking for a better solution. >>>>>>> >>>>>>> Thanks, >>>>>>> Ripudaman Singh >>>>>>> >>>>>>> ______________________________**_________________ >>>>>>> gem5-users mailing list >>>>>>> gem5-users@gem5.org >>>>>>> http://m5sim.org/cgi-bin/**mailman/listinfo/gem5-users< >>>> 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< >>>> 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 >> >> End of gem5-users Digest, Vol 70, Issue 79 >> ****************************************** >> > _______________________________________________ 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