> So wouldn't a functional table walker be basically be the same as an > atomic-mode one?
I guess I was envisioning a single walker that can handle each type of access. Walker::start handles both timing and atomic accesses currently, but the way it updates state could be trouble for atomic (and functional) accesses that are interleaved with timing accesses: For example, the state assertion at the entrance would fail in the (extremely unlikely) corner case where the MemoryMode was switched from timing to atomic (or functional) while a timing access was in flight (i.e. state != Ready). The ability to interleave timing and functional accesses is going to be necessary eventually, so sorting it out here would make sense. > Also, note that in functional mode you don't want to change visible > system state, so you don't want to update the access bits. For the readfile problem, I hacked vtophys to just do a lookup in the TLBs, and it solved the address translation problem (quick solution so I can continue with further tests). The TLB lookup function supports accesses that don't update LRU bits, so I was thinking the same principle could be applied to the walker state. (I haven't dug into a lot of the code, so I'm not sure if thats a common or agreed upon convention) On Thu, Jul 1, 2010 at 11:43 AM, Steve Reinhardt <ste...@gmail.com> wrote: > So wouldn't a functional table walker be basically be the same as an > atomic-mode one? I'd think it's only the timing-mode version that > really needs all the explicit state. That is, if you were going to > have two versions, I'd think you'd have a functional/atomic one and a > timing one, not a functional one and an atomic/timing one (which is I > believe what you're advocating, since the current one seems to already > handle both atomic and timing modes). > > Also, note that in functional mode you don't want to change visible > system state, so you don't want to update the access bits. I believe > that also means it's OK to bypass the TLB as well, right? (You still > might want to check the TLB if you think there's a good chance you'll > get a hit there, but the question is whether it's necessary for > correctness.) > > Steve > > On Thu, Jul 1, 2010 at 11:19 AM, Gabe Black <gbl...@eecs.umich.edu> wrote: > > Yeah, I skipped implementing that so far. The reason the table walker is > > the way it is is that it needs to actually cooperate with the memory > > system and do real loads/stores, honor timing, etc. For functional > > accesses you should be able to write a simpler implementation that just > > uses its own functional accesses to read from the page tables in memory > > (and write to update the access bits, etc.). You should be careful, > > though, since the TLB acts like a cache and you'll need to check there > > first and not just always go straight to the in memory tables. There'll > > be a little duplication (which might be factored out into utility > > functions) but the page table walker sim object isn't really the right > > tool for this job. > > > > Gabe > > > > Joel Hestness wrote: > >> Hi, > >> It turns out that the readfile bug I posted previously (see below) > >> is a result of an unimplemented vtophys function: CopyIn reads the > >> file in, but the virtual address where it should be placed is not > >> translated to a physical address before sendFunctional is called. > >> This results in a BadAddressError and the packets are dropped. > >> > >> So, I've started looking at the vtophys function. It looks like it > >> will be trickier to implement than it was for prior architectures > >> because of the page table hardware organization and walker. I think > >> vtophys should be implemented by making a functional access to the > >> page table walker. The only problem is that the state machine > >> controlling the walker is updated in each of the access functions. I > >> see a couple possible solutions: > >> > >> 1. vtophys uses a separate walker to look up the entry. The walker > >> could be dynamically instantiated when needed, or it could be saved as > >> a system object specifically for functional accesses. This option > >> seems pretty hacky. > >> > >> 2. vtophys uses the ITB or DTB walker to look up the entry. This > >> would require functional access to the walker so as to not upset its > >> current state. Walker::start would need to take the desired memory > >> mode, and in the case of a functional access, it would need to make > >> sure that it doesn't perturb the current state. This looks like a > >> much better solution to me. > >> > >> I am wondering if anyone has feedback on a choice here, or if there is > >> maybe a better solution. I'd be willing to take a stab at the updates. > >> > >> Thanks, > >> Joel > >> > >> > >> On Mon, Jun 28, 2010 at 4:19 PM, nathan binkert <n...@binkert.org > >> <mailto:n...@binkert.org>> wrote: > >> > >> > This is probably a question for Nate, Gabe or Ali: > >> > I have built the m5 util application for x86 and I have been > >> testing it > >> > under X86_FS simulation. It looks like /sbin/m5 readfile is > >> failing to > >> > print the script to the console of the simulated system. I have > >> been able > >> > to verify that the pseudo instruction executes correctly, and the > >> > appropriate function (PseudoInst::readfile) in the simulator is > >> called with > >> > the correct parameters. There, the file is read into M5s > >> memory, but it > >> > isn't ever printed to the terminal in the simulated system. > >> > Call graph: PseudoInst::readfile -> VirtualPort::CopyIn > >> > -> VirtualPort::writeBlob -> Port::writeBlob -> Port::blobHelper > >> > At that point, blobHelper calls sendFunctional, to transfer > >> the contents > >> > of the file into the simulated system, but I'm having trouble > >> tracing where > >> > the packets end up. > >> > Any ideas on whats going on or how I can debug? > >> There is a mechanism for tracing packets through the system. > >> Basically, if you attach PrintReqState to the object, the system > will > >> print out info about the object moving through the memory system. > >> (Search old e-mails and perhaps the history to find out how it > really > >> works. I've never used it, Steve wrote it.) > >> > >> As for checking things. Did you try firing this up in the debugger > >> and then stepping over the CopyIn call to find out if it succeeded? > >> I'd try that to find out if there is something else wrong before you > >> dig through the memory system. > >> > >> Nate > >> _______________________________________________ > >> m5-dev mailing list > >> m5-dev@m5sim.org <mailto:m5-dev@m5sim.org> > >> http://m5sim.org/mailman/listinfo/m5-dev > >> > >> > >> > >> > >> -- > >> Joel Hestness > >> PhD Student, Computer Architecture > >> Dept. of Computer Science, University of Texas - Austin > >> http://www.cs.utexas.edu/~hestness < > http://www.cs.utexas.edu/%7Ehestness> > >> ------------------------------------------------------------------------ > >> > >> _______________________________________________ > >> m5-dev mailing list > >> m5-dev@m5sim.org > >> http://m5sim.org/mailman/listinfo/m5-dev > >> > > > > _______________________________________________ > > m5-dev mailing list > > m5-dev@m5sim.org > > http://m5sim.org/mailman/listinfo/m5-dev > > > _______________________________________________ > m5-dev mailing list > m5-dev@m5sim.org > http://m5sim.org/mailman/listinfo/m5-dev > -- Joel Hestness PhD Student, Computer Architecture Dept. of Computer Science, University of Texas - Austin http://www.cs.utexas.edu/~hestness
_______________________________________________ m5-dev mailing list m5-dev@m5sim.org http://m5sim.org/mailman/listinfo/m5-dev