JMH даетзначения при профилировании с помощью perf - PullRequest
0 голосов
/ 14 сентября 2018

Я хотел бы запустить тесты в Java и получить аппаратные счетчики.Я хотел использовать JMH для этого, так как это похоже на зрелый инструмент.У него также есть опции для подключения профилей (например, инструмент perf, который также является зрелым).Моя проблема в том, что при запуске моих тестов с java -jar benchmarks.jar -prof perf на всех счетчиках отображается значение <not counted>.

Perf stats:
--------------------------------------------------

     <not counted>      task-clock
     <not counted>      context-switches
     <not counted>      cpu-migrations
     <not counted>      page-faults
     <not counted>      cycles
     <not counted>      instructions
     <not counted>      branches
     <not counted>      branch-misses
     <not counted>      L1-dcache-loads
     <not counted>      L1-dcache-load-misses
     <not counted>      LLC-loads
     <not counted>      LLC-load-misses
   <not supported>      L1-icache-loads
     <not counted>      L1-icache-load-misses
     <not counted>      dTLB-loads
     <not counted>      dTLB-load-misses
     <not counted>      iTLB-loads
     <not counted>      iTLB-load-misses
   <not supported>      L1-dcache-prefetches
   <not supported>      L1-dcache-prefetch-misses

       0,379402355 seconds time elapsed

Если я запускаю perf независимо, например, набрав perf stat sleep 5, то яполучить результаты:

Performance counter stats for 'sleep 5':

          0,588915      task-clock (msec)         #    0,000 CPUs utilized
                 1      context-switches          #    0,002 M/sec
                 0      cpu-migrations            #    0,000 K/sec
                60      page-faults               #    0,102 M/sec
         1 048 769      cycles                    #    1,781 GHz
           807 919      instructions              #    0,77  insn per cycle
           159 210      branches                  #  270,345 M/sec
             7 325      branch-misses             #    4,60% of all branches

       5,001500262 seconds time elapsed

1 Ответ

0 голосов
/ 14 сентября 2018

Я нашел ответ, я оставляю его другим людям, которые сталкивались с подобной проблемой.

У вызовов perf был параметр --delay 21000, который вводил задержку перед началом подсчета.Поскольку эталонные тесты были короче, подсчет не начался.

Проблема была решена с помощью команды java -jar benchmarks.jar -prof perf:delay 0.: используется для передачи параметров профилировщику.

...