5

众所周知,英特尔不得不通过微码更新禁用 Haswell 系列处理器中的 TSX。这是由于 TSX 实现中的一个错误造成的,如果使用这些指令,可能会产生错误的结果。

似乎不太为人所知的是,在较新的架构 Skylake 上显然还有一个影响 TSX 的勘误表。特别是这里提到的勘误表“SKL-105”:

http://www.intel.com/content/www/us/en/processors/core/desktop-6th-gen-core-family-spec-update.html

它特别指出使用 TSX 会导致不可预测的系统行为。但是,它还指出,BIOS 可以进行修复。然而,问题是这个修复需要什么。它是否像 Haswell 微码“修复”一样完全禁用 TSX?谷歌搜索“SKL105”没有给出任何结果,所以似乎社区通常不知道它?

一些用户注意到 TSX 功能被“悄悄地”禁用(但似乎没有意识到上面的勘误表):

https://www.reddit.com/r/hardware/comments/44k218/intel_disables_tsx_transactional_memory_again_in/

如果只有 CPU 的某些变体受到影响,这很奇怪,因为人们会假设它们都将共享相同的微架构,因此同样会受到此错误的影响。

顺便说一下,这种微码“修复”可以运行的另一种方式,并且可能更加隐蔽:我想可以进行微码更新,但仍然会暴露 TSX 的存在(看起来该功能仍然启用)但是会用“虚拟实现”覆盖新 TSX 指令的实现,这些虚拟实现实际上永远不会忽略锁,基本上只是以老式方式执行代码,从而避免了错误,但也放弃了 TSX 可以提供的性能改进。确定是否发生这种情况的唯一方法是通过性能测量。

有人有更多关于 Skylake 中 TSX 状态的信息吗?无论如何,奇怪的是没有更多的信息被发布,人们不得不猜测什么受到影响,什么没有受到影响。事实上,如果该功能可以安全使用。

我有一个 6700K 并且该功能仍然存在。但这也取决于 BIOS 制造商是否接受了微码更新,而且我还没有实际测量过性能,所以我不能排除它仍然可能被禁用。上一段。

4

1 回答 1

6

据我所知,它应该已修复在 2016-07-14 的最新公共微码更新包中。对于 Skylake,这将是 Skylake 基本微码的修订版 0x9d/0x9e(处理器签名 0x406e3 和 0x506e3)。

这个新的 TSX 勘误表似乎也出现在 Broadwell 上。我认为它也通过与新的 Skylake 微码更新一起发布的新一批 Broadwell-* 微码更新得到修复。

对于通过引导加载程序发送的数据更新微代码的 Linux,应用更新很简单,并且它已经在大多数(严重的)发行版中可用。对于 Windows,您需要纠缠系统供应商进行 EFI/BIOS 更新。

抱歉,我没有办法在最新的 Skylake/Broadwell 微码中测试 TSX 以检查它是否正在消除锁定或“总是失败”。至于禁用 TSX,您必须了解它对 L3 效率(它不是免费的!)和功耗有真正的影响,在任何具有较小 L3 的设备上禁用 TSX 是很有意义的。

有趣的是,关于 TSX“鸡头”的信息是不公开的,我们不知道如何禁用(或重新启用)它。

于 2016-08-12T10:31:21.203 回答