【问题标题】:Finding minimum page size to allow TLB access to overlap with tag fetch [duplicate]寻找最小页面大小以允许 TLB 访问与标签获取重叠
【发布时间】:2018-10-12 01:29:07
【问题描述】:

家庭作业问题,所以请把我推到正确的方向。

考虑一个具有物理寻址缓存的系统,并假设使用 40 位虚拟地址和 32 位物理地址,并且内存是字节可寻址的。进一步假设缓存是 4-way set-associative,缓存行大小为 64 Bytes,缓存总大小为 64 KBytes。

在这个系统中,允许 TLB 访问和缓存访问重叠的最小页面大小应该是多少?

我一直被这个问题所困扰,甚至不知道如何开始。有人可以给我一个寻找解决方案的提示吗?

【问题讨论】:

  • 这是您必须做的: 1- 计算缓存中的集合数。 2-将物理地址划分为高速缓存行偏移字段、高速缓存集索引字段和高速缓存行标记字段。 3-对虚拟地址执行相同的操作。 4- 确定最小页面大小,使得缓存集索引不需要虚拟到物理的转换(因为位的值将保持不变),这将启用并行访问。

标签: cpu-architecture virtual-memory cpu-cache


【解决方案1】:

我认为问题中最重要的信息是

TLB 访问和缓存访问的重叠

这意味着,我们在访问 TLB 的同时访问 Cache。在实践中,我们真正要做的是,我们使用来自虚拟地址的索引位对缓存进行索引,当我们在缓存中找到条目时,我们将获得来自 TLB 的数据(物理地址)。然后我们可以与物理地址进行标签比较。换句话说,缓存充当虚拟索引、物理标记 (VIPT) 缓存。

尽管该方案听起来很有效,但需要注意的是,用于索引缓存的位数不能高于表示页面大小所需的位数。简单来说,一个页面的大小可以对缓存条目的数量设置一个上限。

现在回到你的问题,

它是一个 64KBytes 的缓存,带有 4 路设置组合。和 64Bytes 的缓存线。

Number of cachelines = (64KBytes/4)/64Bytes = 2^8 cachelines

这意味着如果一个页面是 256Bytes 或更大,我们可以使用这种机制。如果一个页面小于 256 字节,那么我们不能假设虚拟地址和物理地址的索引位将相同。

这个系统中允许的最小页面大小应该是多少? TLB访问和缓存访问重叠?

256Bytes

【讨论】:

  • VIPT 缓存通常不要求所有索引位都来自页面偏移量以下。仅当您希望它与 PIPT 缓存一样缺少同音词/同义词别名时,才需要该要求,这就是问题所指定的(物理寻址缓存)。 VIPT 仅作为 PIPT 的一种速度技巧,一般来说是 VIPT 的一个特例。您还可以使用页面着色来解决别名问题:Virtually indexed physically tagged cache Synonym
  • @PeterCordes 谢谢你,不知道。如果我理解正确,在 4K 页面场景(12 位)中,如果我想要 13 位缓存索引,我仍然可以使用 VIPT,前提是操作系统确保 PA 的第 13 位 = VA 的第 13 位
  • 是的,否则操作系统必须在页表更改时刷新缓存。 IDK 如果您真的将带有页面着色的 VIPT 称为物理地址缓存,尽管通过软件合作,它会以这种方式运行并避免任何额外的刷新。一些早期的 CPU 使用 VIVT 缓存,或者(甚至更简单的)直接映射虚拟缓存,其中操作系统只需要在上下文切换或更改页表时刷新缓存。但随着缓存变得更大、更有价值,即使对于 L1d 来说,这也不是一个有吸引力的选择。
  • @PeterCordes 但这个答案是不正确的。对于 256 字节的页面,一些(事实上,大部分)索引位需要转换才能访问 PIPT 缓存。
  • @HadiBrais:很好,我没有检查其余答案中的数学或推理。我只是在评论第一段(它确实解释了正确的概念,所有索引位都来自页面偏移量下方并免费翻译。)
猜你喜欢
  • 1970-01-01
  • 2021-03-13
  • 2019-10-25
  • 1970-01-01
  • 2022-10-12
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 2011-01-23
相关资源
最近更新 更多