ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΎΠ± ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Ρ Π΄Π»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ CPU Π½Π° Linux-ΠΌΠ°ΡΠΈΠ½Π°Ρ . Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π² ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π΅: temci, uarch-bench, likwid, perf-tools ΠΈ llvm-mca.
ΠΠΎΠ»ΡΡΠ΅ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²:
Π€ΠΎΡΠΎ β β Unsplash
ΠΡΠΎ β ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠΎ ΡΡΡΠΈ, ΠΎΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠ°Π²Π½ΠΈΡΡ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π²ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ²ΡΠΎΡΠΎΠΌ ΡΡΠΈΠ»ΠΈΡΡ Π²ΡΡΡΡΠΏΠΈΠ» ΡΡΡΠ΄Π΅Π½Ρ ΠΈΠ· ΠΠ΅ΡΠΌΠ°Π½ΠΈΠΈ ΠΠΎΡ Π°Π½Π½Π΅Ρ ΠΠ΅Ρ Π±Π΅ΡΠ³Π΅Ρ (Johannes Bechberger), ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π» Π΅Π΅ Π² ΡΠ°ΠΌΠΊΠ°Ρ Π±Π°ΠΊΠ°Π»Π°Π²ΡΡΠΊΠΎΠΉ Π²ΡΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π² 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 Π² ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ΅Π΄Π°Ρ ΠΊΠ°ΠΊ go-to ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈΠ½Π³Π°.
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
