Как я могу сэмплировать инструкции, выполненные или вышедшие на пенсию с Linux perf? - PullRequest
2 голосов
/ 09 февраля 2020

Как я могу получить разумный образец выполненных или удаленных инструкций 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 выборок):

typical

Источник, инструкции по сборке и выполнению для этого теста.


1 Я упоминаю оба, потому что различие важно в принципе (первое будет считаться умозрительно выполненным, но никогда не удаляющимся инструкциям), хотя я рад получить ответ либо .

...