ืืžื•ืช ืžื™ื“ื” ืขื‘ื•ืจ ืฉืจืชื™ ืœื™ื ื•ืงืก: ืžื‘ื—ืจ ื›ืœื™ื ืคืชื•ื—ื™ื

ืื ื• ืžืžืฉื™ื›ื™ื ืœื“ื‘ืจ ืขืœ ื›ืœื™ื ืœื”ืขืจื›ืช ื‘ื™ืฆื•ืขื™ CPU ื‘ืžื›ื•ื ื•ืช ืœื™ื ื•ืงืก. ื”ื™ื•ื ื‘ื—ื•ืžืจ: temci, uarch-bench, likwid, perf-tools ื•-llvm-mca.

ืขื•ื“ ืžื“ื“ื™ื:

ืืžื•ืช ืžื™ื“ื” ืขื‘ื•ืจ ืฉืจืชื™ ืœื™ื ื•ืงืก: ืžื‘ื—ืจ ื›ืœื™ื ืคืชื•ื—ื™ื
ืชืžื•ื ื•ืช - ืœื•ืงืืก ื‘ืœืื–ืง - Unsplash

temci

ื–ื”ื• ื›ืœื™ ืœื”ืขืจื›ืช ื–ืžืŸ ื”ื‘ื™ืฆื•ืข ืฉืœ ืฉืชื™ ืชื•ื›ื ื™ื•ืช. ื‘ืขื™ืงืจื• ืฉืœ ื“ื‘ืจ, ื–ื” ืžืืคืฉืจ ืœืš ืœื”ืฉื•ื•ืช ืืช ื–ืžืŸ ื”ื‘ื™ืฆื•ืข ืฉืœ ืฉื ื™ ื™ื™ืฉื•ืžื™ื. ืžื—ื‘ืจ ื”ืฉื™ืจื•ืช ื”ื™ื” ืกื˜ื•ื“ื ื˜ ืžื’ืจืžื ื™ื”, ื™ื•ื”ื ืก ื‘ื›ื‘ืจื’ืจ, ืฉืคื™ืชื— ืื•ืชื• ื›ื—ืœืง ืžื”ืขื‘ื•ื“ื” ืฉืœื• ืœืชื•ืืจ ืจืืฉื•ืŸ ื‘-2016. ื”ื›ืœื™ ืฉืœ ื”ื™ื•ื ืžื•ืคืฅ ืขืœ ื™ื“ื™ ืžื•ืจืฉื” ืชื—ืช ื”ืจื™ืฉื™ื•ืŸ ื”ืฆื™ื‘ื•ืจื™ ื”ื›ืœืœื™ ืฉืœ GNU.

ื™ื•ื”ื ืก ืจืฆื” ืœื™ืฆื•ืจ ื›ืœื™ ืฉื™ืืคืฉืจ ืœื• ืœืžื“ื•ื“ ืืช ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืžืขืจื›ืช ืžื—ืฉื•ื‘ ื‘ืกื‘ื™ื‘ื” ืžื‘ื•ืงืจืช. ืœื›ืŸ, ืื—ื“ ื”ืžืืคื™ื™ื ื™ื ื”ืขื™ืงืจื™ื™ื ืฉืœ temci ื”ื•ื ื”ื™ื›ื•ืœืช ืœื”ืงื™ื ืกื‘ื™ื‘ืช ื‘ื“ื™ืงื”. ืœื“ื•ื’ืžื”, ืื—ื“ ื™ื›ื•ืœ: ืฉื ื” ืืช ื”ื’ื“ืจื•ืช ืžื ื”ืœ ืชื“ืจ ื”ืžืขื‘ื“, ื”ืฉื‘ืช ื”ื™ืคืจ-ืฉืจืฉื•ืจ ื•-L1 ื•-L2 ืžื˜ืžื•ื ื™ื, ื›ื‘ื” ืืช ืžืฆื‘ ื”ื˜ื•ืจื‘ื• ื‘ืžืขื‘ื“ื™ ืื™ื ื˜ืœ ื•ื›ื•'. ืœืฆื•ืจืš ื‘ื™ืฆื•ืข ื‘ื™ืฆื•ืขื™ื temci ืžืฉืชืžืฉืช ื‘ื›ืœื™ื ื–ืžืŸ, perf_stat ะธ getrusage.

ื›ืš ื ืจืื™ืช ื›ืœื™ ื”ืฉื™ืจื•ืช ื‘ืžืงืจื” ื”ืจืืฉื•ืŸ:

# 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 ื’ื“ืœ ื‘ื”ื“ืจื’ื” - ืœื ื›ืœ ื›ืš ืžื–ืžืŸ ืืคื™ืœื• ื ื“ื•ืŸ ื‘ื”ืขืจื•ืช ื‘-Hacker News.

uarch-bench

ื›ืœื™ ืขื–ืจ ืœื”ืขืจื›ืช ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืคื•ื ืงืฆื™ื•ืช CPU ื‘ืจืžื” ื ืžื•ื›ื”, ืฉืคื•ืชื— ืขืœ ื™ื“ื™ ื”ืžื”ื ื“ืก Travis Downs (ื˜ืจืื•ื•ื™ืก ื“ืื•ื ืก). ืœืื—ืจื•ื ื” ื”ื•ื ื›ื•ืชื‘ ื‘ืœื•ื’ ืขื ื™ื™ื ื™ ื‘ื™ืฆื•ืขื™ื ื‘-GitHub Pages, ืฉืžื“ื‘ืจ ืขืœ ื›ืœื™ ืžื™ื“ื•ื“ ื•ื“ื‘ืจื™ื ืงืฉื•ืจื™ื ืื—ืจื™ื. ื‘ืื•ืคืŸ ื›ืœืœื™, Uarch-bench ืจืง ืžืชื—ื™ืœ ืœืฆื‘ื•ืจ ืคื•ืคื•ืœืจื™ื•ืช, ืื‘ืœ ื–ื” ื›ื‘ืจ ื“ื™ ื ืคื•ืฅ ืžื•ึผื–ึฐื›ึผึธืจ ืชื•ืฉื‘ื™ ื”ืืงืจ ื ื™ื•ื– ื‘ืฉืจืฉื•ืจื™ื ื ื•ืฉืื™ื™ื ื›ื›ืœื™ ื‘ื—ื™ืจื” ืœืžื‘ื—ืŸ.

Uarch-bench ืžืืคืฉืจ ืœืš ืœื”ืขืจื™ืš ืืช ื‘ื™ืฆื•ืขื™ ื”ื–ื™ื›ืจื•ืŸ, ืžื”ื™ืจื•ืช ื˜ืขื™ื ืช ื”ื ืชื•ื ื™ื ื‘ืžืงื‘ื™ืœ ื•ืขื‘ื•ื“ืช ื”ื ื™ืงื•ื™ ื™.ืž.ืž ืจื•ืฉืžืช. ื›ื™ืฆื“ ื ืจืื•ืช ืชื•ืฆืื•ืช ื”ื”ืฉื•ื•ืื” ืฉื ื•ืฆืจื” ืขืœ ื™ื“ื™ ื”ืชื•ื›ื ื™ืช ื‘ืžืื’ืจ ื”ืจืฉืžื™ ื‘ืชื—ืชื™ืช ื”ื“ืฃ.

ืจืื•ื™ ืœืฆื™ื™ืŸ ืฉ-uarch-bench, ื›ืžื• temci, ืžืฉื‘ื™ืช ืคื•ื ืงืฆื™ื™ืช Intel Turbo Boost (ื”ื™ื ืžื’ื‘ื™ืจื” ืื•ื˜ื•ืžื˜ื™ืช ืืช ืžื”ื™ืจื•ืช ื”ืฉืขื•ืŸ ืฉืœ ื”ืžืขื‘ื“ ืชื—ืช ืขื•ืžืก) ื›ืš ืฉืชื•ืฆืื•ืช ื”ื‘ื“ื™ืงื” ื™ื”ื™ื• ืขืงื‘ื™ื•ืช.

ืœืขืช ืขืชื”, ื”ืคืจื•ื™ืงื˜ ื ืžืฆื ื‘ืฉืœื‘ื™ ืคื™ืชื•ื— ืžื•ืงื“ืžื™ื, ื›ืš ืฉืœ-uarch-bench ืื™ืŸ ืชื™ืขื•ื“ ืžืคื•ืจื˜, ื•ื”ืคืขื•ืœื” ืฉืœื• ืขืฉื•ื™ื” ืœื”ื›ื™ืœ ื‘ืื’ื™ื - ืœืžืฉืœ, ืงืฉื™ื™ื ื™ื“ื•ืขื™ื ืขื ื”ืฉืงื” ืขืœ Ryzen. ื›ืžื• ื›ืŸ, ืจืง ืืžื•ืช ืžื™ื“ื” ืขื‘ื•ืจ ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช x86 ื ืชืžื›ื•ืช. ื”ืžื—ื‘ืจ ืžื‘ื˜ื™ื— ืœื”ื•ืกื™ืฃ ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื ื•ืกืคืช ื‘ืขืชื™ื“ ื•ืžื–ืžื™ืŸ ืื•ืชืš ืœื”ืฆื˜ืจืฃ ืœืคื™ืชื•ื—.

ืœื™ืงื•ื•ื™ื“

ื–ื•ื”ื™ ืงื‘ื•ืฆื” ืฉืœ ื›ืœื™ื ืœื”ืขืจื›ืช ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืžื›ื•ื ื•ืช ืœื™ื ื•ืงืก ืขื ืžืขื‘ื“ื™ Intel, AMD ื•-ARMv8. ื”ื•ื ื ื•ืฆืจ ื‘ื—ืกื•ืช ืžืฉืจื“ ื”ื—ื™ื ื•ืš ื•ื”ืžื—ืงืจ ื”ืคื“ืจืœื™ ื”ื’ืจืžื ื™ ื‘ืฉื ืช 2017 ื•ืฉื•ื—ืจืจ ืœืงื•ื“ ืคืชื•ื—.

ื‘ื™ืŸ ื”ื›ืœื™ื ืฉืœ likwid ื ื•ื›ืœ ืœื”ื“ื’ื™ืฉ ืืช likwid-powermeter ื”ืžืฆื™ื’ ืžื™ื“ืข ืžืื•ื’ืจื™ RAPL ืขืœ ื”ื”ืกืคืง ื”ื ืฆืจืš ืขืœ ื™ื“ื™ ื”ืžืขืจื›ืช ื•ื›ืŸ likwid-setFrequencies ื”ืžืืคืฉืจ ืœืฉืœื•ื˜ ื‘ืชื“ืจ ื”ืžืขื‘ื“. ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืืช ื”ืจืฉื™ืžื” ื”ืžืœืื” ืœืžืฆื•ื ื‘ืžืื’ืจ.

ื”ื›ืœื™ ืžืฉืžืฉ ืžื”ื ื“ืกื™ื ื”ืžืขื•ืจื‘ื™ื ื‘ืžื—ืงืจ HPC. ืœืžืฉืœ, ืขื likwid ืขื•ื‘ื“ ืงื‘ื•ืฆื” ืฉืœ ืžื•ืžื—ื™ื ืžืžืจื›ื– ื”ืžื—ืฉื•ื‘ ื”ืื–ื•ืจื™ ืฉืœ ืื•ื ื™ื‘ืจืกื™ื˜ืช ืืจืœื ื’ืŸ-ื ื™ืจื ื‘ืจื’ (RRZE) ื‘ื’ืจืžื ื™ื”. ื”ื™ื ื’ื ืœื•ืงื—ืช ื—ืœืง ืคืขื™ืœ ื‘ืคื™ืชื•ื— ืžืขืจื›ืช ื”ื›ืœื™ื ื”ื–ื•.

ืืžื•ืช ืžื™ื“ื” ืขื‘ื•ืจ ืฉืจืชื™ ืœื™ื ื•ืงืก: ืžื‘ื—ืจ ื›ืœื™ื ืคืชื•ื—ื™ื
ืชืžื•ื ื•ืช - ืงืืœื ืื•ื ื’'ื•ื’ื• - Unsplash

perf-tools

ื›ืœื™ ื–ื” ืœื ื™ืชื•ื— ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืฉืจืชื™ ืœื™ื ื•ืงืก ื”ื’ื™ืฉื• ื‘ืจื ื“ืŸ ื’ืจื’. ื”ื•ื ืื—ื“ ืžื”ืžืคืชื—ื™ื DTrace - ืžืกื’ืจืช ืžืขืงื‘ ื“ื™ื ืžื™ืช ืœื ื™ืคื•ื™ ื‘ืื’ื™ื ื‘ื–ืžืŸ ืืžืช.

perf-tools ืžื‘ื•ืกืก ืขืœ ืชืชื™ ื”ืžืขืจื›ื•ืช perf_events ื•-ftrace kernel. ื›ืœื™ ื”ืฉื™ืจื•ืช ืฉืœื”ื ืžืืคืฉืจื™ื ืœืš ืœื ืชื— ื—ื‘ื™ื•ืŸ ืงืœื˜/ืคืœื˜ (iosnoop), ืœืขืงื•ื‘ ืื—ืจ ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ืงืจื™ืื•ืช ืžืขืจื›ืช (unccount, funclower, 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

ืงื”ื™ืœื” ื“ื™ ื’ื“ื•ืœื” ื ื•ืฆืจื” ืกื‘ื™ื‘ ื”ื›ืœื™ (ื›ืžืขื˜ 6 ื›ื•ื›ื‘ื™ื ื‘-GitHub). ื•ื™ืฉ ื—ื‘ืจื•ืช ืฉืžืฉืชืžืฉื•ืช ื‘ืื•ืคืŸ ืคืขื™ืœ ื‘ื›ืœื™ perf-tools, ืœืžืฉืœ ื ื˜ืคืœื™ืงืก. ืื‘ืœ ื”ื›ืœื™ ื ืžืฆื ื‘ืคื™ืชื•ื— ื•ืฉื™ื ื•ื™ ื ื•ืกืฃ (ืื ื›ื™ ืขื“ื›ื•ื ื™ื ืฉื•ื—ืจืจื• ืœืื—ืจื•ื ื” ืœืžื“ื™). ืœื›ืŸ, ืขืœื•ืœื•ืช ืœื”ืชืจื—ืฉ ืฉื’ื™ืื•ืช ื‘ืคืขื•ืœืชื• - ื”ืžื—ื‘ืจ ื›ื•ืชื‘ ืฉืœืคืขืžื™ื perf-tools ื’ื•ืจื ืœื‘ื”ืœืช ืœื™ื‘ื”.

llvm-mca

ื›ืœื™ ืขื–ืจ ืฉื—ื•ื–ื” ื›ืžื” ืžืฉืื‘ื™ ืžื—ืฉื•ื‘ ื™ื“ืจื•ืฉ ืงื•ื“ ืžื›ื•ื ื” ื‘ืžืขื‘ื“ื™ื ืฉื•ื ื™ื. ื”ื™ื ืžืขืจื™ืš ื”ื•ืจืื•ืช ืœื›ืœ ืžื—ื–ื•ืจ (IPC) ื•ื”ืขื•ืžืก ืขืœ ื”ื—ื•ืžืจื” ืฉืืคืœื™ืงืฆื™ื” ืžืกื•ื™ืžืช ืžื™ื™ืฆืจืช.

llvm-mca ื”ื•ืฆื’ ื‘ืฉื ืช 2018 ื›ื—ืœืง ืžื”ืคืจื•ื™ืงื˜ Llvm, ืืฉืจ ืžืคืชื—ืช ืžืขืจื›ืช ืื•ื ื™ื‘ืจืกืœื™ืช ืœื ื™ืชื•ื—, ื˜ืจื ืกืคื•ืจืžืฆื™ื” ื•ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ืชื•ื›ื ื™ื•ืช. ื™ื“ื•ืข ืฉืžื—ื‘ืจื™ llvm-mca ืงื™ื‘ืœื• ื”ืฉืจืื” ืžืคืชืจื•ืŸ ืœื ื™ืชื•ื— ื‘ื™ืฆื•ืขื™ ืชื•ื›ื ื” IACA ืžื‘ื™ืช ืื™ื ื˜ืœ ื•ื‘ื™ืงืฉื• ืœื™ืฆื•ืจ ืืœื˜ืจื ื˜ื™ื‘ื”. ื•ืœืคื™ ื”ืžืฉืชืžืฉื™ื, ื”ืคืœื˜ ืฉืœ ื”ื›ืœื™ (ื”ืคืจื™ืกื” ื•ื”ื›ืžื•ืช ืฉืœื”ื) ืžืžืฉ ื“ื•ืžื” ืœ-IACA - ื“ื•ื’ืžื” ื ื™ืชืŸ ืœืžืฆื•ื ื›ืืŸ. ืขื ื–ืืช, llvm-mca ืžืงื‘ืœ ืจืง ืชื—ื‘ื™ืจ AT&T, ื›ืš ืฉื›ื›ืœ ื”ื ืจืื” ืชืฆื˜ืจืš ืœื”ืฉืชืžืฉ ื‘ืžืžื™ืจื™ื ื›ื“ื™ ืœืขื‘ื•ื“ ืื™ืชื•.

ืขืœ ืžื” ืื ื—ื ื• ื›ื•ืชื‘ื™ื ื‘ื‘ืœื•ื’ื™ื ื•ื‘ืจืฉืชื•ืช ื”ื—ื‘ืจืชื™ื•ืช ืฉืœื ื•:

ืืžื•ืช ืžื™ื“ื” ืขื‘ื•ืจ ืฉืจืชื™ ืœื™ื ื•ืงืก: ืžื‘ื—ืจ ื›ืœื™ื ืคืชื•ื—ื™ื "ืžึทื—ืฆึถืœึถืช. ืžื•ื“ืœ ื•ื•ืœ ืกื˜ืจื™ื˜" ืื• ื›ื™ืฆื“ ืœื™ื™ืขืœ ืืช ืขืœื•ื™ื•ืช ื”ืขื ืŸ

ืืžื•ืช ืžื™ื“ื” ืขื‘ื•ืจ ืฉืจืชื™ ืœื™ื ื•ืงืก: ืžื‘ื—ืจ ื›ืœื™ื ืคืชื•ื—ื™ื ื›ื™ืฆื“ ืœืื‘ื˜ื— ืืช ืžืขืจื›ืช ื”ืœื™ื ื•ืงืก ืฉืœืš: 10 ื˜ื™ืคื™ื
ืืžื•ืช ืžื™ื“ื” ืขื‘ื•ืจ ืฉืจืชื™ ืœื™ื ื•ืงืก: ืžื‘ื—ืจ ื›ืœื™ื ืคืชื•ื—ื™ื ืžื–ืขื•ืจ ืกื™ื›ื•ื ื™ื: ืื™ืš ืœื ืœืื‘ื“ ืืช ื”ื ืชื•ื ื™ื ืฉืœืš

ืืžื•ืช ืžื™ื“ื” ืขื‘ื•ืจ ืฉืจืชื™ ืœื™ื ื•ืงืก: ืžื‘ื—ืจ ื›ืœื™ื ืคืชื•ื—ื™ื ืกืคืจื™ื ืœืžื™ ืฉื›ื‘ืจ ืขื•ืกืง ื‘ื ื™ื”ื•ืœ ืžืขืจื›ื•ืช ืื• ืจืง ืžืชื›ื ืŸ ืœื”ืชื—ื™ืœ
ืืžื•ืช ืžื™ื“ื” ืขื‘ื•ืจ ืฉืจืชื™ ืœื™ื ื•ืงืก: ืžื‘ื—ืจ ื›ืœื™ื ืคืชื•ื—ื™ื ืžื‘ื—ืจ: ื—ืžื™ืฉื” ืกืคืจื™ื ื•ืงื•ืจืก ืื—ื“ ืขืœ ืจืฉืชื•ืช

ืืžื•ืช ืžื™ื“ื” ืขื‘ื•ืจ ืฉืจืชื™ ืœื™ื ื•ืงืก: ืžื‘ื—ืจ ื›ืœื™ื ืคืชื•ื—ื™ืืื ื• ื‘-1cloud.ru ืžืฆื™ืขื™ื ืฉื™ืจื•ืช ื‘ื—ื™ื ื "ืื™ืจื•ื— DNS" ืืชื” ื™ื›ื•ืœ ืœื ื”ืœ ืจืฉื•ืžื•ืช DNS ื‘ื—ืฉื‘ื•ืŸ ืื™ืฉื™ ื™ื—ื™ื“.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”