CPU中的L2毒是什么意思?

问题描述 投票:0回答:1

我遇到了与this相同的问题。 L2毒是什么意思?

我使用AMD CPU。

caching cpu-architecture cpu-cache amd-processor
1个回答
0
投票

我猜测“L2 中毒”意味着将 L2 缓存条目设置为错误的 ECC 值,因此缓存命中(甚至未命中?)会导致无法纠正的 ECC 错误。 (另请参阅 https://lwn.net/Articles/348886/,其中讨论了“内存中毒”和 Linux 2009 年的 HWPISON 补丁)。

一般来说,编程中的“中毒”是指将某些东西初始化为某种状态,如果使用该东西就会出错,或者至少具有可识别的模式,因此您可以检测到读取未初始化之类的错误。例如,MSVC 调试使用

0xcc
字节构建“有毒”堆栈内存,这会形成一个无效指针,如果取消引用,该指针将出现错误,并且可以在异常的错误地址中轻松识别。它是用于
int3
调试断点的 x86 机器代码,以防您意外地跳转到堆栈地址。 (这并没有针对代码注入进行强化,但可以想象,它可能会捕获错误的内联汇编使 ESP 指向堆栈内存的指针而不是返回地址的情况。)

我不知道当前的 CPU 是否确实有一种软件机制可以毒害 L2 缓存,无论是整个缓存还是特定缓存行的条目。

无论如何,您链接的问题中错误的实际原因似乎是 DRAM 中或从 DRAM 到内存控制器的数据传输中不可纠正的 ECC 错误。显然,机器检查异常或引发的任何异常无法区分缓存 ECC 故障与 DRAM?或者只是 Linux 的驱动程序没有?

(如果是回写式的话,大多数级别的缓存都受到 ECC 保护是正常的。据称,Intel L1d 缓存仅使用奇偶校验来保持较低的开销,同时支持字节存储和更广泛的未对齐存储,只要性能良好因为它们不跨越缓存行边界。是否有任何现代 CPU 的缓存字节存储实际上比字存储慢? - 是的,显然大多数非 x86!我还没有看到关于AMD,但我认为 AMD CPU 确实在所有情况下都支持全性能未对齐存储,其中相同的未对齐负载不会有任何惩罚。我这样表达是因为某些 AMD CPU 对交叉有惩罚(并且缺乏原子性) 32 字节边界,而不仅仅是 64 字节缓存行边界。)


半相关:https://en.wikipedia.org/wiki/Cache_poisoning - 维基百科仅提到 DNS 缓存或 ARP 缓存中毒等内容,其中在攻击者通过漏洞创建一些无效条目后,无效条目实际上被使用。

© www.soinside.com 2019 - 2024. All rights reserved.