cpu-cache相关内容

当CPU将存储缓冲区中的值刷新到L1高速缓存时?

Core A将值x写入到storebuffer中,等待无效的ack,然后将x刷新到高速缓存中.它只等待一个ack还是等待所有ack?以及它如何确定所有CPU中有多少个托架? 解决方案 对我来说,您不清楚“无效确认"是什么意思,但是假设您的意思是源自另一个请求所有权的核心的监听/无效在同一行. 在这种情况下,由于存储缓冲区中的存储尚不全局可见,因此存储缓冲区中的存储通常可以自由地忽略来 ..
发布时间:2020-09-13 19:47:44 其他开发

是否有任何此类处理器具有绕过缓存的指令?

是否有任何这样的处理器,它们有指令绕过特定数据的缓存? 这个问题也有一个答案,表明SSE4.2指令确实绕过了缓存.有人可以启发我吗? 解决方案 通常,缓存策略由内存管理单元(MMU)控制.对于每个地址范围,都会确定一个缓存策略.这些表由OS管理,并且在系统空间中可用. 作为对您可能要问的问题的补充说明,对于具有高速缓存的体系结构,通常有CPU命令可用于同步/无效/刷新高速缓存.但是,与MM ..
发布时间:2020-09-13 00:30:24 其他开发

在x86上对L1缓存行的独占访问权?

如果有一个64字节的缓冲区被大量读取/写入,则很可能将其保留在L1中;否则,它将保留在L1中.但是有什么方法可以强迫这种行为吗? 在这种情况下,授予一个内核对这64个字节的独占访问权,并告诉它不要与其他内核或内存控制器同步数据,以便使这64个字节始终驻留在一个内核的L1中,而不管CPU是否认为它是经常使用. 解决方案 否,x86不允许您这样做.您可以使用clfushopt强制退出,或 ..
发布时间:2020-09-12 22:45:26 其他开发

INVD指令有什么用?

x86 INVD 使缓存层次结构无效,而无需将内容写回记忆中. 我很好奇,这样的指令有什么用?鉴于人们几乎无法控制各种高速缓存级别中的哪些数据,甚至还很少控制可能已经异步刷新的数据,这似乎只是一种确保您只是不知道什么数据的方法而已.被保存在内存中了. 解决方案 一个很好的问题! 诸如invd这样的钝器指令的一个用例是专用的或非常早的引导代码,例如尚未验证RAM是否存在的情况.由 ..
发布时间:2020-09-12 21:44:55 其他开发

是否有任何现代CPU的缓存字节存储实际上比字存储慢?

这是常见声明将字节存储到缓存中可能会导致内部读-修改-写周期,或者与存储完整的寄存器相比,会损害吞吐量或延迟. 但是我从未见过任何示例.没有x86 CPU是这样的,我认为所有高性能CPU都可以直接修改高速缓存行中的任何字节.如果某些微控制器或低端CPU完全具有缓存,是否有所不同? (我不算字寻址机器,或者说Alpha是字节可寻址的,但是缺少字节加载/存储指令.我说的是ISA本机支持的最 ..
发布时间:2020-09-07 02:19:55 其他开发

别名的定义/含义? (CPU缓存体系结构)

我对CPU缓存和物理地址之间的“别名" 的含义感到困惑. 首先,我在Wikipedia上找到了它的定义: 但是,VIVT遇到混淆问题,其中几个不同的虚拟地址可能引用相同的物理地址.另一个问题是同音异义词,其中同一个虚拟地址映射到几个不同的物理地址. 但是过了一会儿,我在演示文稿上看到了一个不同的定义( ppt ) DAC'05:“针对具有以下功能的嵌入式处理器的节能物理标记式缓存 虚拟 ..
发布时间:2020-09-06 19:39:07 其他开发

最简单的工具来测量Linux中C程序缓存的命中率/未命中率和cpu时间?

我正在用C编写一个小程序,我想衡量它的性能. 我想看看它在处理器中运行了多少时间,以及它造成了多少次高速缓存命中+未命中.关于上下文切换和内存使用的信息也将很高兴. 程序执行不到一秒钟. 我喜欢/proc/[pid]/stat的信息,但是我不知道程序死/被杀死后如何查看. 有什么想法吗? 编辑:我认为Valgrind会增加很多开销.这就是为什么我想要一个始终可用的简单 ..

为什么x86中存在CLFLUSH?

我最近了解了行锤攻击.为了进行这种攻击,程序员需要为特定数量的地址刷新CPU的完整缓存层次结构. 我的问题是:为什么在x86中必须 CLFLUSH ?如果所有L *高速缓存均透明地起作用(即不需要显式的高速缓存失效),那么使用该指令的原因是什么?除此之外:CPU难道不可以推测内存访问模式,从而完全忽略指令吗? 解决方案 我认为主要用例是非易失性DIMM ,尤其是英特尔的Optane ..

英特尔的CLWB指令使缓存行无效

我正在尝试为Intel的 clwb 指令查找配置或内存访问模式,该配置或内存访问模式不会使高速缓存行无效.我正在使用NVDIMM的Intel Xeon Gold 5218处理器进行测试. Linux版本是5.4.0-3-amd64.我尝试使用Device-DAX模式并将此char设备直接映射到地址空间.我还尝试将此非易失性存储器添加为新的NUMA节点,并使用numactl --membind命令将 ..
发布时间:2020-08-05 20:39:02 其他开发

Ice Lake的48KiB L1数据缓存的索引如何工作?

英特尔手动优化(2019年9月修订)显示了针对Ice Lake微体系结构的48 KiB 8路关联L1数据缓存. 1 软件可见的延迟/带宽将根据访问模式和其他因素而变化. 这让我感到困惑,因为: 有96组(48 KiB/64/8),不是2的幂. 集合的索引位和字节偏移的索引位加起来超过12位,这使得 cheap-PIPT -as-VIPT-技巧不适用于4KiB页面. 总而言 ..
发布时间:2020-07-24 09:34:51 其他开发

存储缓冲区和行填充缓冲区如何相互影响?

我正在阅读MDS攻击文件 RIDL:流氓机上数据加载.他们讨论了行填充缓冲区如何导致数据泄漏. 关于RIDL漏洞和“重放"负载问题,讨论了该漏洞的微体系结构细节. 在阅读了这个问题后,我仍然不清楚的一件事是,如果我们已经有一个存储缓冲区,为什么我们需要一个行填充缓冲区. John McCalpin在 对于到WB空间的商店,商店数据将保留在商店缓冲区中,直到商店退役之后.退役后,数据可 ..

当L1丢失与L2访问有很大不同时...与TLB相关吗?

我一直在某些算法上运行一些基准测试,并分析它们的内存使用情况和效率(L1/L2/TLB访问和未命中),其中一些结果对我来说很有趣. 考虑到包含性的缓存层次结构(L1和L2缓存), L1缓存未命中的次数是否应该与 L2缓存访问次数一致?我发现的一种解释是与TLB相关的:当虚拟地址未在TLB中映射时,系统会自动跳过某些缓存级别中的搜索. 这看起来合法吗? 解决方案 首先,包含性缓存层次结 ..
发布时间:2020-07-11 02:05:41 其他开发

VIPT到PIPT的转换如何在L1-> L2逐出中工作

这种情况浮现在我的脑海,似乎有点基本,但我会问. 因此L1中有一个虚拟索引和物理标记,但是该集合已满,因此被逐出. L1控制器如何从虚拟索引和L1中的物理标签获取完整的物理地址,以便可以将线路插入L2?我想它可以在TLB中搜索组合,但这似乎很慢,而且可能根本不在TLB中.也许来自原始TLB转换的完整物理地址存储在高速缓存行旁边的L1中? 这也引发了一个更广泛的问题:当PMH将访问的位写 ..
发布时间:2020-07-11 02:05:37 其他开发

TLB是否在多个内核之间共享?

我听说MLB维护TLB,而不是CPU缓存. 那么,一个TLB是否存在于CPU上并在所有处理器之间共享,或者每个处理器都有自己的TLB缓存? 有人可以解释一下MMU与L1,L2缓存之间的关系吗? 解决方案 TLB缓存页表中列出的翻译.每个CPU内核可以在具有不同页表的不同上下文中运行.如果它是一个单独的“单元",则将其称为MMU,因此每个内核都有自己的MMU.任何共享的缓存始终会被物 ..
发布时间:2020-07-11 02:05:33 其他开发

Intel Core i7处理器使用哪种缓存映射技术?

我了解了不同的缓存映射技术,例如直接映射,关联映射和集合关联映射技术,还学习了权衡取舍.但是我很好奇如今在英特尔酷睿i7或AMD处理器中使用了什么.以及技术如何发展.还有什么需要改进的地方? 解决方案 现代高性能CPU基本上从不使用直接映射的缓存.对于相同大小的集关联高速缓存,命中率的巨大优势大大节省了功率,而控制逻辑的复杂性仅高一点.如今,晶体管预算非常庞大. 对于软件来说,至少有 ..
发布时间:2020-07-07 18:33:15 其他开发

对页面使用直写式高速缓存策略时

我正在阅读MDS攻击文件 RIDL:流氓机上数据加载.将页面设置为回写,直写,写合并或不可缓存,并通过不同的实验确定行填充缓冲区是微体系结构泄漏的原因. 切线:我知道内存是不可缓存的,但是我假设可缓存数据始终缓存在回写缓存中,即,我假设L1,L2和LLC始终是回写缓存. 我在《计算机体系结构》书中阅读了回写式缓存与直写式缓存之间的差异.它说: 直写式缓存更易于实现,并且可以使用写 ..
发布时间:2020-07-02 05:19:44 其他开发