TSX: получить адрес, вызвавший прерывание

Из другого вопроса ясно, что Intel TSX читает/ набор для записи скрыт. И это понятно, тем более что это позволяет им заниматься дизайном и реализацией и, возможно, пробовать такие вещи, как фильтры Блума или что-то в этом роде.

Но когда транзакция прерывается, было бы неплохо увидеть, какой адрес или строка кэша вызвали это (когда такая вещь была причиной прерывания). Где-нибудь выставлен адрес?


person William Leiserson    schedule 10.10.2017    source источник
comment
В Skylake есть счетчики производительности для таких событий, как hle_retired.aborted и rtm_retired.aborted. Это точные события, поэтому, возможно, вы могли бы увидеть, какая инструкция вызывает прерывание (но не фактический адрес). Есть несколько других счетчиков производительности для других событий TSX, таких как различные причины прерывания, а также rtm_retired.commit и .start. Я сам не использовал TSX, поэтому ИДК, насколько это полезно, когда вы пытаетесь настроить что-то, чтобы уменьшить прерывания, но я думаю, что Intel считает, что вы должны это сделать. В руководстве по оптимизации Intel также есть целая глава, посвященная TSX.   -  person Peter Cordes    schedule 11.10.2017
comment
Спасибо, Питер. Да, в некоторых случаях я знаю, почему транзакция прервана, и могу сделать что-то, чтобы последующие попытки были успешными, но только если я знаю, какая строка кэша вызвала прерывание. Я посмотрю руководство по оптимизации.   -  person William Leiserson    schedule 12.10.2017


Ответы (1)


Поговорив с людьми из Intel, сделать это невозможно [цитирование]. Адрес не сохраняется при прерывании. Есть хитрые хаки, чтобы получить, например, адрес инструкции, которая была выполнена (см. цитату), но не адрес записи.

person William Leiserson    schedule 18.10.2017