Debugging TSX:获取导致中止的地址

Debugging TSX:获取导致中止的地址,debugging,transactions,x86,transactional-memory,intel-tsx,Debugging,Transactions,X86,Transactional Memory,Intel Tsx,从中,英特尔TSX读/写集显然是隐藏的。这是可以理解的,特别是因为它允许他们在设计和实现上下功夫,并可能尝试类似bloom过滤器之类的东西 但是当事务中止时,最好看看是什么地址或缓存线导致了它(当这样的事情是中止的原因时)。地址是否暴露在任何地方?与英特尔的同事交谈后,没有办法做到这一点[]。地址不会通过中止保留。有一些聪明的黑客可以获取,例如,执行的指令的地址(见引文),而不是写入的地址。Skylake有性能计数器,用于hle\u retired.aborted和rtm\u retired.a

从中,英特尔TSX读/写集显然是隐藏的。这是可以理解的,特别是因为它允许他们在设计和实现上下功夫,并可能尝试类似bloom过滤器之类的东西


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

与英特尔的同事交谈后,没有办法做到这一点[]。地址不会通过中止保留。有一些聪明的黑客可以获取,例如,执行的指令的地址(见引文),而不是写入的地址。

Skylake有性能计数器,用于
hle\u retired.aborted
rtm\u retired.aborted
等事件。这些是“精确的”事件,因此您可能可以看到哪个指令导致中止(但不是实际地址)。其他TSX事件还有几个其他性能计数器,如不同的中止原因,以及
rtm\u失效。提交
启动
。我自己也没有使用过TSX,所以IDK在尝试调整某些东西以减少中止时,它是多么有用,但我认为这是Intel认为您应该做的。英特尔的优化手册也有一整章介绍TSX。谢谢Peter。是的,在某些情况下,我知道事务中止的原因,我可以采取一些措施使其在后续尝试中成功——但前提是我知道是哪个缓存线导致了中止。我来看看优化手册。