Я хотел бы запустить тесты в 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