为什么 ARM 有 64KB 大页面?

Why does ARM have 64KB Large Pages?

ARM720T 用户手册提到了小页面和大页面。由于 ARM 720T 要求 64KB 页面 table 条目在页面 table 中重复 16 次,为什么不放置 16 个小页面(4KB)条目来模拟 64KB 页面条目而不是使用大页面第一名?

来自 ARM720 TRM,

Large Pages consist of 64KB blocks of memory. Large Pages are supported to allow mapping of a large region of memory while using only a single entry in the TLB). Additional access control mechanisms are extended to 16KB Sub-Pages.

主要好处是一个 64k 条目将只消耗一个 TLB(MMU 页面条目缓存)。 TLB 有 64 个条目,所以 64*4k = 256kB 对比 64*64k = 4MB;显着增加不需要页面 table 查找地址的内存量。

缺点很多。例如,portable OS(它是 API)可能需要较小的页面。如果所有条目都是 64k,则会导致碎片。部分条目甚至更好,每个条目代表一个 1MB 的块,在 TLB 中适合 64MB。通常,该部分对于 virtual==physical 映射会更好。

如果您知道您的系统只有 4MB 的可用内存,那么 64k 页面条目可以带来更可靠的性能。即使具有更大的内存大小,中断代码和数据也可以使用 64k 条目和 TLB 锁定 note 以避免页面 table 遍历。这可以导致更好的 IRQ 延迟。 TLB 是一种有限的资源,因此为中断处理程序使用 4k 条目可能会导致 TLB 的浪费。使用节条目可能会浪费内存,因为大多数中断代码小于 1MB。

即使没有锁定,经常使用的 64k 条目也更有可能保留在 TLB 中。每个 task/process 内存的 OS 可能需要更改 MMU tables,这可能导致 TLB 和缓存刷新和失效。为了简化上下文切换,所有内容都可能无效并刷新。因此 table 遍历中断可能比您想象的更常见。这是使用 MMU 'PID' 功能和仅 flush/invalidate 较小内存区域并允许内核 code/data 保留在系统缓存中的动机。其他代码(如调度程序)也将受益于 64k 条目的映射。

注意: ARM720T may/may 没有锁定,但一些 ARM CPU 有并且 MMU 条目在 [=37] 之间非常相似=] 家庭。这个答案适用于许多不同的 ARM 系列 CPUs.