Есть ли способ определить инструкцию, которая вызвала самую последнюю ошибку кэша последнего уровня на современных процессорах Intel?
В настоящее время я могу читать аппаратные счетчики при промахах кэша последнего уровня и ссылках из пространства пользователя, используя wrmsr
выбрать их, а затем rdpmc
читать их.
Однако, хотя некоторые из пропусков являются очень очевидными ссылками на то, что я не хотел бы попадать в кеш, другие гораздо более тонкие и иногда перемещаются, когда один и тот же путь кода выполняется несколько раз (порядка 100000 раз).
Я подозреваю, что некоторые из этих ошибок происходят из-за аппаратной предварительной выборки, поэтому я отключил аппаратную предварительную выборку через BIOS, но я все еще получаю скользящие ошибки в кэше с причинами, которые трудно определить.
Есть ли какая-либо возможность в ядре Linux или в регистрах Intel определять адрес инструкции, которая вызвала самую последнюю ошибку кэша последнего уровня?
Если это полезно, я бегу 2.6.32-279.el6.x86_64
на Intel Xeon X3470
,