x86: Timing support for pagetable walker
Review Request #396 - Created Jan. 6, 2011 and submitted
| Information | |
|---|---|
| Brad Beckmann | |
| gem5 | |
| Reviewers | |
| Default | |
| ali, gblack, nate, stever | |
x86: Timing support for pagetable walker Move page table walker state to its own object type, and make the walker instantiate state for each outstanding walk. By storing the states in a queue, the walker is able to handle multiple outstanding timing requests. Note that functional walks use separate state elements.
Posted (Jan. 6, 2011, 9:51 p.m.)
The code seems ok, but why do we need to have multiple outstanding page walks in timing mode again?
-
src/arch/x86/pagetable_walker.hh (Diff revision 1) -
Why call this reqType instead of leaving it as mode? requests have types which are orthogonal to this, and it's called mode everywhere else.
-
src/arch/x86/pagetable_walker.cc (Diff revision 1) -
These should use FastAlloc if at all possible since they're on a critical path and the heap is slow.
-
src/arch/x86/pagetable_walker.cc (Diff revision 1) -
Memory leak.
-
src/arch/x86/pagetable_walker.cc (Diff revision 1) -
Is letting translations pass each other realistic? I worry we're making our walker artificially powerful. These loops will also slow things down potentially.
-
src/arch/x86/pagetable_walker.cc (Diff revision 1) -
Declare this where it's used.
-
src/arch/x86/pagetable_walker.cc (Diff revision 1) -
Why is this pulled out into its own switch statement? That will slow down the code and makes things more complicated.
Posted (Jan. 21, 2011, 6:22 p.m.)
-
src/arch/x86/pagetable_walker.cc (Diff revision 3) -
Possible memory leak? I think the sender is responsible for cleaning up the packet for atomic accesses, and I don't see where that's being done. I may be wrong about atomic mode, or have missed where this is cleaned up.
-
src/arch/x86/pagetable_walker.cc (Diff revision 3) -
Possible memory leak?
-
src/arch/x86/pagetable_walker.cc (Diff revision 3) -
Instead of putting the majority of this function in an if/else, you could split it into two different functions. Then you could make the functional part take different parameters and not have to use the req or translation object to ferry information back.
-
src/arch/x86/pagetable_walker.cc (Diff revision 3) -
Possible memory leak? Same rational as atomic mode.
-
src/arch/x86/pagetable_walker.cc (Diff revision 3) -
Possible memory leak? If write is set to something we can't just lose it, we need to clean it up. That doesn't apply if write is statically allocated, but I don't see where that's happening.
