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