标签: mmu

mprotect 有多快

我的问题是有多快mprotect。保护 1 MB 连续内存与 1 GB 连续内存相比有何区别?我当然可以测量时间,但我想知道幕后情况。

c linux mmap mmu

5
推荐指数
1
解决办法
1488
查看次数

Linux如何在x86-64中支持超过512GB的虚拟地址范围?

Linux的x86-64用户虚拟地址空间为47位.这实际上意味着Linux可以映射具有大约~128 TB虚拟地址范围的进程.

然而,让我感到困惑的是x86-64架构支持每个进程的ISA定义的4级分层页表(排列为基数树).页表的根目录最多只能映射512 GB的连续虚拟地址空间.那么Linux如何支持512GB以上的虚拟地址范围呢?它是否为每个进程使用多个页表?如果是,那么对于一个进程,CR3(x86-64的寄存器包含页表基址的地址)应包含哪个给定进程?我错过了什么吗?

linux x86-64 linux-kernel mmu

5
推荐指数
1
解决办法
903
查看次数

使用PLD指令

我对ARM cortex A8中PLD指令的使用有一些疑问.因为我在循环中使用指令,所以存在超出内存访问的可能性.我怀疑的是,这是否会导致分段错误.我在ARM手册中读到了这一点

由于PLD指令被所有级别的高速缓存处理为任何其他加载指令,因此PLD指令遵循标准数据依赖性规则和逐出过程.在PLD执行的任何阶段,在地址转换故障,高速缓存命中或中止的情况下,PLD指令被忽略.

因此,如果进行了超出范围的内存访问,则忽略相应的PLD指令或不是我的疑问.

arm cortex-a8 cpu-cache mmu

5
推荐指数
1
解决办法
830
查看次数

MMU和内存控制器的区别

内存控制器的作用是什么,它们与处理器内部的 MMU 有何不同?MMU 的工作是将虚拟地址转换为物理地址(除其他外)并将此物理地址发送到向 DRAM 发送特定信号并将结果返回给 MMU 的内存控制器?或者是 MMU 的内存控制器的一部分?

architecture memory hardware memory-management mmu

5
推荐指数
1
解决办法
2496
查看次数

超线程内核是否共享MMU和TLB?

据我所知,英特尔x86_64的超线程内核中没有共享MMU和TLB。

但是,如果两个不共享地址空间的线程被调度到同一物理核心,它们如何运行?

我认为,在那种情况下,线程没有任何机会达到TLB,因为线程具有自己的地址空间。

如果那样的话,我认为这种表现将被降级。

x86 cpu-architecture hyperthreading tlb mmu

5
推荐指数
1
解决办法
342
查看次数

如果 MMU 已经有页表了,为什么操作系统还需要页表呢?

我对虚拟内存管理的操作系统和 MMU 之间的界限在哪里感到困惑。

如果MMU负责将虚拟地址转换为物理地址并且有内部页表,那么为什么操作系统也需要有页表呢?

operating-system mmu

5
推荐指数
1
解决办法
1574
查看次数

AMD:TLB 未命中周期的性能计数器

我正在寻找 AMD 特定的性能计数器,它可以在TLB发生未命中时对页面遍历所消耗的周期进行计数。我知道英特尔有这样的指标。

但是AMD上存在这种情况吗?我查看了http://developer.amd.com/wordpress/media/2013/12/56255_OSRR-1.pdf,但没有找到任何接近我需要的内容。

我还查看了perf源代码https://elixir.bootlin.com/linux/latest/source/arch/x86/events/amd/core.c#L248它似乎也没有。

也许它有不同的名字?有什么建议么?

performance tlb mmu perf amd-processor

5
推荐指数
1
解决办法
944
查看次数

什么是 PDE 缓存?

我有以下基于 ARM 的 SoC 规格:

  • L1 数据缓存 = 32 KB, 64 B/line, 2-WAY, LRU
  • L2 缓存 = 1 MB,64 B/线,16 路
  • L1 数据 TLB(用于加载):32 个条目,完全关联
  • L2 数据 TLB:512 个条目,4 路
  • PDE 缓存:16 个条目(每 1 MB 虚拟空间一个条目)

我想知道什么是 PDE 缓存?我想它类似于 TLB,但我不确定。

回答
似乎 PDE(页面目录条目)是中间表遍历缓存,它确实可以与 TLB 分开实现。

Cortex-A15 MPCore 处理器实现了专用缓存,将中间级别的转换表条目存储为表遍历的一部分。

arm computer-architecture tlb cpu-cache mmu

4
推荐指数
3
解决办法
1330
查看次数

访问内存时,是否会在缓存命中情况下设置页表访问/脏位?

据我所知,CPU的一次内存访问涉及到CPU缓存和MMU。CPU 将尝试在缓存中找到它的目标,如果发生缓存未命中,CPU 将转向 MMU。在 MMU 访问期间,对应页表项的访问/脏位将由硬件设置。

然而,据我所知,除非出现缓存未命中,否则大多数 CPU 设计都不会触发 MMU,这里我的问题是,是否仍会在缓存命中时设置页表条目的访问/脏位?还是跟架构有关?

cpu-architecture cpu-cache mmu page-tables

4
推荐指数
2
解决办法
2748
查看次数

如何理解图中的ARMv8 AArch64 MMU表描述符格式?

下图摘自ARMv8-A程序员指南:

Armv8-A 程序员指南

我对突出显示的条目类型有点困惑。先说一下我目前的理解(假设EL3中的阶段1翻译,粒度为4KB的场景)。

首先,“条目”和“描述符”这个名称在这种情况下似乎是可以互换的。

然后,根据ARM ARM文档(例如图D5-6),似乎有3种类型的有效描述符:

  • D_Table描述符,是指向下一级翻译表的表项。达到这种类型的描述符意味着翻译过程尚未完成。
  • D_Block 描述符,它是指向大于颗粒大小(“页面”)的内存“区域”的条目。这是翻译行走完成的两种情况之一。
  • D_Page描述符,指向粒度大小的内存“页”。这是翻译行走完成的第二种情况。

还有几个约束(有效描述符),即:

  • L0表只能包含D_Table描述符,不能包含其他两种类型(D_Block、D_Page)。
  • L3 只能包含 D_Page 描述符。
  • D_Block只能出现在L1/L2转换表中。

那么回到上图,我不明白为什么还有另一个表条目用于L1和L2?因为图中的第一行已经描述了 L0/L1/L2 的表描述符。那么,即使这是另一种表描述符类型,为什么中间内容被标记为“输出块地址”(而不是“下一级表地址”)呢?

mmu armv8

4
推荐指数
1
解决办法
2038
查看次数