perf.data к тексту или CSV - PullRequest
0 голосов
/ 03 мая 2018

Я использую команду perf record для выборки аппаратных счетчиков за 1 мс. Он предоставляет мне «perf.data» в качестве выходного файла, но я не знаю ни одного инструмента / команды, который бы помог мне прочитать данные счетчика из двоичного файла «perf.data» в текстовый или CSV-файл. Или, проще говоря, мне нужно читать данные о событиях счетчика оборудования каждые 1 мс из файла «perf.data».

Некоторые подробности:

1) Я использовал команду «perf stat» для получения данных о событиях счетчика оборудования на 10 мс, но он не позволяет производить выборку с интервалом выборки менее 10 мс. Итак, я использую «perf record» вместо perf stat для выборки на 1 мс. Несколько полезных ссылок, которые убедили меня использовать perf record: Perf Stat против Perf Record и Сбор данных для частичного процесса из PMU за каждую 1 миллисекунду

2) Я также попробовал «скрипт сценария», но он поддерживает только некоторые аппаратные события. Например: события кэша не поддерживаются сценарием perf. ссылка: Невозможно сэмплировать события аппаратного кэша с linux perf

Может кто-нибудь помочь мне с этим, пожалуйста? Пожалуйста, предположим, что я знаю, как использовать команду perf record, и у меня уже есть файл perf.data (сгенерированный из записи perf)

Отредактировано: Ниже приведены команды и их выходные сообщения на терминале с использованием обратной связи от ответов:

1) perf запись -e LLC-store, LLC-загружает, кэш-промахов -F 999 -R -T ls> ls.txt

вывод:

[perf record: 1 раз просыпался для записи данных)

[perf запись: записано и записано 0,017 МБ perf.data (28 образцов)]

2) отчет о перфорации -F образец, период --stdio

выход: Всего потерянных образцов: 0 Образцы: 9 из мероприятия ООО «Магазины» Количество событий (прибл.): 7440

  Samples        Period

............ ............

         9          7440

Образцы: 9 мероприятия «LLC-load» Количество событий (прибл.): 50008

  Samples        Period

............ ............

         9         50008

Образцы: 10 событий 'пропущенные кеша' Количество событий (прибл.): 351826

  Samples        Period

............ ............

        10        351826

3) скрипт сценария -F период, событие

выход:

     1   LLC-stores: 
     1    LLC-loads: 
     1 cache-misses: 
     1    LLC-loads: 
     1 cache-misses: 
    61    LLC-loads: 
    58 cache-misses: 
  3097 cache-misses: 
     1   LLC-stores: 
    13   LLC-stores: 
  4748    LLC-loads: 
  1390   LLC-stores: 
190186 cache-misses: 
     1   LLC-stores: 
     1    LLC-loads: 
     1 cache-misses: 
     1    LLC-loads: 
     1 cache-misses: 
     1   LLC-stores: 
    52 cache-misses: 
    50    LLC-loads: 
    20   LLC-stores: 
  4110 cache-misses: 
  2002    LLC-loads: 
   748   LLC-stores: 
154319 cache-misses: 
 43143    LLC-loads: 
  5265   LLC-stores: 

4) perf stat -I 1 -e LLC-store, LLC-загружает, кеш пропускает ls> ls.txt

выход:

       time             counts unit events
 0.006476856              1,115      LLC-stores                                                  
 0.006476856             13,121      LLC-loads                                                   
 0.006476856              9,371      cache-misses                                                

Оба отчет о перфекте и сценарий перфорирования предоставляют количество выборок, период и название события, но не количество событий для каждой выборки. Было бы очень полезно, если бы вы могли рассказать мне, как получить количество событий для каждых 28 сэмплов, которые мы получаем из perf-записи.

1 Ответ

0 голосов
/ 04 мая 2018

Вы должны использовать perf record -e <event-name> ... для выборки событий каждые 1 мс. Кажется, вы пытаетесь прочитать файл perf.data и упорядочить его в удобочитаемые данные. Вам следует использовать perf report, если вы не знаете об этом. Команда perf report читает файл perf.data и создает краткий профиль выполнения. Ссылка ниже должна помочь вам -

Анализ проб с отчетом о проверке

Вы можете изменить вывод perf report в соответствии с вашими требованиями. Вы также можете использовать perf report -F для указания нескольких столбцов в формате CSV.

Однако, кроме того, perf stat имеет механизм сбора информации в формате csv с помощью команды perf stat -x.

Редактировать # 1:

(Я использую Linux-Kernel 4.14.3 для оценки.)

Так как вы хотите, чтобы количество событий на выборку было взято, есть несколько вещей, которые нужно отметить. Чтобы подсчитать количество событий на выборку, вам нужно знать период выборки. Период выборки дает вам количество событий, после которых счетчик производительности будет переполнен, и ядро ​​запишет выборку. По сути, в вашем случае,

sampling period = number of events per sample

Теперь есть два способа указать этот период выборки. Либо вы указываете это, либо вы не указываете это.

Если при выполнении perf record вы указываете период выборки .. что-то вроде этого: -

perf record -e <some_event_name> -c 1000 ...

Здесь -c 1000 означает, что период выборки равен 1000. В этом случае вы намеренно заставляете систему записывать 1000 событий для выборки, поскольку период выборки установлен вами.

С другой стороны, если вы не укажете период выборки, система попытается записать события с частотой по умолчанию 1000 выборок / сек . Это означает, что система автоматически изменит период выборки, если необходимо, чтобы поддерживать частоту 1000 выборок / сек. В таком случае, чтобы определить период выборки, необходимо соблюдать файл perf.data.

В частности, вам нужно открыть файл perf.data с помощью команды:

perf script -D

Вывод будет очень хорошо выглядеть так: -

0 0 0x108 [0x38]: PERF_RECORD_FORK(1:1):(0:0)

0x140 [0x30]: event: 3
.
. ... raw event: size 48 bytes
.  0000:  03 00 00 00 00 00 30 00 01 00 00 00 01 00 00 00  ......0.........
.  0010:  73 79 73 74 65 6d 64 00 00 00 00 00 00 00 00 00  systemd.........
.  0020:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

0 0 0x140 [0x30]: PERF_RECORD_COMM: systemd:1/1

0x170 [0x38]: event: 7
.
. ... raw event: size 56 bytes
.  0000:  07 00 00 00 00 00 38 00 02 00 00 00 00 00 00 00  ......8.........
.  0010:  02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
.  0020:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
.  0030:  00 00 00 00 00 00 00 00                          ........ 

Вы можете увидеть различные типы записей, такие как PERF_RECORD_FORK и PERF_RECORD_COMM и даже PERF_RECORD_MMAP. Вам нужно специально искать записи, которые начинаются с PERF_RECORD_SAMPLE внутри файла. Как это:

14 173826354106096 0x10d40 [0x28]: PERF_RECORD_SAMPLE(IP, 0x1): 28179/28179: 0xffffffffa500d3b5 period: 3000 addr: 0
 ... thread: perf:28179
 ...... dso: [kernel.kallsyms]
            perf 28179 [014] 173826.354106: cache-misses:  ffffffffa500d3b5 [unknown] ([kernel.kallsyms])

Как вы можете видеть, в этом случае период равен 3000, т.е. количество событий, собранных между предыдущим событием выборки и этим событием выборки, составляет 3000. (т.е. число событий в выборке равно 3000). Обратите внимание, что, как я уже упоминал выше, это период может быть настроен. Поэтому вам нужно собрать все записи PERF_RECORD_SAMPLE из файла perf.data.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...