ΠΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΠΌΠ΅ Π΄Π° ΡΠ°Π·ΠΊΠ°Π·Π²Π°ΠΌΠ΅ Π·Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π·Π° ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° CPU Π½Π° Linux ΠΌΠ°ΡΠΈΠ½ΠΈ. ΠΠ½Π΅Ρ Π² ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°: temci, uarch-bench, likwid, perf-tools ΠΈ llvm-mca.
ΠΠΎΠ²Π΅ΡΠ΅ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅:
Π‘Π½ΠΈΠΌΠΊΠ° β β Unsplash
Π’ΠΎΠ²Π° Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ. ΠΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ, ΡΠΎΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΡΡΠ°Π²Π½ΡΡ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ²ΡΠΎΡΡΡ Π½Π° ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° Π΅ ΡΡΡΠ΄Π΅Π½ΡΡΡ ΠΎΡ ΠΠ΅ΡΠΌΠ°Π½ΠΈΡ ΠΠΎΡ Π°Π½Π΅Ρ ΠΠ΅Ρ Π±Π΅ΡΠ³Π΅Ρ, ΠΊΠΎΠΉΡΠΎ Ρ Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΈΠ» Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π±Π°ΠΊΠ°Π»Π°Π²ΡΡΡΠΊΠ° Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½Π° ΡΠ°Π±ΠΎΡΠ° ΠΏΡΠ΅Π· 2016 Π³ΠΎΠ΄ΠΈΠ½Π°. ΠΠ½Π΅Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΡ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π· GNU General Public License.
ΠΠΎΡ Π°Π½Π΅Ρ Π΅ ΠΈΡΠΊΠ°Π» Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΈΠ·ΠΌΠ΅ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΈΠ·ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π² ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½Π° ΡΡΠ΅Π΄Π°. ΠΠ°ΡΠΎΠ²Π° Π΅Π΄Π½Π° ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° temci Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈ ΡΠ΅ΡΡΠΎΠ²Π°ΡΠ° ΡΡΠ΅Π΄Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, : Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠ° Π·Π° ΡΠ΅ΡΡΠΎΡΠ° Π½Π° CPU, Π΄Π° ΡΠ΅ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Ρ ΠΈ ΠΊΠ΅ΡΠΎΠ²Π΅ΡΠ΅ L1 ΠΈ L2, Π΄Π° ΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠΈ ΡΠ΅ΠΆΠΈΠΌΡΡ Π½Π° ΡΡΡΠ±ΠΎ Π½Π° Intel ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈΡΠ΅ ΠΈ Π΄Ρ. ΠΠ° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈΠ½Π³Π° 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 ΠΎΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
Π‘ΡΠ΅Π΄ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈΡΠ΅ Π½Π° temci Π΅ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° "ΠΌΠ»Π°Π΄ΠΎΡΡ". ΠΠΎΡΠ°Π΄ΠΈ ΡΠΎΠ²Π° ΡΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π° Ρ Π°ΡΠ΄ΡΠ΅ΡΠ° ΠΈ ΡΠΎΡΡΡΠ΅ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΡΠ΄Π½ΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΠΎΠ΄ macOS, Π° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Ρ ARM ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½ΡΠΊΠΎΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ. Π Π±ΡΠ΄Π΅ΡΠ΅ ΡΠΈΡΡΠ°ΡΠΈΡΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π°Π²ΡΠΎΡΡΡ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π° Π±ΡΠΎΡΡ Π½Π° Π·Π²Π΅Π·Π΄ΠΈΡΠ΅ Π² GitHub ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ Π½Π°ΡΠ°ΡΡΠ²Π° β ΠΏΡΠ΅Π΄ΠΈ Π½Π΅ΠΎΡΠ΄Π°Π²Π½Π° temci Π΄ΠΎΡΠΈ Π½Π° Hacker News.
Π£ΡΠΈΠ»ΠΈΡΠ° Π·Π° ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Π½ΠΈΡΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° CPU, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½Π° ΠΎΡ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ° Π’ΡΠ΅Π²ΠΈΡ ΠΠ°ΡΠ½Ρ (). ΠΡΡΠΊΠΎΡΠΎ ΡΠΎΠΉ Π²ΠΎΠ΄ΠΈ ΡΠ²ΠΎΡ Π±Π»ΠΎΠ³ Π½Π° GitHub Pages, Π² ΠΊΠΎΠΉΡΠΎ ΡΠ°Π·ΠΊΠ°Π·Π²Π° Π·Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈΠ½Π³ ΠΈ ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΡΡ Π½Π΅ΡΠ°. ΠΠ±ΡΠΎ Π²Π·Π΅ΡΠΎ, uarch-bench Π²ΡΠ΅ ΠΎΡΠ΅ Π΅Π΄Π²Π° Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° Π½Π°Π±ΠΈΡΠ° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡ, Π½ΠΎ Π²Π΅ΡΠ΅ Π΄ΠΎΡΡΠ° ΡΠ΅ΡΡΠΎ ΠΏΠΎΠΏΠ°Π΄Π° Π² ΡΠ΅ΠΌΠ°ΡΠΈΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΎΠ²Π΅ Π½Π° Hacker News ΠΊΠ°ΡΠΎ ΠΎΡΠ½ΠΎΠ²Π΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈΠ½Π³.
Uarch-bench ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΎΡΠ΅Π½ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΏΠΎ ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° . Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈΠ½Π³Π°, Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ Π² ΠΊΡΠ°Ρ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°.
ΠΠ°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ uarch-bench, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° temci, ΡΡΠ½ΠΊΡΠΈΡΡΠ° Intel Turbo Boost (ΠΊΠΎΡΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° ΡΠ°ΠΊΡΠΎΠ²Π°ΡΠ° ΡΠ΅ΡΡΠΎΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° ΠΏΡΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅), Π·Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ.
ΠΡΠ΅ ΠΎΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡΡ Π΅ Π² ΡΠ°Π½Π½ΠΈΡΠ΅ Π΅ΡΠ°ΠΏΠΈ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ uarch-bench Π½ΡΠΌΠ° ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, Π° Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΌΡ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ Π±ΡΠ³ΠΎΠ²Π΅ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Ryzen. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ°, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ΅ ΡΠ°ΠΌΠΎ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅ Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ x86. ΠΠ²ΡΠΎΡΡΡ ΠΎΠ±Π΅ΡΠ°Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠΈ Π² Π±ΡΠ΄Π΅ΡΠ΅ ΠΈ ΠΊΠ°Π½ΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΡΠ΅Π΄ΠΈΠ½ΡΡ ΠΊΡΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ°.
Π’ΠΎΠ²Π° Π΅ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Linux ΠΌΠ°ΡΠΈΠ½ΠΈ Ρ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ Intel, AMD ΠΈ ARMv8. Π‘ΡΠ·Π΄Π°Π΄Π΅Π½ Π΅ ΠΏΠΎΠ΄ Π΅Π³ΠΈΠ΄Π°ΡΠ° Π½Π° Π€Π΅Π΄Π΅ΡΠ°Π»Π½ΠΎΡΠΎ ΠΌΠΈΠ½ΠΈΡΡΠ΅ΡΡΡΠ²ΠΎ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΡΠΎ ΠΈ Π½Π°ΡΡΠ½ΠΈΡΠ΅ ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°Π½ΠΈΡ Π½Π° ΠΠ΅ΡΠΌΠ°Π½ΠΈΡ ΠΏΡΠ΅Π· 2017 Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ Π² open source.
Π‘ΡΠ΅Π΄ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° likwid ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ΄ΡΠ΅ΡΡΠ°Π΅ΠΌ likwid-powermeter, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ RAPL ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅ Π·Π° ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ°Π½Π°ΡΠ° ΠΌΠΎΡΠ½ΠΎΡΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, Π° ΡΡΡΠΎ ΠΈ likwid-setFrequencies β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ° ΠΊΠΎΠ½ΡΡΠΎΠ» Π²ΡΡΡ Ρ ΡΠ°ΠΊΡΠΎΠ²ΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΡΠΈ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ°. ΠΡΠ»Π½ΠΈΡΡ ΡΠΏΠΈΡΡΠΊ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° .
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈ, Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΡΠΈ ΡΠ΅ Ρ ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°Π½ΠΈΡ Π² ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° HPC. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ likwid Π³ΡΡΠΏΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΈ ΠΎΡ Π Π΅Π³ΠΈΠΎΠ½Π°Π»Π½ΠΈΡ ΠΈΠ·ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π΅Π½ ΡΠ΅Π½ΡΡΡ Π½Π° ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ° Π² ΠΡΠ»Π°Π½Π³Π΅Π½ β ΠΡΡΠ½Π±Π΅ΡΠ³ (RRZE) Π² ΠΠ΅ΡΠΌΠ°Π½ΠΈΡ. Π’Π΅ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΡΠ°ΡΡΠ²Π°Ρ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΠΎΠ·ΠΈ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ.

Π‘Π½ΠΈΠΌΠΊΠ° β β Unsplash
Π’ΠΎΠ·ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΅ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Linux ΡΡΡΠ²ΡΡΠΈ ΠΡΠ΅Π½Π΄Π°Π½ ΠΡΠ΅Π³ (Brendan Gregg). Π’ΠΎΠΉ Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ - Π½Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Π·Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΡΡΠ°ΡΠΈΡΠ²Π°Π½Π΅ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠ΅Π°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅.
Π ΠΎΡΠ½ΠΎΠ²Π°ΡΠ° Π½Π° 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
ΠΠΊΠΎΠ»ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ΡΠ΅ Π΅ ΡΠΎΡΠΌΠΈΡΠ°Π»ΠΎ Π΄ΠΎΡΡΠ° ΠΎΠ±ΡΠΈΡΠ½ΠΎ ΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ (). Π ΠΈΠΌΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ perf-tools, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ . ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΡ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ΅ Π΄ΠΎΡΠ°Π·Π²ΠΈΠ²Π° ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ° (Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π½Π°ΠΏΠΎΡΠ»Π΅Π΄ΡΠΊ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈΡΠ΅ ΠΈΠ·Π»ΠΈΠ·Π°Ρ Π΄ΠΎΡΡΠ° ΡΡΠ΄ΠΊΠΎ). ΠΠΎΡΠ°Π΄ΠΈ ΡΠΎΠ²Π° Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΌΡ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Ρ Π³ΡΠ΅ΡΠΊΠΈ β Π°Π²ΡΠΎΡΡΡ ΠΏΠΈΡΠ΅, ΡΠ΅ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° perf-tools ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π° kernel panic.
Π£ΡΠΈΠ»ΠΈΡΠ°, ΠΊΠΎΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π²Π° ΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ·ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ CPU. Π’Ρ Instructions Per Cycle () ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Ρ Π°ΡΠ΄ΡΠ΅ΡΠ°, ΠΊΠΎΠ΅ΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π΄Π°Π΄Π΅Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
llvm-mca Π±Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ ΠΏΡΠ΅Π· 2018 Π³ΠΎΠ΄ΠΈΠ½Π° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° , ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π° Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° Π°Π½Π°Π»ΠΈΠ·, ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ. ΠΠ·Π²Π΅ΡΡΠ½ΠΎ Π΅, ΡΠ΅ Π°Π²ΡΠΎΡΠΈΡΠ΅ Π½Π° llvm-mca ΡΠ° Π²Π΄ΡΡ Π½ΠΎΠ²Π΅Π½ΠΈ ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠΎΡΡΡΠ΅Ρ ΠΈ ΡΠ° ΡΠ΅ ΡΡΡΠ΅ΠΌΠ΅Π»ΠΈ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π°Ρ Π½Π΅Π³ΠΎΠ²Π° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°. Π ΡΠΏΠΎΡΠ΅Π΄ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅, ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° (ΡΠ΅Ρ Π½ΠΈΡΡ ΡΠΎΡΠΌΠ°Ρ ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ) Π½Π°ΠΈΡΡΠΈΠ½Π° Π½Π°ΠΏΠΎΠΌΠ½ΡΡ Π½Π° IACA β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ . ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π° llvm-mca ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΡΠ°ΠΌΠΎ , ΡΠ°ΠΊΠ° ΡΠ΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΎΡΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ Π½Π΅Π³ΠΎ.
ΠΠ° ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΠΈΡΠ΅ΠΌ Π² Π½Π°ΡΠΈΡΠ΅ Π±Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΈ ΡΠΎΡΠΈΠ°Π»Π½ΠΈ ΠΌΡΠ΅ΠΆΠΈ:
![]()
![]()
![]()
![]()
![]()
ΠΠΈΠ΅ Π² 1cloud.ru ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΌΠ΅ Π±Π΅Π·ΠΏΠ»Π°ΡΠ½Π° ΡΡΠ»ΡΠ³Π° «». Π£ΠΏΡΠ°Π²Π»ΡΠ²Π°ΠΉΡΠ΅ DNS Π·Π°ΠΏΠΈΡΠΈΡΠ΅ ΡΠΈ Π² Π½Π°ΡΠΈΡ Π΅Π΄ΠΈΠ½Π΅Π½ Π»ΠΈΡΠ΅Π½ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
