【问题标题】:TSX: Get the address that caused the abortTSX:获取导致中止的地址
【发布时间】:2018-03-22 03:48:16
【问题描述】:

来自another question,显然英特尔 TSX 读/写集是隐藏的。这是可以理解的,尤其是因为它允许他们搞砸设计和实现,并可能尝试诸如布隆过滤器之类的东西。

但是当一个事务中止时,最好看看是什么地址 - 或缓存行 - 导致它(当这样的事情是中止的原因时)。地址是否暴露在任何地方?

【问题讨论】:

  • Skylake 为 hle_retired.abortedrtm_retired.aborted 等事件提供性能计数器。这些是“精确”事件,因此您可能会看到哪个指令导致中止(但不是实际地址)。对于其他 TSX 事件,还有几个其他性能计数器,例如不同的中止原因,以及 rtm_retired.commit.start。我自己没有使用过 TSX,所以 IDK 在尝试调整某些东西以减少中止时最终会有多大用处,但我认为这就是英特尔认为你应该做的。英特尔的优化手册也有一整章是关于 TSX 的。
  • 谢谢彼得。是的,在某些情况下,我知道为什么事务中止,并且我可以做一些事情使其在后续尝试中成功——但前提是我知道哪个缓存行导致中止。我去看看优化手册。

标签: debugging transactions x86 transactional-memory intel-tsx


【解决方案1】:

在与英特尔的人员交谈后,没有办法做到这一点 [citation]。该地址不会通过中止保留。有一些巧妙的技巧可以获取,例如,执行指令的地址(参见引用),而不是写入的地址。

【讨论】:

    猜你喜欢
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2020-04-04
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多