Linux เชธเชฐเซเชตเชฐเซเชธ เชฎเชพเชŸเซ‡ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•: เช“เชชเชจ เชŸเซ‚เชฒเซเชธเชจเซ€ เชชเชธเช‚เชฆเช—เซ€

เช…เชฎเซ‡ Linux เชฎเชถเซ€เชจเซ‹ เชชเชฐ CPU เชชเซเชฐเชฆเชฐเซเชถเชจเชจเซเช‚ เชฎเซ‚เชฒเซเชฏเชพเช‚เช•เชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชธเชพเชงเชจเซ‹ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเชตเชพเชจเซเช‚ เชšเชพเชฒเซ เชฐเชพเช–เซ€เช เช›เซ€เช. เช†เชœเซ‡ เชธเชพเชฎเช—เซเชฐเซ€เชฎเชพเช‚: temci, uarch-bench, likwid, perf-tools เช…เชจเซ‡ llvm-mca.

เชตเชงเซ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•:

Linux เชธเชฐเซเชตเชฐเซเชธ เชฎเชพเชŸเซ‡ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•: เช“เชชเชจ เชŸเซ‚เชฒเซเชธเชจเซ€ เชชเชธเช‚เชฆเช—เซ€
- เชฒเซเช•เชพเชธ เชฌเซเชฒเซ‡เชเซ‡เช• - เช…เชจเชธเซเชชเซเชฒเซ‡เชถ

temci

เช† เชฌเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเชพ เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจ เชธเชฎเชฏเชจเซ‹ เช…เช‚เชฆเชพเชœ เช•เชพเชขเชตเชพเชจเซเช‚ เชเช• เชธเชพเชงเชจ เช›เซ‡. เช…เชจเชฟเชตเชพเชฐเซเชฏเชชเชฃเซ‡, เชคเซ‡ เชคเชฎเชจเซ‡ เชฌเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เช…เชฎเชฒเชจเชพ เชธเชฎเชฏเชจเซ€ เชคเซเชฒเชจเชพ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เช‰เชชเชฏเซ‹เช—เชฟเชคเชพเชจเชพ เชฒเซ‡เช–เช• เชœเชฐเซเชฎเชจเซ€เชจเชพ เชตเชฟเชฆเซเชฏเชพเชฐเซเชฅเซ€, เชœเซ‹เชนเชพเชจเซเชธ เชฌเซ‡เชšเชฌเชฐเซเช—เชฐ เชนเชคเชพ, เชœเซ‡เชฎเชฃเซ‡ เชคเซ‡เชจเซ‡ 2016 เชฎเชพเช‚ เชคเซ‡เชฎเชจเชพ เช…เช‚เชกเชฐเช—เซเชฐเซ‡เชœเซเชฏเซเชเชŸ เชฅเซ€เชธเซ€เชธเชจเชพ เชญเชพเช— เชฐเซ‚เชชเซ‡ เชตเชฟเช•เชธเชพเชตเซเชฏเซเช‚ เชนเชคเซเช‚. เช†เชœเชจเซเช‚ เชธเชพเชงเชจ เชฆเซเชตเชพเชฐเชพ เชตเชฟเชคเชฐเชฟเชค GNU เชœเชจเชฐเชฒ เชชเชฌเซเชฒเชฟเช• เชฒเชพเชฏเชธเชจเซเชธ เชนเซ‡เช เชณ เชฒเชพเช‡เชธเชจเซเชธ.

เชœเซ‹เชนเชพเชจเซเชธ เชเช• เชเชตเซเช‚ เชธเชพเชงเชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเช‚เช—เชคเซ‹ เชนเชคเซ‹ เชœเซ‡ เชคเซ‡เชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช‚ เช•เชฎเซเชชเซเชฏเซเชŸเชฟเช‚เช— เชธเชฟเชธเซเชŸเชฎเชจเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€เชจเซ‡ เชฎเชพเชชเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡. เชคเซ‡เชฅเซ€, เชŸเซ‡เชฎเซเชธเซ€เชจเซ€ เชฎเซเช–เซเชฏ เชฒเชพเช•เซเชทเชฃเชฟเช•เชคเชพเช“เชฎเชพเช‚เชจเซ€ เชเช• เชชเชฐเซ€เช•เซเชทเชฃ เชตเชพเชคเชพเชตเชฐเชฃ เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เช›เซ‡. เชฆเชพเช–เซเชฒเชพ เชคเชฐเซ€เช•เซ‡, เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹: CPU เชซเซเชฐเซ€เช•เซเชตเชจเซเชธเซ€ เชฎเซ‡เชจเซ‡เชœเชฐ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชฌเชฆเชฒเซ‹, เช…เช•เซเชทเชฎ เช•เชฐเซ‹ เชนเชพเชฏเชชเชฐ-เชฅเซเชฐเซ‡เชกเซ€เช‚เช— เช…เชจเซ‡ L1 เช…เชจเซ‡ L2 เช•เซ‡เชถ, เช‡เชจเซเชŸเซ‡เชฒ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐเซเชธ เชตเช—เซ‡เชฐเซ‡ เชชเชฐ เชŸเชฐเซเชฌเซ‹ เชฎเซ‹เชก เชฌเช‚เชง เช•เชฐเซ‹. เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•เชฟเช‚เช— เชฎเชพเชŸเซ‡ เชŸเซ‡เชฎเซเชธเซ€ เชŸเซ‚เชฒเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เชธเชฎเชฏ, perf_stat ะธ เช—เซ‡เชŸเชฐเชธเซ‡เชœ.

เชชเซเชฐเชฅเชฎ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ เช†เชจเชพ เชœเซ‡เชตเซ€ เชฆเซ‡เช–เชพเชฏ เช›เซ‡:

# 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

เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•เชฟเช‚เช— เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเชพ เช†เชงเชพเชฐเซ‡, เชธเชฟเชธเซเชŸเชฎ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซเช•เซ‚เชณ เช…เชนเซ‡เชตเชพเชฒ เช†เช•เซƒเชคเชฟเช“, เช•เซ‹เชทเซเชŸเช•เซ‹ เช…เชจเซ‡ เช†เชฒเซ‡เช– เชธเชพเชฅเซ‡, เชœเซ‡ เชŸเซ‡เชฎเซเชธเซ€เชจเซ‡ เชธเชฎเชพเชจ เช‰เช•เซ‡เชฒเซ‹เชฅเซ€ เช…เชฒเช— เชชเชพเชกเซ‡ เช›เซ‡.

เชŸเซ‡เชฎเซเชธเซ€เชจเซ€ เช–เชพเชฎเซ€เช“เชฎเชพเช‚, เชคเซ‡เชจเซเช‚ "เชฏเซเชตเชพ" เชฌเชนเชพเชฐ เช†เชตเซ‡ เช›เซ‡. เช† เช•เชพเชฐเชฃเซ‡ เชคเซ‡เชฎเชฃเซ‡ เชฌเชงเซเช‚ เช†เชงเชพเชฐเชญเซ‚เชค เชจเชฅเซ€ เชนเชพเชฐเซเชกเชตเซ‡เชฐ เช…เชจเซ‡ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเซ‹. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, macOS เชชเชฐ เชšเชฒเชพเชตเชตเซเช‚ เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡, เช…เชจเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชธเซเชตเชฟเชงเชพเช“ ARM-เช†เชงเชพเชฐเชฟเชค เชธเชฟเชธเซเชŸเชฎ เชชเชฐ เช‰เชชเชฒเชฌเซเชง เชจเชฅเซ€. เชญเชตเชฟเชทเซเชฏเชฎเชพเช‚, เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟ เชฌเชฆเชฒเชพเชˆ เชถเช•เซ‡ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชฒเซ‡เช–เช• เชธเช•เซเชฐเชฟเชฏเชชเชฃเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชตเชฟเช•เชธเชพเชตเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡, เช…เชจเซ‡ GitHub เชชเชฐ เชคเชพเชฐเชพเช“เชจเซ€ เชธเช‚เช–เซเชฏเชพ เชงเซ€เชฎเซ‡ เชงเซ€เชฎเซ‡ เชตเชงเซ€ เชฐเชนเซ€ เช›เซ‡ - เช†เชŸเชฒเชพ เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏ เชชเชนเซ‡เชฒเชพ เชชเชฃ เชจเชฅเซ€. เชŸเชฟเชชเซเชชเชฃเซ€เช“เชฎเชพเช‚ เชšเชฐเซเชšเชพ เช•เชฐเซ€ เชนเซ‡เช•เชฐ เชธเชฎเชพเชšเชพเชฐ เชชเชฐ.

uarch-เชฌเซ‡เชจเซเชš

เชเชจเซเชœเชฟเชจเชฟเชฏเชฐ เชŸเซเชฐเซ‡เชตเชฟเชธ เชกเชพเช‰เชจเซเชธ (เชŸเซเชฐเซ‡เชตเชฟเชธ เชกเชพเช‰เชจเซเชธ). เชคเชพเชœเซ‡เชคเชฐเชฎเชพเช‚ เชคเซ‡ เชฌเซเชฒเซ‹เช—เชฟเช‚เช— เช•เชฐเซ€ เชฐเชนเซเชฏเซ‹ เช›เซ‡ เชชเซเชฐเชฆเชฐเซเชถเชจ เชฌเชพเชฌเชคเซ‹ GitHub เชชเซƒเชทเซเช เซ‹ เชชเชฐ, เชœเซ‡ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•เชฟเช‚เช— เชธเชพเชงเชจเซ‹ เช…เชจเซ‡ เช…เชจเซเชฏ เชธเช‚เชฌเช‚เชงเชฟเชค เชตเชธเซเชคเซเช“ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ‡ เช›เซ‡. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, uarch-bench เชฎเชพเชคเซเชฐ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏเชคเชพ เชฎเซ‡เชณเชตเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เช˜เชฃเซ€ เชตเชพเชฐ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซเชฏเซ‹ เช›เซ‡ เชนเซ‡เช•เชฐ เชจเซเชฏเซ‚เชเชจเชพ เชฐเชนเซ‡เชตเชพเชธเซ€เช“ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•เชฟเช‚เช— เชฎเชพเชŸเซ‡ เช—เซ‹-เชŸเซ‚ เชŸเซ‚เชฒ เชคเชฐเซ€เช•เซ‡ เชฅเซ€เชฎเซ‡เชŸเชฟเช• เชฅเซเชฐเซ‡เชกเชฎเชพเช‚.

Uarch-bench เชคเชฎเชจเซ‡ เชฎเซ‡เชฎเชฐเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€, เชธเชฎเชพเช‚เชคเชฐ เชกเซ‡เชŸเชพ เชฒเซ‹เชกเชฟเช‚เช— เชเชกเชช เช…เชจเซ‡ เชธเชซเชพเชˆ เช•เชพเชฐเซเชฏเชจเซเช‚ เชฎเซ‚เชฒเซเชฏเชพเช‚เช•เชจ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡ YMM เชฐเชœเซ€เชธเซเชŸเชฐ. เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชฆเซเชตเชพเชฐเชพ เชœเชจเชฐเซ‡เชŸ เชฅเชฏเซ‡เชฒ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•เชฟเช‚เช— เชชเชฐเชฟเชฃเชพเชฎเซ‹ เช•เซ‡เชตเชพ เชฆเซ‡เช–เชพเชฏ เช›เซ‡ เชคเซ‡ เชถเซ‹เชงเซ€ เชถเช•เชพเชฏ เช›เซ‡ เชธเชคเซเชคเชพเชตเชพเชฐ เชญเช‚เชกเชพเชฐเชฎเชพเช‚ เชชเซƒเชทเซเช เชจเชพ เชคเชณเชฟเชฏเซ‡.

เชคเซ‡ เชจเซ‹เช‚เชงเชตเซเช‚ เชฏเซ‹เช—เซเชฏ เช›เซ‡ เช•เซ‡ uarch-เชฌเซ‡เชจเซเชš, เชŸเซ‡เชฎเซเชธเซ€เชจเซ€ เชœเซ‡เชฎ, เชกเชฟเชธเซเช•เชจเซ‡เช•เซเชŸ เช•เชฐเซ‡ เช›เซ‡ เช‡เชจเซเชŸเซ‡เชฒ เชŸเชฐเซเชฌเซ‹ เชฌเซ‚เชธเซเชŸ เชซเช‚เช•เซเชถเชจ (เชคเซ‡ เชฒเซ‹เชก เชนเซ‡เช เชณ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐเชจเซ€ เช˜เชกเชฟเชฏเชพเชณเชจเซ€ เชเชกเชชเชจเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เชตเชงเชพเชฐเซ‡ เช›เซ‡) เชœเซ‡เชฅเซ€ เชชเชฐเซ€เช•เซเชทเชฃ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชธเซเชธเช‚เช—เชค เชฐเชนเซ‡.

เชนเชฎเชฃเชพเช‚ เชฎเชพเชŸเซ‡, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชตเชฟเช•เชพเชธเชจเชพ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชคเชฌเช•เซเช•เชพเชฎเชพเช‚ เช›เซ‡, เชคเซ‡เชฅเซ€ uarch-bench เชชเชพเชธเซ‡ เชตเชฟเช—เชคเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชจเชฅเซ€, เช…เชจเซ‡ เชคเซ‡เชจเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€เชฎเชพเช‚ เชญเซ‚เชฒเซ‹ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ - เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“ เชœเชพเชฃเซ€เชคเซ€ เช›เซ‡ Ryzen เชชเชฐ เชฒเซ‹เชจเซเชš เชธเชพเชฅเซ‡. เช‰เชชเชฐเชพเช‚เชค, x86 เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐ เชฎเชพเชŸเซ‡ เชฎเชพเชคเซเชฐ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช• เชธเชชเซ‹เชฐเซเชŸเซ‡เชก เช›เซ‡. เชฒเซ‡เช–เช• เชญเชตเชฟเชทเซเชฏเชฎเชพเช‚ เชตเชงเซ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เช‰เชฎเซ‡เชฐเชตเชพเชจเซเช‚ เชตเชšเชจ เช†เชชเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเชจเซ‡ เชตเชฟเช•เชพเชธเชฎเชพเช‚ เชœเซ‹เชกเชพเชตเชพ เชฎเชพเชŸเซ‡ เช†เชฎเช‚เชคเซเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡.

เชชเซเชฐเชตเชพเชนเซ€

Intel, AMD เช…เชจเซ‡ ARMv8 เชชเซเชฐเซ‹เชธเซ‡เชธเชฐเซ‹ เชธเชพเชฅเซ‡ Linux เชฎเชถเซ€เชจเซ‹เชจเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€เชจเซเช‚ เชฎเซ‚เชฒเซเชฏเชพเช‚เช•เชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช† เชธเชพเชงเชจเซ‹เชจเซ‹ เชธเชฎเซ‚เชน เช›เซ‡. เชคเซ‡ 2017 เชฎเชพเช‚ เชœเชฐเซเชฎเชจ เชซเซ‡เชกเชฐเชฒ เชถเชฟเช•เซเชทเชฃ เช…เชจเซ‡ เชธเช‚เชถเซ‹เชงเชจ เชฎเช‚เชคเซเชฐเชพเชฒเชฏเชจเชพ เช†เชถเซเชฐเชฏ เชนเซ‡เช เชณ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚ เช…เชจเซ‡ เช“เชชเชจ เชธเซ‹เชฐเซเชธเชฎเชพเช‚ เชฌเชนเชพเชฐ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚.

likwid เชŸเซ‚เชฒเซเชธเชฎเชพเช‚, เช…เชฎเซ‡ likwid-powermeterเชจเซ‡ เชนเชพเช‡เชฒเชพเช‡เชŸ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช, เชœเซ‡ RAPL เชฐเชœเชฟเชธเซเชŸเชฐเชฎเชพเช‚เชฅเซ€ เชธเชฟเชธเซเชŸเชฎ เชฆเซเชตเชพเชฐเชพ เชตเชชเชฐเชพเชถเชฎเชพเช‚ เชฒเซ‡เชตเชพเชฏเซ‡เชฒเซ€ เชชเชพเชตเชฐ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ‡ เช›เซ‡, เชคเซ‡เชฎเชœ likwid-setFrequencies, เชœเซ‡ เชคเชฎเชจเซ‡ เชชเซเชฐเซ‹เชธเซ‡เชธเชฐเชจเซ€ เช†เชตเชฐเซเชคเชจเชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชคเชฎเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซ‚เชšเชฟ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชถเซ‹เชงเซ‹.

เชŸเซ‚เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— HPC เชธเช‚เชถเซ‹เชงเชจ เชธเชพเชฅเซ‡ เชธเช‚เช•เชณเชพเชฏเซ‡เชฒเชพ เชเชจเซเชœเชฟเชจเชฟเชฏเชฐเซ‹ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, likwid เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ เชœเชฐเซเชฎเชจเซ€เชฎเชพเช‚ เชฏเซเชจเชฟเชตเชฐเซเชธเชฟเชŸเซ€ เช“เชซ เชเชฐเซเชฒเชพเช‚เช—เซ‡เชจ-เชจเซเชฏเซเชฐเซ‡เชฎเชฌเชฐเซเช— (RRZE) เชจเชพ เชชเซเชฐเชพเชฆเซ‡เชถเชฟเช• เช•เชฎเซเชชเซเชฏเซเชŸเชฟเช‚เช— เชธเซ‡เชจเซเชŸเชฐเชจเชพ เชจเชฟเชทเซเชฃเชพเชคเซ‹เชจเซเช‚ เชœเซ‚เชฅ. เชคเซ‡ เชŸเซ‚เชฒเซเชธเชจเชพ เช† เชธเซ‡เชŸเชจเชพ เชตเชฟเช•เชพเชธเชฎเชพเช‚ เชชเชฃ เชธเช•เซเชฐเชฟเชฏ เชญเชพเช— เชฒเซ‡ เช›เซ‡.

Linux เชธเชฐเซเชตเชฐเซเชธ เชฎเชพเชŸเซ‡ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•: เช“เชชเชจ เชŸเซ‚เชฒเซเชธเชจเซ€ เชชเชธเช‚เชฆเช—เซ€
- เช•เซเชฒเซ‡เชฎ เช“เชจเซ‹เชœเซ‡เช—เซเชฏเซเช“ - เช…เชจเชธเซเชชเซเชฒเซ‡เชถ

perf-เชŸเซ‚เชฒเซเชธ

Linux เชธเชฐเซเชตเชฐเชจเชพ เชชเซเชฐเชฆเชฐเซเชถเชจเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เช† เชธเชพเชงเชจ เชฐเชœเซ‚เช†เชค เช•เชฐเซ€ เชฌเซเชฐเซ‡เชจเซเชกเชจ เช—เซเชฐเซ‡เช—. เชคเซ‡ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เชฎเชพเช‚เชจเซ‹ เชเช• เช›เซ‡ เชกเซ€เชŸเซเชฐเซ‡เชธ - เชฐเซ€เช…เชฒ เชŸเชพเช‡เชฎเชฎเชพเช‚ เชกเซ€เชฌเช—เซ€เช‚เช— เชเชชเซเชฒเซ€เช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชกเชพเชฏเชจเซ‡เชฎเชฟเช• เชŸเซเชฐเซ‡เชธเซ€เช‚เช— เชซเซเชฐเซ‡เชฎเชตเชฐเซเช•.

perf-tools perf_events เช…เชจเซ‡ ftrace เช•เชฐเซเชจเชฒ เชธเชฌเชธเชฟเชธเซเชŸเชฎ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡. เชคเซ‡เชฎเชจเซ€ เช‰เชชเชฏเซ‹เช—เชฟเชคเชพเช“ เชคเชฎเชจเซ‡ I/O เชฒเซ‡เชŸเชจเซเชธเซ€ (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

เชธเชพเชงเชจเชจเซ€ เช†เชธเชชเชพเชธ เชเช•เชฆเชฎ เชฎเซ‹เชŸเซ‹ เชธเชฎเซเชฆเชพเชฏ เชฐเชšเชพเชฏเซ‹ เช›เซ‡ (GitHub เชชเชฐ เชฒเช—เชญเช— 6 เชนเชœเชพเชฐ เชธเซเชŸเชพเชฐเซเชธ). เช…เชจเซ‡ เชเชตเซ€ เช•เช‚เชชเชจเซ€เช“ เช›เซ‡ เชœเซ‡ เชธเช•เซเชฐเชฟเชฏเชชเชฃเซ‡ perf-เชŸเซ‚เชฒเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ Netflix. เชชเชฐเช‚เชคเซ เชŸเซ‚เชฒ เชตเชงเซ เชตเชฟเช•เชธเชฟเชค เช…เชจเซ‡ เชธเช‚เชถเซ‹เชงเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ (เชœเซ‹เช•เซ‡ เช…เชชเชกเซ‡เชŸเซเชธ เชคเชพเชœเซ‡เชคเชฐเชฎเชพเช‚ เชœ เชญเชพเช—เซเชฏเซ‡ เชœ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡). เชคเซ‡เชฅเซ€, เชคเซ‡เชจเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€เชฎเชพเช‚ เชญเซ‚เชฒเซ‹ เช†เชตเซ€ เชถเช•เซ‡ เช›เซ‡ - เชฒเซ‡เช–เช• เชฒเช–เซ‡ เช›เซ‡ เช•เซ‡ เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชชเชฐเซเชซ-เชŸเซ‚เชฒเซเชธ เช•เชฐเซเชจเชฒ เช—เชญเชฐเชพเชŸเชจเซเช‚ เช•เชพเชฐเชฃ เชฌเชจเซ‡ เช›เซ‡.

llvm-mca

เชเช• เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ เชœเซ‡ เช†เช—เชพเชนเซ€ เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ เชตเชฟเชตเชฟเชง CPUs เชชเชฐ เช•เซ‡เชŸเชฒเชพ เช•เชฎเซเชชเซเชฏเซเชŸเชฟเช‚เช— เชธเช‚เชธเชพเชงเชจเซ‹ เชฎเชถเซ€เชจ เช•เซ‹เชกเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡. เชคเซ‡เชฃเซ€เช เชฎเซ‚เชฒเซเชฏเชพเช‚เช•เชจ เช•เชฐเซ‡ เช›เซ‡ เชธเชพเชฏเช•เชฒ เชฆเซ€เช  เชธเซ‚เชšเชจเชพเช“ (เช†เชˆเชชเซ€เชธเซ€) เช…เชจเซ‡ เชนเชพเชฐเซเชกเชตเซ‡เชฐ เชชเชฐเชจเซ‹ เชญเชพเชฐ เช•เซ‡ เชœเซ‡ เชšเซ‹เช•เซเช•เชธ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡ เช›เซ‡.

llvm-mca เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เชญเชพเช— เชฐเซ‚เชชเซ‡ 2018 เชฎเชพเช‚ เชฐเชœเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚ เชเชฒเชเชฒเชตเซ€เชเชฎ, เชœเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ, เชชเชฐเชฟเชตเชฐเซเชคเชจ เช…เชจเซ‡ เช•เชพเชฐเซเชฏเช•เซเชฐเชฎเซ‹เชจเชพ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชเช• เชธเชพเชฐเซเชตเชคเซเชฐเชฟเช• เชธเชฟเชธเซเชŸเชฎ เชตเชฟเช•เชธเชพเชตเซ€ เชฐเชนเซ€ เช›เซ‡. เชคเซ‡ เชœเชพเชฃเซ€เชคเซเช‚ เช›เซ‡ เช•เซ‡ llvm-mca เชจเชพ เชฒเซ‡เช–เช•เซ‹ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เช•เชพเชฎเช—เซ€เชฐเซ€เชจเชพ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชฎเชพเชŸเซ‡เชจเชพ เช‰เช•เซ‡เชฒเชฅเซ€ เชชเซเชฐเซ‡เชฐเชฟเชค เชนเชคเชพ. เช‡เชจเซเชŸเซ‡เชฒ เชคเชฐเชซเชฅเซ€ IACA เช…เชจเซ‡ เชตเซˆเช•เชฒเซเชชเชฟเช• เชฌเชจเชพเชตเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซเชฏเซ‹. เช…เชจเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เช…เชจเซเชธเชพเชฐ, เชŸเซ‚เชฒเชจเซเช‚ เช†เช‰เชŸเชชเซเชŸ (เชคเซ‡เชฎเชจเซเช‚ เชฒเซ‡เช†เช‰เชŸ เช…เชจเซ‡ เชœเชฅเซเชฅเซ‹) เช–เชฐเซ‡เช–เชฐ IACA เชœเซ‡เชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ - เช‰เชฆเชพเชนเชฐเชฃ เช…เชนเซ€เช‚ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡. เชœเซ‹ เช•เซ‡, llvm-mca เชฎเชพเชคเซเชฐ เชธเซเชตเซ€เช•เชพเชฐเซ‡ เช›เซ‡ AT&T เชตเชพเช•เซเชฏเชฐเชšเชจเชพ, เชคเซ‡เชฅเซ€ เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เชจเซเชตเชฐเซเชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชชเชกเชถเซ‡.

เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชฌเซเชฒเซ‹เช—เซเชธ เช…เชจเซ‡ เชธเชพเชฎเชพเชœเชฟเช• เชจเซ‡เชŸเชตเชฐเซเช•เซเชธ เชชเชฐ เชถเซเช‚ เชฒเช–เซ€เช เช›เซ€เช:

Linux เชธเชฐเซเชตเชฐเซเชธ เชฎเชพเชŸเซ‡ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•: เช“เชชเชจ เชŸเซ‚เชฒเซเชธเชจเซ€ เชชเชธเช‚เชฆเช—เซ€ "เชธเชพเชฆเชกเซ€. เชตเซ‹เชฒ เชธเซเชŸเซเชฐเซ€เชŸ เชฎเซ‹เชกเซ‡เชฒ" เช…เชฅเชตเชพ เช•เซเชฒเชพเช‰เชก เช–เชฐเซเชšเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เช เช•เชฐเชตเซเช‚

Linux เชธเชฐเซเชตเชฐเซเชธ เชฎเชพเชŸเซ‡ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•: เช“เชชเชจ เชŸเซ‚เชฒเซเชธเชจเซ€ เชชเชธเช‚เชฆเช—เซ€ เชคเชฎเชพเชฐเซ€ Linux เชธเชฟเชธเซเชŸเชฎเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เช•เชฐเชตเซ€: 10 เชŸเซ€เชชเซเชธ
Linux เชธเชฐเซเชตเชฐเซเชธ เชฎเชพเชŸเซ‡ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•: เช“เชชเชจ เชŸเซ‚เชฒเซเชธเชจเซ€ เชชเชธเช‚เชฆเช—เซ€ เชœเซ‹เช–เชฎเซ‹ เช˜เชŸเชพเชกเชตเชพ: เชคเชฎเชพเชฐเซ‹ เชกเซ‡เชŸเชพ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชจ เช—เซเชฎเชพเชตเชตเซ‹

Linux เชธเชฐเซเชตเชฐเซเชธ เชฎเชพเชŸเซ‡ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•: เช“เชชเชจ เชŸเซ‚เชฒเซเชธเชจเซ€ เชชเชธเช‚เชฆเช—เซ€ เชœเซ‡เช“ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชธเชฟเชธเซเชŸเชฎ เชเชกเชฎเชฟเชจเชฟเชธเซเชŸเซเชฐเซ‡เชถเชจ เชธเชพเชฅเซ‡ เชธเช‚เช•เชณเชพเชฏเซ‡เชฒเชพ เช›เซ‡ เช…เชฅเชตเชพ เชซเช•เซเชค เชถเชฐเซ‚ เช•เชฐเชตเชพเชจเซ€ เชฏเซ‹เชœเชจเชพ เชฌเชจเชพเชตเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡ เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชธเซเชคเช•เซ‹
Linux เชธเชฐเซเชตเชฐเซเชธ เชฎเชพเชŸเซ‡ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•: เช“เชชเชจ เชŸเซ‚เชฒเซเชธเชจเซ€ เชชเชธเช‚เชฆเช—เซ€ เชชเชธเช‚เชฆเช—เซ€: เชจเซ‡เชŸเชตเชฐเซเช• เชชเชฐ เชชเชพเช‚เชš เชชเซเชธเซเชคเช•เซ‹ เช…เชจเซ‡ เชเช• เช•เซ‹เชฐเซเชธ

Linux เชธเชฐเซเชตเชฐเซเชธ เชฎเชพเชŸเซ‡ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช•: เช“เชชเชจ เชŸเซ‚เชฒเซเชธเชจเซ€ เชชเชธเช‚เชฆเช—เซ€เช…เชฎเซ‡ 1cloud.ru เชชเชฐ เชฎเชซเชค เชธเซ‡เชตเชพ เช“เชซเชฐ เช•เชฐเซ€เช เช›เซ€เช.DNS เชนเซ‹เชธเซเชŸเชฟเช‚เช—" เชคเชฎเซ‡ เชเช• เชตเซเชฏเช•เซเชคเชฟเช—เชค เช–เชพเชคเชพเชฎเชพเช‚ DNS เชฐเซ‡เช•เซ‹เชฐเซเชกเชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹