āĻāĻŽāĻ°āĻž āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻŽā§āĻļāĻŋāĻ¨ā§ āĻ¸āĻŋāĻĒāĻŋāĻāĻ āĻĒāĻžāĻ°āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻŽā§āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻ°āĻā§āĻāĻžāĻŽāĻā§āĻ˛āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻ¤ā§ āĻĨāĻžāĻāĻŋāĨ¤ āĻāĻ āĻāĻĒāĻžāĻĻāĻžāĻ¨ā§: temci, uarch-bench, likwid, perf-tools āĻāĻŦāĻ llvm-mcaāĨ¤
āĻāĻ°āĻ āĻŽāĻžāĻ¨āĻĻāĻŖā§āĻĄ:
āĻ¸āĻŋāĻ¸āĻŦā§āĻā§āĻ, āĻāĻāĻ¨āĻŋāĻā§āĻ¸āĻŦā§āĻā§āĻ, āĻĢā§āĻ°ā§āĻ¨āĻŋāĻā§āĻ¸ āĻā§āĻ¸ā§āĻ āĻ¸ā§āĻ¯ā§āĻ, āĻāĻŋāĻĄāĻŋāĻŦā§āĻā§āĻ āĻāĻŦāĻ āĻāĻāĻāĻā§āĻ¨ āĻāĻ¨ā§āĻāĻžāĻ°āĻŦā§āĻā§āĻ, āĻĢāĻŋāĻ, āĻāĻāĻāĻĄāĻŋāĻĒāĻžāĻ°āĻŽ, āĻāĻ¸ āĻāĻŦāĻ āĻŦāĻ¨āĻŋ āĻāĻ¯āĻŧā§āĻŽāĻŋāĻāĻžāĻ°, āĻĄāĻŋāĻĄāĻŋ, āĻāĻŋāĻĒāĻŋāĻāĻ¸āĻŦā§āĻā§āĻ, āĻšā§āĻ¯āĻžāĻŽāĻžāĻ°āĻĄāĻŋāĻŦāĻŋ āĻāĻŦāĻ 7-āĻāĻŋāĻĒ
ФОŅĐž -
āĻā§āĻŽāĻ¸āĻŋ
āĻāĻāĻŋ āĻĻā§āĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ° āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ
āĻ¨ā§āĻŽāĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸āĻ°āĻā§āĻāĻžāĻŽāĨ¤ āĻŽā§āĻ˛āĻ¤, āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻĻā§āĻāĻŋ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋāĻ° āĻ˛ā§āĻāĻ āĻāĻŋāĻ˛ā§āĻ¨ āĻāĻžāĻ°ā§āĻŽāĻžāĻ¨āĻŋāĻ° āĻāĻāĻāĻ¨ āĻāĻžāĻ¤ā§āĻ°, āĻā§āĻšāĻžāĻ¨ā§āĻ¸ āĻŦā§āĻāĻŦāĻžāĻ°ā§āĻāĻžāĻ°, āĻ¯āĻŋāĻ¨āĻŋ 2016 āĻ¸āĻžāĻ˛ā§ āĻ¤āĻžāĻ° āĻ¸ā§āĻ¨āĻžāĻ¤āĻ āĻĨāĻŋāĻ¸āĻŋāĻ¸ā§āĻ° āĻ
āĻāĻļ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻāĻŋāĻ˛ā§āĻ¨āĨ¤ āĻāĻāĻā§āĻ° āĻā§āĻ˛
āĻā§āĻšāĻžāĻ¨ā§āĻ¸ āĻāĻāĻāĻŋ āĻā§āĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻā§āĻ¯āĻŧā§āĻāĻŋāĻ˛ā§āĻ¨ āĻ¯āĻž āĻ¤āĻžāĻā§ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŋāĻ¤ āĻĒāĻ°āĻŋāĻŦā§āĻļā§ āĻāĻāĻāĻŋ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻŋāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻž āĻĒāĻ°āĻŋāĻŽāĻžāĻĒ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤ āĻ
āĻ¤āĻāĻŦ, āĻā§āĻŽāĻ¸āĻŋāĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻšāĻ˛ āĻāĻāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻžāĻ° āĻā§āĻˇāĻŽāĻ¤āĻžāĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ¸ā§āĻŦāĻ°ā§āĻĒ,
āĻāĻāĻŋ āĻĒā§āĻ°āĻĨāĻŽ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻĻā§āĻāĻ¤ā§ āĻā§āĻŽāĻ¨:
# 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
āĻŦā§āĻā§āĻāĻŽāĻžāĻ°ā§āĻāĻŋāĻ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§, āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§
āĻā§āĻŽāĻ¸āĻŋāĻ° āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§, āĻāĻ° "āĻ¯ā§āĻŦāĻ¨" āĻĻāĻžāĻāĻĄāĻŧāĻŋāĻ¯āĻŧā§āĻā§āĨ¤ āĻ āĻāĻžāĻ°āĻŖā§ āĻ¤āĻŋāĻ¨āĻŋ āĻĄ
uarch-āĻŦā§āĻā§āĻ
āĻĒā§āĻ°āĻā§āĻļāĻ˛ā§ āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻĄāĻžāĻāĻ¨āĻ¸ (
Uarch-āĻŦā§āĻā§āĻ āĻāĻĒāĻ¨āĻžāĻā§ āĻŽā§āĻŽāĻ°āĻŋ āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻž, āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛ āĻĄā§āĻāĻž āĻ˛ā§āĻĄāĻŋāĻ āĻāĻ¤āĻŋ āĻāĻŦāĻ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ°ā§āĻ° āĻāĻžāĻ āĻŽā§āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ
YMM āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ . āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ¤ā§āĻĒāĻ¨ā§āĻ¨ āĻŦā§āĻā§āĻāĻŽāĻžāĻ°ā§āĻāĻŋāĻ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻā§āĻŽāĻ¨ āĻĻā§āĻāĻžāĻ¯āĻŧ āĻ¤āĻž āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§āĻ āĻĢāĻŋāĻ¸āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§ āĻĒā§āĻˇā§āĻ āĻžāĻ° āĻ¨ā§āĻā§āĻ° āĻ āĻāĻļā§ āĻ āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤.
āĻāĻāĻŋ āĻ˛āĻā§āĻˇāĻŖā§āĻ¯āĻŧ āĻ¯ā§ āĻāĻ¯āĻŧāĻžāĻ°āĻ-āĻŦā§āĻā§āĻ, āĻā§āĻŽāĻ¸āĻŋāĻ° āĻŽāĻ¤ā§,
āĻāĻĒāĻžāĻ¤āĻ¤, āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋ āĻŦāĻŋāĻāĻžāĻļā§āĻ° āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§ āĻ°āĻ¯āĻŧā§āĻā§, āĻ¤āĻžāĻ uarch-āĻŦā§āĻā§āĻā§āĻ° āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ āĻ¨ā§āĻ āĻāĻŦāĻ āĻāĻ° āĻ
āĻĒāĻžāĻ°ā§āĻļāĻ¨ā§ āĻŦāĻžāĻ āĻĨāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§ - āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ,
āĻ¤āĻ°āĻ˛
āĻāĻāĻŋ āĻāĻ¨ā§āĻā§āĻ˛, āĻāĻāĻŽāĻĄāĻŋ āĻāĻŦāĻ āĻāĻāĻ°āĻāĻŽāĻāĻŋ 8 āĻĒā§āĻ°āĻ¸ā§āĻ¸āĻ° āĻ¸āĻš āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻŽā§āĻļāĻŋāĻ¨ā§āĻ° āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻž āĻŽā§āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻ°āĻā§āĻāĻžāĻŽāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻāĨ¤ āĻāĻāĻŋ 2017 āĻ¸āĻžāĻ˛ā§ āĻāĻžāĻ°ā§āĻŽāĻžāĻ¨ āĻĢā§āĻĄāĻžāĻ°ā§āĻ˛ āĻļāĻŋāĻā§āĻˇāĻž āĻ āĻāĻŦā§āĻˇāĻŖāĻž āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻā§āĻ° āĻĒā§āĻˇā§āĻ āĻĒā§āĻˇāĻāĻ¤āĻžāĻ¯āĻŧ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻāĻŦāĻ āĻāĻĒā§āĻ¨ āĻ¸ā§āĻ°ā§āĻ¸ā§ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤
likwid āĻā§āĻ˛āĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§, āĻāĻŽāĻ°āĻž likwid-powermeter āĻšāĻžāĻāĻ˛āĻžāĻāĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ, āĻ¯āĻž RAPL āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ° āĻĨā§āĻā§ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻļāĻā§āĻ¤āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ¤āĻĨā§āĻ¯ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°ā§, āĻ¸ā§āĻāĻ¸āĻžāĻĨā§ likwid-setFrequencies, āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻĒā§āĻ°āĻ¸ā§āĻ¸āĻ°ā§āĻ° āĻĢā§āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸āĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻā§āĻ˛āĻāĻŋ HPC āĻāĻŦā§āĻˇāĻŖāĻžāĻ¯āĻŧ āĻāĻĄāĻŧāĻŋāĻ¤ āĻĒā§āĻ°āĻā§āĻļāĻ˛ā§āĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨āĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, likwid āĻ¸āĻš
ФОŅĐž -
āĻĒāĻžāĻ°āĻĢ-āĻā§āĻ˛
āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻž āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ āĻā§āĻ˛
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
āĻ¯āĻ¨ā§āĻ¤ā§āĻ°ā§āĻ° āĻāĻžāĻ°āĻĒāĻžāĻļā§ āĻāĻāĻāĻŋ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻŦāĻĄāĻŧ āĻ¸āĻŽā§āĻĒā§āĻ°āĻĻāĻžāĻ¯āĻŧ āĻāĻĄāĻŧā§ āĻāĻ ā§āĻā§ (
llvm-mca
āĻāĻāĻāĻŋ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻ¯āĻž āĻāĻŦāĻŋāĻˇā§āĻ¯āĻĻā§āĻŦāĻžāĻŖā§ āĻāĻ°ā§ āĻ¯ā§ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ CPU-āĻ¤ā§ āĻāĻ¤āĻā§āĻ˛āĻŋ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻŋāĻ āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨ āĻŽā§āĻļāĻŋāĻ¨ āĻā§āĻĄā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻŦā§ā§ˇ āĻ¸ā§
llvm-mca āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻ
āĻāĻļ āĻšāĻŋāĻ¸āĻžāĻŦā§ 2018 āĻ¸āĻžāĻ˛ā§ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛
āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻŦā§āĻ˛āĻ āĻāĻŦāĻ āĻ¸āĻžāĻŽāĻžāĻāĻŋāĻ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¯āĻž āĻ˛āĻŋāĻāĻŋ:
āĻā§āĻāĻžāĻŦā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻ¸ā§āĻ°āĻā§āĻˇāĻŋāĻ¤ āĻāĻ°āĻŦā§āĻ¨: 10 āĻāĻŋ āĻāĻŋāĻĒāĻ¸
āĻā§āĻāĻāĻŋ āĻšā§āĻ°āĻžāĻ¸ āĻāĻ°āĻž: āĻā§āĻāĻžāĻŦā§ āĻāĻĒāĻ¨āĻžāĻ° āĻĄā§āĻāĻž āĻšāĻžāĻ°āĻžāĻŦā§āĻ¨ āĻ¨āĻž
āĻ¯āĻžāĻ°āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻ ā§āĻ¯āĻžāĻĄāĻŽāĻŋāĻ¨āĻŋāĻ¸ā§āĻā§āĻ°ā§āĻļāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻĄāĻŧāĻŋāĻ¤ āĻŦāĻž āĻļā§āĻ§ā§ āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻĒāĻ°āĻŋāĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°āĻā§āĻ¨ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŦāĻ
āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨: āĻĒāĻžāĻāĻāĻāĻŋ āĻŦāĻ āĻāĻŦāĻ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§ āĻāĻāĻāĻŋ āĻā§āĻ°ā§āĻ¸
āĻāĻŽāĻ°āĻž 1cloud.ru āĻ āĻāĻāĻāĻŋ āĻŦāĻŋāĻ¨āĻžāĻŽā§āĻ˛ā§āĻ¯ā§ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻ
āĻĢāĻžāĻ° āĻāĻ°āĻŋ "
āĻāĻ¤ā§āĻ¸: www.habr.com