Caching 计算有效访问时间

Caching 计算有效访问时间,caching,memory-management,tlb,Caching,Memory Management,Tlb,这是Silberschatz等人的一段话: 找到感兴趣的页码的次数百分比 TLB称为命中率。例如,80%的命中率, 意味着我们在TLB中找到了80%的所需页码 时间。如果访问内存需要100纳秒,那么 当页码为时,映射内存访问需要100纳秒 TLB。如果我们在TLB中找不到页码,那么我们必须 页表和帧号的首次访问存储器(100 纳秒),然后访问内存中所需的字节(100 纳秒),总共200纳秒。(我们假设 页表查找只需要一次内存访问,但可能需要更多, 正如我们将看到的)为了找到有效的内存访问时间,我

这是Silberschatz等人的一段话:

找到感兴趣的页码的次数百分比 TLB称为命中率。例如,80%的命中率, 意味着我们在TLB中找到了80%的所需页码 时间。如果访问内存需要100纳秒,那么 当页码为时,映射内存访问需要100纳秒 TLB。如果我们在TLB中找不到页码,那么我们必须 页表和帧号的首次访问存储器(100 纳秒),然后访问内存中所需的字节(100 纳秒),总共200纳秒。(我们假设 页表查找只需要一次内存访问,但可能需要更多, 正如我们将看到的)为了找到有效的内存访问时间,我们 按概率计算的情况:有效访问时间=0.80×100+0.20 × 200 =120纳秒

但在同一本书的第8版中

我对这个问题感到困惑

有效访问时间


有人能给我解释一下吗?

这里的有效时间只是使用命中或未命中的相对概率的平均时间。因此,如果命中率为80%,未命中率为20%,那么大量命中/未命中的有效时间(即平均时间)将为0.8*(命中时间)+0.2*(未命中时间)。

有效访问时间是访问内存所花费的总时间(即主内存和缓存访问时间之和)除以内存引用的总数。

在TLB中,将保留存储在内存中的页表中经常访问的页码和帧号的副本

它首先研究TLB。如果找到,它将转到内存位置,因此总访问时间等于:

20 + 100 = 120 ns
20 + 100 + 100 = 220 ns
0.80 * 120 + 0.20* 220 = 140 ns
现在,如果缺少TLB,则需要首先搜索TLB,然后搜索存储在内存中的页表。因此,一次内存访问加上一个特定的页面访问,除了另一次内存访问外,什么都没有。所以总时间等于:

20 + 100 = 120 ns
20 + 100 + 100 = 220 ns
0.80 * 120 + 0.20* 220 = 140 ns
有效内存访问时间等于:

20 + 100 = 120 ns
20 + 100 + 100 = 220 ns
0.80 * 120 + 0.20* 220 = 140 ns

在TLB(TLB hit)中找到页面的情况下,总时间将是TLB中的搜索时间加上访问内存的时间,因此

TLB_hit_time := TLB_search_time + memory_access_time

在TLB中找不到页面的情况下(TLB未命中),总时间是搜索TLB的时间(您没有找到任何内容,但搜索了非TLE),加上访问内存以获取页面表和帧的时间,再加上访问内存以获取数据的时间,所以

TLB_miss_time := TLB_search_time + memory_access_time + memory_access_time
但这是在个别情况下,当您想要知道TLB性能的平均度量值时,您使用有效访问时间,即之前度量值的加权平均值

EAT := TLB_miss_time * (1- hit_ratio) + TLB_hit_time * hit_ratio


平均访问时间为命中时间+未命中率*未命中时间,
不同意@Paul R的答案

吃的一般配方

命中率=a

主存储器访问时间=m

关联查找(TLB访问)=e

EAT=(m+e)a+(2m+e)(1-a)


“有效访问时间”本质上是从内存中获取值所需的(加权)平均时间。如果您发出100个从内存读取值的请求,其中80个请求需要100纳秒,20个请求需要200纳秒(使用第9版速度),因此总时间将为12000纳秒,每次访问的平均时间为120纳秒。单个内存访问不需要120 ns;每个都需要100或200纳秒。(一个普通家庭有2.3个孩子,但任何真正的家庭都有0个、1个、2个或3个孩子——或者是整数个孩子;你看不到多少“十分之三的孩子”四处游荡)。这里的问题是,作者在第九版中试图简化事情,但犯了一个错误。他尝试将TLB的20纳秒访问时间与内存的80纳秒访问时间结合起来,以获得100纳秒的时间。如果是这种情况,则未命中将需要20ns+80ns+80ns=180ns,而不是200ns。这是第九版中的一个打字错误。看起来像是一个评论而不是回答。如果它是一个三级寻呼系统,TLB_命中时间会等于:TLB_搜索时间+3*内存访问时间和TLB_错过时间是TLB_搜索时间+3*(内存访问时间+内存访问时间)并且EAT会是一样的吗?@qwerty是的,EAT会是一样的。在您的示例中,内存访问时间将始终为3*always,因为您始终必须浏览3个级别的页面,因此EAT独立于所使用的分页系统,这对于“未命中惩罚”(未命中时间-命中时间)来说是正确的,但未命中时间是未命中的总时间,因此您不应该在未命中时间的基础上计算命中时间。