I am observing the last few Intel microarchitectures (Nehalem/SB/IB and Haswell). I am trying to work out what happens (at a fairly simplified level) when a data request is made. So far I have this rough idea:
- Execution engine makes data request
- "Memory control" queries the L1 DTLB
- If the above misses, the L2 TLB is now queried
At this point two things can happen, a miss or a hit:
If its a hit the CPU tries L1D/L2/L3 caches, page table and then main memory/hard disk in that order?
If its a miss- the CPU requests the (integrated memory controller?) to request checking the page table held in RAM (did I get the role of the IMC correct there?).
If somebody could edit/provide a set of bullet points which provide a basic "overview" of what the CPU does from the execution engine data request, including the
- L1 DTLB (data TLB)
- L2 TLB (data + instruction TLB)
- L1D Cache (data cache)
- L2 cache (data + instruction cache)
- L3 cache (data + instruction cache)
- The part of the CPU which controls access to main memory
- Page table
it would be most appreciated. I did find some useful images:
- http://www.realworldtech.com/wp-content/uploads/2012/10/haswell-41.png
- http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Intel_Core2_arch.svg/1052px-Intel_Core2_arch.svg.png
but they didn't really separate the interaction between the TLBs and the caches.
UPDATE: Have changed the above as I think I now understand. The TLB just gets the physical address from the virtual one. If there's a miss- we're in trouble and need to check page table. If there's a hit we just proceed down through the memory hierarchy starting with the L1D cache.