你能监听缓存一致性流量来实现链接加载和条件存储吗?

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

我有点想为 x86-64 实现一种 LL/SC 形式(最有可能是 Saphire/Emerald Rapids)。看来缓存拥有执行此操作所需的所有信息,但我需要知道缓存行何时无效/修改(我可以保证分配的对齐和大小)。

有什么办法可以监听QPI流量吗?我听说有,但你的性能受到了影响(糟糕)。我真的只是想告诉系统当这个地址范围被修改时告诉我,然后我可以中止存储。有点像不太精确的 CAS 版本,但操作数是任意大小的)。

caching concurrency x86-64 atomic load-link-store-conditional
1个回答
0
投票

用软件窥探?据我所知,除了

umonitor
/
umwait
之外,睡眠直到值发生变化(或超时)。

即使有办法检查和分支该核心是否仍然拥有缓存行的独占所有权,检查然后存储也会有一个TOCTOU竞争窗口,其中来自另一个核心的无效可能会在检查和无条件存储之间到达.


TSX 事务内存,特别是 RTM(受限事务内存),是 LL/SC 的通用形式,如果另一个核心干扰,CPU 会中止事务。您使用

xbegin
指令启动事务,执行一些加载和存储,然后运行
xend
。因此,检查是在您向 CPU 提供所有加载/存储之后。整个事务要么提交,要么中止。 如果您的系统支持并启用它,它可以为您提供通用的 CAS,甚至是涉及多个缓存行的更大事务。

但由于硬件安全漏洞,并非所有地方都启用。

    https://docs.kernel.org/admin-guide/hw-vuln/tsx_async_abort.html
  • https://www.intel.com/content/www/us/en/architecture-and-technology/mds.html
  • https://www.theregister.com/2021/06/29/intel_tsx_disabled/
  • - 显然 Ice Lake / Tiger Lake 完全放弃了 TSX,并且 2021 年微代码更新禁用了早期 CPU 上的功能。也许是无条件的,因此操作系统甚至无法在某些设备上重新激活它。
  • Sapphire Rapids 引入了一项新的 TSX 功能(TSXLDTRK 用于暂停/恢复事务内负载的跟踪,因此您可以读取一些内存
而无需将其作为事务读取集的一部分)。这可能意味着 Sapphire Rapids 具有有效的 RTM,除非在新功能添加到手册后决定完全禁用 TSX(2020 年,在 2021 年微代码更新之前,通过 Coffee Lake 在 Skylake 上禁用了 TSX。)

在禁用 TSX 的 CPU 上,RTM 事务 (xbegin

) 始终会中止(

Intel TSX:xbegin 始终返回 0
)。或者可能是非法指令(汇编器xbegin raise非法指令)

由于 Spectre 缓解,硬件锁消除是否会永远消失?
    (是的,但可能不是 RTM,TSX 的另一半。而且不完全是由于 Spectre。)
  • 考虑到自 2013 年 Haswell 以来每个 Intel CPU 都支持 TSX 并随后禁用的历史(Ice Lake 除外,根本不支持它),请做好准备,因为您现有硬件的未来微代码更新,支持会消失,即使你现在可以做一些事情。

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