【发布时间】:2018-03-22 03:48:16
【问题描述】:
来自another question,显然英特尔 TSX 读/写集是隐藏的。这是可以理解的,尤其是因为它允许他们搞砸设计和实现,并可能尝试诸如布隆过滤器之类的东西。
但是当一个事务中止时,最好看看是什么地址 - 或缓存行 - 导致它(当这样的事情是中止的原因时)。地址是否暴露在任何地方?
【问题讨论】:
-
Skylake 为
hle_retired.aborted和rtm_retired.aborted等事件提供性能计数器。这些是“精确”事件,因此您可能会看到哪个指令导致中止(但不是实际地址)。对于其他 TSX 事件,还有几个其他性能计数器,例如不同的中止原因,以及rtm_retired.commit和.start。我自己没有使用过 TSX,所以 IDK 在尝试调整某些东西以减少中止时最终会有多大用处,但我认为这就是英特尔认为你应该做的。英特尔的优化手册也有一整章是关于 TSX 的。 -
谢谢彼得。是的,在某些情况下,我知道为什么事务中止,并且我可以做一些事情使其在后续尝试中成功——但前提是我知道哪个缓存行导致中止。我去看看优化手册。
标签: debugging transactions x86 transactional-memory intel-tsx