ΠΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΠΌΠ΅ Π΄Π° Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° Π½Π° 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
Π’ΠΎΠ²Π° Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ. ΠΡΡΡΠ½ΠΎΡΡ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΡΠ°Π²Π½ΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½Π° ΠΎΡ Π½Π΅ΠΌΡΠΊΠΈΡ ΡΡΡΠ΄Π΅Π½Ρ ΠΠΎΡ
Π°Π½Π΅Ρ ΠΠ΅Ρ
Π±Π΅ΡΠ³Π΅Ρ, ΠΊΠΎΠΉΡΠΎ Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΈ ΠΊΠ°ΡΠΎ ΡΠ°ΡΡ ΠΎΡ Π±Π°ΠΊΠ°Π»Π°Π²ΡΡΡΠΊΠ°ΡΠ° ΡΠΈ ΡΠ΅Π·Π° ΠΏΡΠ΅Π· 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 Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΡΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΏΠΎ ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅
YMM ΡΠ΅Π³ΠΈΡΡΡΠΈ . ΠΠ°ΠΊ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»Π½ΠΈΡ Π°Π½Π°Π»ΠΈΠ·, Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°Π² ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π² Π΄ΠΎΠ»Π½Π°ΡΠ° ΡΠ°ΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°.
Π‘ΡΡΡΠ²Π° ΡΠΈ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ uarch-bench, ΠΊΠ°ΡΠΎ temci,
ΠΠ°ΡΠ΅Π³Π° ΠΏΡΠΎΠ΅ΠΊΡΡΡ Π΅ Π² ΡΠ°Π½Π΅Π½ Π΅ΡΠ°ΠΏ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ uarch-bench Π½ΡΠΌΠ° ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΌΡ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Ρ Π³ΡΠ΅ΡΠΊΠΈ - Π½Π°ΠΏΡ.
ΡΠ΅ΡΠ½ΠΎΡΡ
Π’ΠΎΠ²Π° Π΅ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Linux ΠΌΠ°ΡΠΈΠ½ΠΈ Ρ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ Intel, AMD ΠΈ ARMv8. Π‘ΡΠ·Π΄Π°Π΄Π΅Π½ Π΅ ΠΏΠΎΠ΄ Π΅Π³ΠΈΠ΄Π°ΡΠ° Π½Π° ΠΠ΅ΡΠΌΠ°Π½ΡΠΊΠΎΡΠΎ ΡΠ΅Π΄Π΅ΡΠ°Π»Π½ΠΎ ΠΌΠΈΠ½ΠΈΡΡΠ΅ΡΡΡΠ²ΠΎ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΡΠΎ ΠΈ Π½Π°ΡΡΠ½ΠΈΡΠ΅ ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°Π½ΠΈΡ ΠΏΡΠ΅Π· 2017 Π³. ΠΈ Π΅ ΠΏΡΠ΅Ρ Π²ΡΡΠ»Π΅Π½ ΠΊΡΠΌ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄.
Π‘ΡΠ΅Π΄ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° likwid ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡΠ΄Π΅Π»ΠΈΠΌ likwid-powermeter, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ RAPL ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅ Π·Π° ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ°Π½Π°ΡΠ° ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΌΠΎΡΠ½ΠΎΡΡ, ΠΊΠ°ΠΊΡΠΎ ΠΈ likwid-setFrequencies, ΠΊΠΎΠΉΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°ΡΠ΅ ΡΠ΅ΡΡΠΎΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°. ΠΠ° ΠΏΡΠ»Π΅Π½ ΡΠΏΠΈΡΡΠΊ ΠΌΠΎΠΆΠ΅ΡΠ΅
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ HPC ΠΈΠ·ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠΊΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ Ρ likwid
Π‘Π½ΠΈΠΌΠΊΠ° -
ΠΏΠ΅ΡΡ-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ
Π’ΠΎΠ·ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Linux ΡΡΡΠ²ΡΡΠΈ
Perf-tools Π΅ Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ perf_events ΠΈ ftrace. Π’Π΅Ρ Π½ΠΈΡΠ΅ ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ I/O Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡΡΠ° (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
ΠΠΎΠΌΠΎΡΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΠΊΠΎΡΡΠΎ ΠΏΡΠ΅Π΄Π²ΠΈΠΆΠ΄Π° ΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ·ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ ΡΠ΅ ΡΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ Π½Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ. Π’Ρ
llvm-mca Π±Π΅ΡΠ΅ Π²ΡΠ²Π΅Π΄Π΅Π½ ΠΏΡΠ΅Π· 2018 Π³. ΠΊΠ°ΡΠΎ ΡΠ°ΡΡ ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΠ° ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΠΈΡΠ΅ΠΌ Π² Π½Π°ΡΠΈΡΠ΅ Π±Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΈ ΡΠΎΡΠΈΠ°Π»Π½ΠΈ ΠΌΡΠ΅ΠΆΠΈ:
ΠΠ°ΠΊ Π΄Π° Π·Π°ΡΠΈΡΠΈΡΠ΅ Π²Π°ΡΠ°ΡΠ° Linux ΡΠΈΡΡΠ΅ΠΌΠ°: 10 ΡΡΠ²Π΅ΡΠ°
ΠΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΈΡΠΊΠ°: ΠΊΠ°ΠΊ Π΄Π° Π½Π΅ Π·Π°Π³ΡΠ±ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠΈ
ΠΠ½ΠΈΠ³ΠΈ Π·Π° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π²Π΅ΡΠ΅ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°Ρ ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΡ ΠΈΠ»ΠΈ ΡΠ΅ΠΏΡΡΠ²Π° ΠΏΠ»Π°Π½ΠΈΡΠ°Ρ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π°Ρ
ΠΠ·Π±ΠΎΡ: ΠΏΠ΅Ρ ΠΊΠ½ΠΈΠ³ΠΈ ΠΈ Π΅Π΄ΠΈΠ½ ΠΊΡΡΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π² ΠΌΡΠ΅ΠΆΠ°
ΠΠΈΠ΅ ΠΎΡ 1cloud.ru ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΌΠ΅ Π±Π΅Π·ΠΏΠ»Π°ΡΠ½Π° ΡΡΠ»ΡΠ³Π° "
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com