问题标签 [tlb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
memory-management - 如果还没有在 RAM 中,我们如何知道包含指令的内存页的物理地址?
由于鸡和蛋的类比,我对如何执行流程指令感到有些困惑。
程序的 CPU 指令保存在硬盘上。当程序开始执行时,包含指令的内存页需要进入 RAM、L3、L2、L1i。但是,当我们在TLB查找后才能找到物理地址时,如何知道物理地址并将其加载到RAM中,这意味着指令必须已经在L1i缓存中?
x86 - L1 缓冲区处理
L1 指令高速缓存包含......指令。对于什么类型的指令,CPU 会从 icache 中获取指令,然后需要使用 L1 指令转换后备缓冲区 (iTLB) 查找虚拟地址?我可以看到为什么会提取一条指令,然后使用 L1 数据 TLB 来查找虚拟地址,但我不明白为什么要使用 iTLB?什么类型的 x86 指令会导致这种情况?
caching - 缓存行是否刷新访问 TLB?
假设我们故意破坏了 DTLB,并希望继续使用clflush
与 TLB 条目指向的地址不相交的内存区域从 L1-3 刷新特定的缓存行;这实际上会将我们正在刷新的高速缓存行的页面基地址带回 TLB 吗?
简而言之,是否clflush
触及 TLB?我假设由于这条指令尊重一致性,它随后会将该行写回内存(显然需要 TLB 查找。)
memory - 关于 TLB 和数据缓存
我知道 cpu 如何在 TLB 和缓存的帮助下访问数据。但是我很困惑,数据缓存和 TLB 是否共享相同的 CPU 缓存或 MMU 硬件是否具有用于 TLB 的单独缓存。当上下文切换发生时,谁来刷新 TLB 和数据缓存的内容?
windows - 上下文切换的不明显成本
我试图向某人解释为什么每个消息使用一个线程的模型由于上下文切换的开销而停止以高消息速率扩展。我告诉他们,上下文切换的成本不仅仅是调度程序的开销和保存/恢复所有寄存器的开销。在上下文切换期间,TLB 可能会或可能不会在 Intel X64 CPU 上完全/部分刷新。这取决于芯片的版本以及操作系统是否利用新的 TLB 标签。有谁知道windows是否支持这个?我还想到分支预测器表(我假设在 Intel X64 上有一个)也可能被刷新。有人知道吗?我还缺少什么?
如果上下文切换到同一进程中的另一个线程,则不会刷新 TLB。我猜分支预测器表也不需要刷新。这是正确的吗?
tlb - 跨进程维护 TLB 条目
Translation Lookaside Buffer 是系统中所有内核用于高效虚拟地址到物理地址转换的资源。在多核/多处理器架构中,有可能需要对同时映射到两个不同物理页帧的相同虚拟页地址(在不同进程中)进行 TLB 查找。TLB 中如何处理这种冲突?
Ulrich Drepper 的文章http://www.akkadia.org/drepper/cpumemory.pdf确实谈到了扩展的 TLB 标记(它仍然受到用于标记的位数的限制)。较新的 CPU 如何处理此问题?任何相关文章的参考或链接都会非常有帮助。
caching - 计算有效地址转换时间
有谁知道计算有效地址翻译时间的公式?
例如,如何解决以下问题:
给出如下信息:
TLB 可以容纳 1024 个条目,并且可以在 1 个时钟周期(1 纳秒)内访问。
一个页表条目可以在 100 个时钟周期或 100 纳秒内找到。
平均页面替换时间为 6 毫秒。
如果页面引用在 99% 的时间由 TLB 处理,并且只有 0.01% 导致页面错误,那么有效的地址转换时间是多少?
那么它是 1 nsec + (0.01% x 100 nsec) 吗?
operating-system - 无效页表条目是什么意思?
来自维基百科:
页表查找失败可能有两个原因。第一个是如果虚拟地址没有可用的转换,这意味着虚拟地址无效。
此外,如果每个进程都有自己的页表,这意味着页表中的条目都会有一些从虚拟地址到物理地址的转换。那么页表条目无效是什么意思呢?如果条目存在,则表示翻译存在,因为条目不过是从虚拟地址到物理地址的映射。
assembly - 在 Microblaze 上启动时访问 MMU/TLB
我正在寻求在 Microblaze 上设置 TLB(实际上是在 OVP 上模拟),并已C_USE_MMU
设置为3
.
这是我的启动代码:
下面的行更新r1
为0x00040000
您所期望的:
但在下一行:
的值msr
保持不变,因此代码继续失败:
和:
(由于msr
尚未更新,它仍然读取0x00000000
,因此处理器在评估没有可用的 MMU 支持时是正确的)。
为什么我的代码不会更新msr
?
arm - 什么是 PDE 缓存?
我有以下基于 ARM 的 SoC 的规格:
- L1 数据缓存 = 32 KB,64 B/行,2-WAY,LRU
- L2 缓存 = 1 MB,64 B/行,16 路
- L1 数据 TLB(用于加载):32 个条目,完全关联
- L2 数据 TLB:512 个条目,4 路
- PDE 缓存:16 个条目(每 1 MB 虚拟空间一个条目)
我想知道 PDE 缓存是什么?我想这类似于 TLB,但我不确定。
回答
PDE(Page Directory Entry)似乎是中间表遍历缓存,确实可以与TLB分开实现。
Cortex-A15 MPCore 处理器实现了专用缓存,将中间级别的转换表条目存储为表遍历的一部分。