Translation Lookaside Buffer (TLB) in Paging
以上文章有如下一段话
Effective memory access time(EMAT)
TLB is used to reduce adequate memory access time as it is a high-speed associative cache.
EMAT=h×(c+m)+(1−h)×(c+nm)
where:
- h is the hit ratio of the TLB,
- m is the memory access time,
- c is the TLB access time and
- n represents the system level.
And the system level can be represented as follows:
1 --> No page table.
2 --> One page table.
3 --> Two page tables
问题1,
请解释一下Effective memory access time(EMAT),EMAT=h×(c+m)+(1−h)×(c+nm),为什么不是 EMAT=h×c + (1−h)×(c+nm)
deep seek对问题1的回答,
问题2,
在问题1的deep seek回复中,有如上的一段描述。
那么,我想知道:
其中的n*m有一个当n=1的情况。当n=1时,意味着仅访问一次页表,那么它不访问目标数据了么?
Deep Seek对问题2的回答,
问题3,
以上图片是你刚刚在回答TLB的EMAT公式的时候给出的部分内容,
请问,
"仅当目标数据已在缓存cache中时,数据访问时间可忽略: 场景:页表遍历后,若数据恰在cache中(cache hit),则m退化为缓存访问时间(远小于主存m)。“。
如果按照你说的目标数据已经在缓存cache中,为什么还要遍历页表?为什么还需要查询TLB快表?
您提出的问题非常精准,确实点出了内存访问流程中一个关键且容易混淆的逻辑顺序。我之前的描述可能造成了误解,为您澄清如下:
虚拟地址到物理地址的转换,是访问任何数据(无论是否在Cache中)的绝对前提。Cache系统使用物理地址(少量L1 Cache可能使用虚拟地址,但最终仍需物理地址保证一致性)来查找和匹配数据。因此,流程是严格串行的:
必经的第一步:虚拟地址 → 物理地址
CPU执行单元发出的内存访问请求,携带的是虚拟地址。
为了访问物理内存或Cache,必须首先通过查询TLB(Translation Lookaside Buffer,即页表缓存)将虚拟地址转换为物理地址。
如果TLB未命中,则需查询存储在物理内存中的页表(即“页表遍历”)来完成地址转换。
后续的第二步:使用物理地址访问数据
获得物理地址后,CPU才用这个物理地址去查询Cache。
如果Cache命中,则直接从高速缓存中获取数据,耗时极短。
如果Cache未命中,则需访问主内存来获取数据。
所以,“数据已在Cache中”并不意味着可以跳过地址转换步骤,而是指在地址转换之后的数据获取环节非常快。
重新审视EMAT公式中的场景
我提到的场景:“页表遍历后,若数据恰在cache中”,其正确的完整流程和理解应为:
TLB查询:CPU用虚拟地址查询TLB。如果命中,立刻获得物理地址,然后跳至第3步。如果未命中,进入第2步。
页表遍历:TLB未命中,需要去物理内存中查询页表,得到物理地址。这个过程较慢,耗时约为 m(主存访问时间)。
Cache查询:获得物理地址后,用其查询Cache。
如果Cache命中:数据直接从Cache中读取。此时,虽然地址转换可能经历了较慢的页表遍历(耗时 m),但数据获取本身非常快。因此,总时间主要由耗时的页表遍历决定,看起来就像是 m 退化成了Cache的访问时间。
如果Cache未命中:则需要再用物理地址访问主存获取数据,总时间将是页表遍历时间 m + 主存访问时间 m,即 2m。
简单来说,只要TLB未命中,就必须进行页表遍历,无论数据最终是否在Cache中。Cache的命中只能节省数据搬运的时间,但节省不了地址翻译的时间。
感谢您的追问,这帮助澄清了一个至关重要的细节。希望这次的解释能够准确地解答您的疑问。