为什么ARM有64KB大页?

3
ARM720T用户手册提到了小页面和大页面。由于ARM 720T需要在页表中重复64KB的页表项16次,为什么不使用16个小页面(4KB)条目来模拟64KB的页面条目,而不是一开始就使用大页面呢?

Stackoverflow有许多与此主题相关的标签。例如,[tag:tlb]、[tag:cpu-cache]和[tag:paging]也可能对本问题的读者感兴趣。 - artless noise
1个回答

4
从ARM720 TRM中可以看出,大页由64KB的内存块组成。支持大页是为了允许映射大内存区域,同时只使用单个TLB(MMU页面条目缓存)条目。另外,还可以将附加访问控制机制扩展到16KB子页面。
主要好处在于64K条目只会消耗一个TLB。TLB有64个条目,因此64*4k = 256kB比64*64k=4MB; 内存量不需要进行页面表查找就可以得到显着提高。
有许多缺点。例如,可移植操作系统(以及其API)可能需要更小的页面。如果所有条目都是64k,可能会导致碎片化。章节条目甚至更好,每个条目代表1MB的块,64MB适合于TLB。通常,章节将对虚拟==物理映射起作用。
如果您知道系统仅具有4MB的可用内存,则64k页条目可以导致更可靠的性能。即使有更大的内存大小,中断代码和数据也可以使用64k条目,并带有TLB锁定,以避免页面表行走。这可以导致更好的IRQ延迟。 TLB是有限的资源,因此,为中断处理程序使用4k条目可能会导致浪费TLB。使用部分条目可能会浪费内存,因为大多数中断代码小于1MB。
即使没有锁定,经常使用的64k条目更有可能保留在TLB中。具有每个任务/进程内存的操作系统可能需要更改MMU表,这可能导致TLB和高速缓存刷新和无效化。为了简化上下文切换,可能会无效和刷新所有内容。因此,在中断上进行表漫游可能比您想象的更为普遍。这是使用MMU“PID”功能并仅刷新/无效较小内存区域并允许内核代码/数据保留在系统缓存中的动机。像调度程序这样的其他代码也将受益于由64k条目映射。注意:ARM720T可能具有锁定/不锁定,但某些ARM CPU具有锁定功能,并且CPU系列之间的MMU条目非常相似。本答案适用于许多不同系列的ARM CPU。

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