问题标签 [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.
caching - 物理或虚拟寻址在处理器 x86/x86_64 中用于在 L1、L2 和 L3 中进行缓存?
处理器 x86/x86_64 中使用哪种寻址来缓存 L1、L2 和 L3(LLC) - 物理或虚拟(使用 PT/PTE 和TLB ), PAT(页面属性表)会以某种方式影响它?
在这种情况下,驱动程序(内核空间)和应用程序(用户空间)之间有区别吗?
简短的回答 - 英特尔使用虚拟索引、物理标记(VIPT) L1 缓存:在一个具有 HT 的核心上执行线程之间的数据交换将使用什么?
- L1 -虚拟寻址(在
8-way
缓存中定义Set
需要低12 bits
,这在 virt & phys 中是相同的) - L2 -物理寻址(需要访问 TLB 以获得 Virt-2-Phys)
- L3 -物理寻址(需要访问 TLB 以获得 Virt-2-Phys)
c - 如何在代码片段中查找 TLB 未命中数?
假设页面大小为 1KB,我如何计算代码中的 TLB 未命中数,如下面的代码片段:
我有兴趣了解能够计算几乎每个给定代码片段中的 TLB 未命中数的一般规则,除了知道此代码片段的#TLB 未命中数。
caching - 使用 TLB 设计虚拟内存
我遇到了以下问题,我不确定如何解决它:
考虑具有以下属性的虚拟内存系统:
· 35位虚拟地址
· 16 KB 页面
· 32位物理地址
假设这个虚拟内存系统是用一个八路组相联TLB实现的。TLB 共有 256 个 TLB 条目,每个 TLB 条目代表一个虚拟到物理页号的转换。
一个 64 KB 的数据高速缓存是一个双向组关联高速缓存。数据缓存的块大小为 128 字节。
使用类似于下图的方式绘制的图形显示虚拟到物理的映射(但需要对 TLB 和此问题中指定的数据缓存进行所有必要的更改)。
为每个内存地址指定进出 TLB 和数据高速缓存的所有字段和信号的宽度(以及比较次数)。
我对如何计算一些参数有一个想法,但除此之外,我迷路了。
例如,由于虚拟地址是 35 位宽,我知道我有 2^35 个可能的虚拟地址。
由于我有 16KB 页面 (16*1KB = 2^4 * 2^10 = 2^14KB),我知道我必须有 (3^35)/(2^14) = 2^21 个页表条目。
最后,我知道我的缓存大小是 64 * 1KB = 2^16 字节的缓存。
但是在这些步骤之后我迷路了。任何帮助,将不胜感激。
caching - 我可以转储/修改 x86 CPU 缓存/TLB 的内容吗
任何应用程序或系统内核都可以访问甚至修改 CPU cahce 和/或 TLB 的内容吗?
我从这个网站找到了关于 CPU 缓存的简短描述:
“没有一种编程语言可以直接访问 CPU 缓存。读取和写入缓存是由硬件自动完成的;没有办法编写将缓存视为任何类型的单独实体的指令。对缓存的读取和写入是边发生的- 对所有触及记忆的指令有效。”
从这条消息来看,似乎没有办法读取/写入 CPU cahce/TLB 的内容。
但是,我还得到了另一个与上述信息相冲突的信息。该信息意味着调试工具可能能够转储/显示 CPU 缓存的内容。
目前我很困惑。所以请帮助我。
caching - 非数据缓存未命中(指令、TLB 等)的迹象是什么?
当您调试性能关键代码并查看反汇编时,不难发现由于数据缓存未命中而导致的瓶颈:
加载/存储指令往往是常见的瓶颈,这意味着如果您停止程序,它很可能会在从某个不可预测的内存地址加载加载/存储指令时停止。
类似地,查找分支错误预测的一种方法是查看中断程序是否通常会在特定跳转附近停止它,然后查看代码以查看跳转是否可预测。
(或者,至少,这就是我试图找到这些瓶颈的方式。如果我正在寻找错误的症状,请告诉我......)
然而,其他类型的缓存未命中的症状是什么?
我确实知道它们很少见,但我仍然想知道如果/当它们出现时如何发现它们。
通过“其他”缓存,我的意思是:
- 指令缓存
- 翻译后备缓冲区
- 我应该知道但我不知道的其他重要缓存的奖励积分
c - 在代码片段的数组中为 TLB 未命中找到适当的步幅
假设系统有一个 32 条目的 TLB,页面大小为 8KB。为了在几乎每次访问数组“数据”时实现 TLB 未命中,应该将 MAX 和 stride 设置为什么?
这是一个练习期末考试,有答案,但我不明白。最终答案是:stride=2k MAX=33*stride
非常感谢任何能帮助我弄清楚如何在此类问题中找到 TLB 未命中数的完整答案。
memory-management - 分页和 TLB 操作系统
对于我的操作系统课程,我真的坚持这个问题,但我不希望有人给我答案,而是如果有人能告诉我如何解决它。
示例问题:
本系统使用简单的分页和TLB
每次内存访问需要 80ns
TLB访问需要10ns
TLB命中率为80%。
由于 TLB,计算出实际的加速?
注意:我更改了访问所需的内存,而 TLB 访问需要部分问题,因为正如我所说,我不想要答案,只是一种解决方法。
c++ - 当进程内存大小更大时,更多的 TLB 未命中?
我有我用 C++ 编写的程序。在 linux 上,进程被分配了一定数量的内存。一部分是堆栈,一部分是堆,一部分是文本,一部分是 BSS。
以下是否属实:
分配给我的进程的堆组件的内存量越大 - 翻译后备缓冲区未命中的机会增加?
一般而言 - 我的应用程序进程消耗的内存越多,TLB 未命中的机会就越大?
x86 - TLB 刷新和页面全局位
在 Intel 页表结构中,有一个“page global”位,表示页表条目是全局使用的。据我了解,在覆盖CR3导致TLB刷新期间,不会刷新此全局条目。我的问题是,我们是否可以假设全局 PTE 条目一旦设置就永远不会从 TLB 中刷新?
arm - 为什么uboot一开始就使TLB、icache、BP阵列失效
在arm平台上,u-boot一开始会导致TLB、icache、BP阵列失效,这是什么原因呢?有必要吗?