Я собираюсь собрать статистику приложения Linux для небольшого подмножества его выполнения программы. Это подмножество можно определить как первые n инструкций или первые n циклов.
Для определенного подмножества нас интересуют такие статистические данные, как точность предсказания ветвлений, частота попаданий в кеш и IPC ядра.
Похоже, что инструмент perf лучше всего подходит для такого мониторинга. Однако способ указать подмножество в perf - это запустить команду, которая дает информацию о подмножестве.
Пример: если я хочу собирать данные за первые n секунд, мне нужно выполнить следующую команду.
perf stat -p PID sleep n
Здесь я должен запустить программу, а затем прикрепить к этой программе perf, используя ее PID. Perf собирает данные для процесса с pid PID до тех пор, пока не будет запущена команда сна. Однако с момента начала выполнения моей программы до момента, когда перфоманс был присоединен к процессу, могло быть выполнено x инструкций. Поскольку x случайный, нет абсолютно никакого способа узнать, какие инструкции были профилированы perf.
Я был бы полезен предложениями, которые позволят мне контролировать выполнение программы.
- в течение первых n секунд, или
- из определенной точки выполнения программы (имя некоторой функции или указатель инструкции)