是否有一段时间处理器直接使用 ram 进行操作,而无需缓存内存的参与?或者它像处理器总是从缓存中获取数据而缓存从 Ram 中获取?
通常不会,不会,除非软件故意绕过或禁用现代 CPU 上的缓存。
DRAM 的延迟可能为 70 ns,在 4GHz CPU 上是 280 个周期。这足以让 Skylake CPU 以每个周期 4 条指令执行 ~1100 条指令。但是它对内存并行性的限制是大约 12 个未完成的缓存未命中。所以缓存对性能非常重要,即使是乱序执行。
不过,有趣的事实是:是的,P5 Pentium CPU 和早期版本中的 MMU 在 TLB 未命中后访问页表时会绕过缓存。来源:Andy Glew 的回答,前英特尔 CPU 架构师,曾参与 P6 的工作:页表遍历是否被缓存?
但是,包括现代 x86 在内的现代 CPU确实通过其数据缓存访问页表:L2 TLB 未命中后会发生什么?
x86 有movnt
缓存绕过存储的指令,以避免大 memset 的缓存污染。带宽需要权衡。有关具有 ERMSB 功能的 CPU 上的NT 存储和无 RFO 存储的更多信息,请参阅增强的 REP MOVSB for memcpyrep movsb
。可能其他一些架构也有类似的功能。
您还可以将一定范围的物理地址空间设置为不可缓存。(或在 x86 上,每个 4k 虚拟页面在页表条目中具有页属性表设置。)
通常这是为 MMIO 区域(内存映射 I/O)完成的,其中“内存”实际上是网卡等设备上的 I/O 寄存器而不是 DRAM。因此,每次加载/存储都是可见的副作用,必须禁止推测性预取。(并且每个存储都必须导致单独的非核心写入事务,例如 PCIe 消息。)
此外,x86 CPU 具有控制寄存器,可让您禁用缓存,从而使其速度极慢。如何在现代 x86/amd64 芯片上关闭 L1、L2、L3 CPU 缓存?. 同样,我假设其他 ISA 具有类似的功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句