计算有效访问时间

21

以下是来自 Silberschatz 等人的 《操作系统概念》第9版 中的一个段落:

在 TLB 中找到所需页号的百分比称为命中率。例如,80% 的命中率意味着我们在 TLB 中 80% 的时间内找到所需的页号。如果访问内存需要 100 纳秒,那么当页号在 TLB 中时,映射内存访问需要 100 纳秒。如果我们在 TLB 中未能找到页号,则必须首先访问页面表和帧号(100 纳秒),然后访问内存中所需的字节(100 纳秒),总共需要 200 纳秒的时间。(我们假设页面表查找只需要一次内存访问,但实际上可能需要更多,如我们将看到的那样。)为了找到有效的内存访问时间,我们按其概率加权:有效访问时间 = 0.80 × 100 + 0.20 × 200 = 120 纳秒

但在同一本书的第8版中 enter image description here

我对

有效访问时间

感到困惑,有人能为我解释一下吗?


2
“有效访问时间”本质上是从内存中获取值所需的(加权)平均时间。如果您发出100个读取内存值的请求,其中80个请求将花费100纳秒,另外20个请求将花费200纳秒(使用第9版速度),因此总时间将为12,000纳秒,平均每次访问需要120纳秒。没有单个内存访问将花费120纳秒;每个访问将花费100或200纳秒。(一个平均家庭有2.3个孩子,但任何真实的家庭都有0、1、2或3个孩子——或整数个孩子;你不会看到很多“三分之一的孩子”四处游荡)。 - Jonathan Leffler
3
问题在于作者试图在第9版中简化事物并犯了一个错误。他试图将TLB的20ns访问时间与内存的80ns时间结合起来,以形成一个漂亮的100ns时间。如果是这样,那么一次缺失将需要20ns + 80ns + 80ns = 180ns,而不是200ns。这是第9版中的一个打字错误。 - kainaw
6个回答

33
在TLB中找到页面的情况下(TLB命中),总时间将是在TLB中搜索的时间加上访问内存的时间,因此:
TLB_hit_time := TLB_search_time + memory_access_time

如果在TLB中找不到页面(TLB miss),总时间将包括查找TLB的时间(虽然没有找到,但仍需搜索),访问内存以获取页面表和帧的时间,以及访问内存以获取数据的时间,因此

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
或者
EAT := (TLB_search_time + 2*memory_access_time) * (1- hit_ratio) +
       (TLB_search_time + memory_access_time) * hit_ratio

如果它是一个三级分页系统,那么TLB_hit_time是否等于:TLB_search_time + 3 * memory_access_time,而TLB_miss_time则为TLB_search_time + 3 *(memory_access_time + memory_access_time),并且EAT将保持不变? - qwerty
@qwerty 是的,EAT 是一样的。在你的例子中,memory_access_time 总是会是 3 倍,因为你总是要经过三级页面,所以 EAT 不受分页系统的影响。 - Santiago

8

这里的有效时间仅是使用命中或未命中的相对概率的平均时间。因此,如果命中发生80%的时间,未命中发生20%的时间,则在大量的命中/未命中情况下,有效时间(即平均时间)将为0.8 *(命中时间)+ 0.2 *(未命中时间)。


8

EAT的通用公式

命中率 = a

主存取时间 = m

联想查找(TLB访问)= e

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


(EAT:平均访问时间;TLB:翻译后备缓存)
    = 2m - ma + e

4
在TLB中维护了一个经常访问的页码和帧号的副本,该副本来自存储在内存中的页表。
它首先查找TLB。如果找到,则会进入内存位置,因此总访问时间等于:
20 + 100 = 120 ns

如果TLB缺失,那么你需要先搜索TLB,然后再搜索存储在内存中的页表。因此需要进行一次内存访问加上一次特定页面访问,也就是另外一次内存访问。所以总时间等于:

20 + 100 + 100 = 220 ns

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

-2

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


3
看起来像是一条评论而不是答案。 - sqluser

-4

平均访问时间是命中时间加上未命中率乘以未命中时间,与@Paul R的答案不一致。


1
这对于“缺失惩罚”(缺失时间-命中时间)是正确的,但缺失时间是缺失的总时间,因此您不应该在其上计算命中时间以获取缺失次数。 - Peter Cordes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接