Perf Мониторинг для rdtsc динамически - PullRequest
0 голосов
/ 20 ноября 2018

Есть ли способ динамического отслеживания инструкций по сборке в режиме реального времени с использованием perf?Я видел, что если я использую perf record / perf top и затем нажимаю на записанные функции, я вижу инструкции по сборке, но могу ли я непосредственно отслеживать конкретные инструкции по сборке, например, rdtsc или clflush, например, как часто они вызываются процессом внутриопределенный период использования перф?

Я использую Debian 9 на Skylake, а также на Haswell.

sudo uname -a 
Linux bla 4.9.0-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux

sudo /proc/config.gz

возвращает command not found.

Любая помощь / идеи приветствуются.

1 Ответ

0 голосов
/ 22 ноября 2018

Да, вы, безусловно, могли бы создать что-то, что динамически производит выборку инструкций, выполняющихся на хосте.

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

Повторяя это, вы получите гистограмму выполненных инструкций, а затем сможете оценить, как часто rdtsc или любая другая интересующая инструкция работает.

Это не 'Даже на самом деле все это сложно: большая часть логики уже существует в perf top, perf record и perf report: просто объедините код выборки из perf top с кодом аннотации из perf top и / или perf report какописано выше.Возможно, вы даже можете сделать это после факта: используйте perf record --all-cpus, чтобы собрать образцы, а затем запустите perf script или иным образом проанализируйте файл для отслеживания инструкций.

Каждый образец даст вам только небольшое окновыполненные инструкции, поэтому, если вам нужно точно отловить случайный rdtsc, это не сработает вообще.

Вы можете расширить «окно» для каждого образца, используя функцию «последней записи ветви», чтобы по существу вернуться назад во времени на основе самых последних ветвей, и разбирать все эти основные блоки, что расширило бы ваше покрытиеза образец по партии.

...