ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΎΠ± ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ Π΄Π»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ CPU Π½Π° Linux-ΠΌΠ°ΡΠΈΠ½Π°Ρ . Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π² ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π΅: temci, uarch-bench, likwid, perf-tools ΠΈ llvm-mca.
ΠΠΎΠ»ΡΡΠ΅ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²:
Sysbench, UnixBench, Phoronix Test Suite, Vdbench ΠΈ IOzone Interbench, Fio, Hdparm, S ΠΈ Bonnie Iometer, DD, vpsbench, HammerDB ΠΈ 7-Zip
Π€ΠΎΡΠΎ β
temci
ΠΡΠΎ β ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π²ΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠΎ ΡΡΡΠΈ, ΠΎΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠ°Π²Π½ΠΈΡΡ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π²ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ²ΡΠΎΡΠΎΠΌ ΡΡΠΈΠ»ΠΈΡΡ Π²ΡΡΡΡΠΏΠΈΠ» ΡΡΡΠ΄Π΅Π½Ρ ΠΈΠ· ΠΠ΅ΡΠΌΠ°Π½ΠΈΠΈ ΠΠΎΡ
Π°Π½Π½Π΅Ρ ΠΠ΅Ρ
Π±Π΅ΡΠ³Π΅Ρ (Johannes Bechberger), ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π» Π΅Π΅ Π² ΡΠ°ΠΌΠΊΠ°Ρ
Π±Π°ΠΊΠ°Π»Π°Π²ΡΡΠΊΠΎΠΉ Π²ΡΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π² 2016 Π³ΠΎΠ΄Ρ. Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ
ΠΠΎΡ
Π°Π½Π½Π΅Ρ Ρ
ΠΎΡΠ΅Π» ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» ΠΈΠ·ΠΌΠ΅ΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π² ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ. ΠΠΎΡΡΠΎΠΌΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π³Π»Π°Π²Π½ΡΡ
ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ temci ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ΅ΡΡΠΎΠ²ΡΡ ΡΡΠ΅Π΄Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,
ΠΠΎΡ ΡΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°Π±ΠΎΡΠ° ΡΡΠΈΠ»ΠΈΡΡ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅:
# compare the run times of two programs, running them each 20 times
> temci short exec "sleep 0.1" "sleep 0.2" --runs 20
Benchmark 20 times [####################################] 100%
Report for single runs
sleep 0.1 ( 20 single benchmarks)
avg_mem_usage mean = 0.000, deviation = 0.0
avg_res_set mean = 0.000, deviation = 0.0
etime mean = 100.00000m, deviation = 0.00000%
max_res_set mean = 2.1800k, deviation = 3.86455%
stime mean = 0.000, deviation = 0.0
utime mean = 0.000, deviation = 0.0
sleep 0.2 ( 20 single benchmarks)
avg_mem_usage mean = 0.000, deviation = 0.0
avg_res_set mean = 0.000, deviation = 0.0
etime mean = 200.00000m, deviation = 0.00000%
max_res_set mean = 2.1968k, deviation = 3.82530%
stime mean = 0.000, deviation = 0.0
utime mean = 0.000, deviation = 0.0
ΠΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈΠ½Π³Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ
ΠΠ· Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² temci Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ Π΅Π³ΠΎ Β«ΠΌΠΎΠ»ΠΎΠ΄ΠΎΡΡΡΒ». ΠΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ ΠΎΠ½
uarch-bench
Π£ΡΠΈΠ»ΠΈΡΠ° Π΄Π»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ CPU, ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π» ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ Π’ΡΠ΅Π²ΠΈΡ ΠΠ°ΡΠ½Ρ (
Uarch-bench ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ΅Π½ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΠΎΡΠΈΡΡΠΊΠ΅
YMM-ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² . ΠΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈΠ½Π³Π°, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈΠ² ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π²Π½ΠΈΠ·Ρ ΡΡΡΠ°Π½ΠΈΡΡ.
Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ uarch-bench, ΠΊΠ°ΠΊ ΠΈ temci,
ΠΠΎΠΊΠ° ΡΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠ°Π½Π½ΠΈΡ
ΡΡΠ°ΠΏΠ°Ρ
ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ uarch-bench Π½Π΅Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π° Π² Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ Π±Π°Π³ΠΈ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
likwid
ΠΡΠΎ β Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Linux-ΠΌΠ°ΡΠΈΠ½ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°ΠΌΠΈ Intel, AMD ΠΈ ARMv8. ΠΠ½ ΡΠΎΠ·Π΄Π°Π½ ΠΏΠΎΠ΄ ΡΠ³ΠΈΠ΄ΠΎΠΉ Π€Π΅Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΈΠ½ΠΈΡΡΠ΅ΡΡΡΠ²Π° ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π½Π°ΡΡΠ½ΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ ΠΠ΅ΡΠΌΠ°Π½ΠΈΠΈ Π² 2017 Π³ΠΎΠ΄Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ Π² open source.
Π‘ΡΠ΅Π΄ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² likwid ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ likwid-powermeter, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· RAPL-ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΎ ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅ΠΌΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΌΠΎΡΠ½ΠΎΡΡΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ likwid-setFrequencies β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΡΡΠΎΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΡ, Π·Π°Π½ΠΈΠΌΠ°ΡΡΠΈΠ΅ΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡΠΌΠΈ Π² ΠΎΠ±Π»Π°ΡΡΠΈ HPC. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ likwid
Π€ΠΎΡΠΎ β
perf-tools
ΠΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Linux-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ²
Π ΠΎΡΠ½ΠΎΠ²Π΅ perf-tools Π»Π΅ΠΆΠ°Ρ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ΄ΡΠ° perf_events ΠΈ ftrace. ΠΡ ΡΡΠΈΠ»ΠΈΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΡ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° (iosnoop), ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ Π²ΡΠ·ΠΎΠ²Π°ΠΌ (unccount, funcslower, funcgraph ΠΈ functrace) ΠΈ ΡΠΎΠ±ΡΠ°ΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ Β«ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΉΒ» Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ ΠΊΡΡ (cachestat). Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π²ΠΎΡ ΡΠ°ΠΊ:
# ./cachestat -t
Counting cache functions... Output every 1 seconds.
TIME HITS MISSES DIRTIES RATIO BUFFERS_MB CACHE_MB
08:28:57 415 0 0 100.0% 1 191
08:28:58 411 0 0 100.0% 1 191
08:28:59 362 97 0 78.9% 0 8
08:29:00 411 0 0 100.0% 0 9
ΠΠΎΠΊΡΡΠ³ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΠΈΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ (
llvm-mca
Π£ΡΠΈΠ»ΠΈΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΠ³Π½ΠΎΠ·ΠΈΡΡΠ΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΡΠ΅ΡΡΡΡΠΎΠ² ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ Π½Π° ΡΠ°Π·Π½ΡΡ
CPU. ΠΠ½Π°
llvm-mca ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ»ΠΈ Π² 2018 Π³ΠΎΠ΄Ρ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΏΡΠΎΠ΅ΠΊΡΠ°
Π ΡΠ΅ΠΌ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³Π°Ρ ΠΈ ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ΅ΡΡΡ :
ΠΠ°ΠΊ ΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡΡ Linux-ΡΠΈΡΡΠ΅ΠΌΡ: 10 ΡΠΎΠ²Π΅ΡΠΎΠ²
ΠΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠΈΡΠΊΠΎΠ²: ΠΊΠ°ΠΊ Π½Π΅ ΠΏΠΎΡΠ΅ΡΡΡΡ Π²Π°ΡΠΈ Π΄Π°Π½Π½ΡΠ΅
ΠΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ ΡΠΆΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅Ρ Π½Π°ΡΠ°ΡΡ
ΠΠΎΠ΄Π±ΠΎΡΠΊΠ°: ΠΏΡΡΡ ΠΊΠ½ΠΈΠ³ ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΡΡΡ ΠΏΠΎ ΡΠ΅ΡΡΠΌ
ΠΡ Π² 1cloud.ru ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΡ ΡΡΠ»ΡΠ³Ρ Β«
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com