Как я могу получить разумный образец выполненных или удаленных инструкций 1 с использованием perf
?
Такие вещи, как perf record -e instructions
дают явно неправильные результаты. Очевидно, что здесь неправильно означает, что они, по-видимому, отбирают медленные инструкции на основе времени их выполнения.
Например, для следующих l oop:
.loop:
mov rdx, rsi
xor rax, rax
div rdi
dec rcx
jne .loop
Вы получите от 99,5% до 100% сэмплы по инструкциям div
или dec
(в зависимости от того, есть ли у вас блок из 1 инструкции или нет), но, очевидно, все эти инструкции должны быть удалены с той же скоростью (это базовый блок c).
Типичные результаты для события «занос 1», например inst_retired.any_p
(3704 выборок):
Источник, инструкции по сборке и выполнению для этого теста.
1 Я упоминаю оба, потому что различие важно в принципе (первое будет считаться умозрительно выполненным, но никогда не удаляющимся инструкциям), хотя я рад получить ответ либо .