рд╣реЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рдпрд╛ рд▓реЗрдЦрд╛рдд рдЪрд░реНрдЪрд╛ рдХреЗрд▓реА рдЬрд╛рдИрд▓
рдбреЙрдХрд░рдЪреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рдВрдмрджреНрджрд▓ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдирд┐рд░рд╛рдХрд░рдгрд╛рдмрджреНрджрд▓
рдореБрдЦреНрдп рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ
- рд╡реЗрдЧрд│реНрдпрд╛ рдХреЛрдЕрд░рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ, рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдиреЗрдЯрд╡рд░реНрдХ, рдореЗрдорд░реА рдЖрдгрд┐ I/O рдЕрд▓рдЧрд╛рд╡ рдкреНрд░рджрд╛рди рдХрд░рдгреЗ, рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓рд╛рдпрдЭреЗрд╢рди рд╡рд┐рд╕реНрддрд╛рд░рд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░ рдЕрд▓рдЧрд╛рд╡ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рд╕рдХреНрддреА рдХрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ.
- OCI (рдХрдВрдЯреЗрдирд░ рдлреЙрд░рдореЕрдЯ), Kubernetes CRI рд╕рд╣ рдЙрджреНрдпреЛрдЧ рдорд╛рдирдХрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди
- рдирд┐рдпрдорд┐рдд рд▓рд┐рдирдХреНрд╕ рдХрдВрдЯреЗрдирд░реНрд╕рдЪреЗ рд╕рд╛рддрддреНрдпрдкреВрд░реНрдг рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди, рдирд┐рдпрдорд┐рдд VM рдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдУрд╡реНрд╣рд░рд╣реЗрдбрд╢рд┐рд╡рд╛рдп рд╡рд╛рдврд▓реЗрд▓реЗ рдЕрд▓рдЧрд╛рд╡
- рдкреВрд░реНрдг рд╡рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирдордзреНрдпреЗ рдХрдВрдЯреЗрдирд░ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рджреВрд░ рдХрд░рд╛, рдЬреЗрдиреЗрд░рд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдПрдХреАрдХрд░рдг рдЖрдгрд┐ рд▓реЙрдиреНрдЪ рд╕реБрд▓рдн рдХрд░рддрд╛рдд
рд╕реЗрдЯрд┐рдВрдЧ
рдЖрд╣реЗрдд
рдорд╣рддреНрд╡рд╛рдЪреЗ: рдХрд╛рдЯрд╛ рдХрдВрдЯреЗрдирд░реНрд╕рдЪреЗ рдХрд╛рд░реНрдп рдХреЗрд╡рд│ рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░рд╡рд░ рд╕рдорд░реНрдерд┐рдд рдЖрд╣реЗ, рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓рд╛рдпрдЭреЗрд╢рди рдлреЙрд░рд╡рд░реНрдбрд┐рдВрдЧ рджреЗрдЦреАрд▓ рдиреЗрд╣рдореА рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА sse4.1 рд╕рдорд░реНрдерди рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд╛рд╕реВрди.
рдХрд╛рдЯрд╛ рдХрдВрдЯреЗрдирд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЕрдЧрджреА рд╕реЛрдкреЗ рдЖрд╣реЗ:
рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЙрдкрдпреБрдХреНрддрддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛:
# yum -y install yum-utils
рд╕реЗрд▓рд┐рдирдХреНрд╕ рдЕрдХреНрд╖рдо рдХрд░рд╛ (рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдЕрдзрд┐рдХ рдпреЛрдЧреНрдп рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА рдореА рддреЗ рдЕрдХреНрд╖рдо рдХрд░рддреЛ):
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
рдЖрдореНрд╣реА рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдХрдиреЗрдХреНрдЯ рдХрд░рддреЛ рдЖрдгрд┐ рд╕реНрдерд╛рдкрдирд╛ рдХрд░рддреЛ
# source /etc/os-release
# ARCH=$(arch)
# BRANCH="${BRANCH:-stable-1.10}"
# yum-config-manager --add-repo "http://download.opensuse.org/repositories/home:/katacontainers:/releases:/${ARCH}:/${BRANCH}/CentOS_${VERSION_ID}/home:katacontainers:releases:${ARCH}:${BRANCH}.repo"
# yum -y install kata-runtime kata-proxy kata-shim
рд╕рдорд╛рдпреЛрдЬрди
рдореА рдбреЙрдХрд░рд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реЗрдЯ рдЕрдк рдХрд░реАрди, рддреНрдпрд╛рдЪреА рд╕реНрдерд╛рдкрдирд╛ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрдкреВрд░реНрдг рдЖрд╣реЗ, рдореА рддреНрдпрд╛рдЪреЗ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдХрд░рдгрд╛рд░ рдирд╛рд╣реА:
# rpm -qa | grep docker
docker-ce-cli-19.03.6-3.el7.x86_64
docker-ce-19.03.6-3.el7.x86_64
# docker -v
Docker version 19.03.6, build 369ce74a3c
рдЖрдореНрд╣реА deemon.json рдордзреНрдпреЗ рдмрджрд▓ рдХрд░рддреЛ:
# cat <<EOF > /etc/docker/daemon.json
{
"default-runtime": "kata-runtime",
"runtimes": {
"kata-runtime": {
"path": "/usr/bin/kata-runtime"
}
}
}
EOF
рдбреЙрдХрд░ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рд╛:
# service docker restart
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рддрдкрд╛рд╕рдгреА
рдбреЙрдХрд░ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рддреБрдореНрд╣реА рдХрдВрдЯреЗрдирд░ рд╕реБрд░реВ рдХреЗрд▓реНрдпрд╛рд╕, uname рдореБрдЦреНрдп рдкреНрд░рдгрд╛рд▓реАрд╡рд░ рдЪрд╛рд▓рдгрд╛рд▒реНрдпрд╛ рдХрд░реНрдирд▓рдЪреА рдЖрд╡реГрддреНрддреА рджреЗрдИрд▓:
# docker run busybox uname -a
Linux 19efd7188d06 3.10.0-1062.12.1.el7.x86_64 #1 SMP Tue Feb 4 23:02:59 UTC 2020 x86_64 GNU/Linux
рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдХрд░реНрдирд▓ рдЖрд╡реГрддреНрддреА рдЕрд╕реЗ рджрд┐рд╕рддреЗ:
# docker run busybox uname -a
Linux 9dd1f30fe9d4 4.19.86-5.container #1 SMP Sat Feb 22 01:53:14 UTC 2020 x86_64 GNU/Linux
рдЕрдзрд┐рдХ рд╕рдВрдШ!
# time docker run busybox mount
kataShared on / type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev type tmpfs (rw,nosuid,size=65536k,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666)
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,relatime,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (ro,nosuid,nodev,noexec,relatime,xattr,name=systemd)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/blkio type cgroup (ro,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (ro,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (ro,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/perf_event type cgroup (ro,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (ro,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/freezer type cgroup (ro,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/pids type cgroup (ro,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpuset)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k)
kataShared on /etc/resolv.conf type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
kataShared on /etc/hostname type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
kataShared on /etc/hosts type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
proc on /proc/bus type proc (ro,relatime)
proc on /proc/fs type proc (ro,relatime)
proc on /proc/irq type proc (ro,relatime)
proc on /proc/sys type proc (ro,relatime)
tmpfs on /proc/acpi type tmpfs (ro,relatime)
tmpfs on /proc/timer_list type tmpfs (rw,nosuid,size=65536k,mode=755)
tmpfs on /sys/firmware type tmpfs (ro,relatime)
real 0m2.381s
user 0m0.066s
sys 0m0.039s
# time docker run busybox free -m
total used free shared buff/cache available
Mem: 1993 30 1962 0 1 1946
Swap: 0 0 0
real 0m3.297s
user 0m0.086s
sys 0m0.050s
рдЬрд▓рдж рд▓реЛрдб рдЪрд╛рдЪрдгреА
рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓рд╛рдпрдЭреЗрд╢рдирдЪреНрдпрд╛ рдиреБрдХрд╕рд╛рдирд╛рдЪреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА - рдореА рдореБрдЦреНрдп рдЙрджрд╛рд╣рд░рдгреЗ рдореНрд╣рдгреВрди sysbench рдЪрд╛рд▓рд╡рддреЛ
рдбреЙрдХрд░+рдХрдВрдЯреЗрдирд░реНрдб рд╡рд╛рдкрд░реВрди sysbench рдЪрд╛рд▓рд╡рдгреЗ
рдкреНрд░реЛрд╕реЗрд╕рд░ рдЪрд╛рдЪрдгреА
sysbench 1.0: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 1
Initializing random number generator from current time
Prime numbers limit: 20000
Initializing worker threads...
Threads started!
General statistics:
total time: 36.7335s
total number of events: 10000
total time taken by event execution: 36.7173s
response time:
min: 3.43ms
avg: 3.67ms
max: 8.34ms
approx. 95 percentile: 3.79ms
Threads fairness:
events (avg/stddev): 10000.0000/0.00
execution time (avg/stddev): 36.7173/0.00
рд░реЕрдо рдЪрд╛рдЪрдгреА
sysbench 1.0: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 1
Initializing random number generator from current time
Initializing worker threads...
Threads started!
Operations performed: 104857600 (2172673.64 ops/sec)
102400.00 MiB transferred (2121.75 MiB/sec)
General statistics:
total time: 48.2620s
total number of events: 104857600
total time taken by event execution: 17.4161s
response time:
min: 0.00ms
avg: 0.00ms
max: 0.17ms
approx. 95 percentile: 0.00ms
Threads fairness:
events (avg/stddev): 104857600.0000/0.00
execution time (avg/stddev): 17.4161/0.00
рдбреЙрдХрд░ + рдХрд╛рдЯрд╛ рдХрдВрдЯреЗрдирд░ рд╡рд╛рдкрд░реВрди sysbench рдЪрд╛рд▓рд╡рдгреЗ
рдкреНрд░реЛрд╕реЗрд╕рд░ рдЪрд╛рдЪрдгреА
sysbench 1.0: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 1
Initializing random number generator from current time
Prime numbers limit: 20000
Initializing worker threads...
Threads started!
General statistics:
total time: 36.5747s
total number of events: 10000
total time taken by event execution: 36.5594s
response time:
min: 3.43ms
avg: 3.66ms
max: 4.93ms
approx. 95 percentile: 3.77ms
Threads fairness:
events (avg/stddev): 10000.0000/0.00
execution time (avg/stddev): 36.5594/0.00
рд░реЕрдо рдЪрд╛рдЪрдгреА
sysbench 1.0: multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 1
Initializing random number generator from current time
Initializing worker threads...
Threads started!
Operations performed: 104857600 (2450366.94 ops/sec)
102400.00 MiB transferred (2392.94 MiB/sec)
General statistics:
total time: 42.7926s
total number of events: 104857600
total time taken by event execution: 16.1512s
response time:
min: 0.00ms
avg: 0.00ms
max: 0.43ms
approx. 95 percentile: 0.00ms
Threads fairness:
events (avg/stddev): 104857600.0000/0.00
execution time (avg/stddev): 16.1512/0.00
рддрддреНрд╡рддрдГ, рдкрд░рд┐рд╕реНрдерд┐рддреА рдЖрдзреАрдЪ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЪрд╛рдЪрдгреНрдпрд╛ рдЕрдиреЗрдХ рд╡реЗрд│рд╛ рдЪрд╛рд▓рд╡рдгреЗ, рдЖрдЙрдЯрд▓рд┐рдпрд░реНрд╕ рдХрд╛рдвреВрди рдЯрд╛рдХрдгреЗ рдЖрдгрд┐ рдирд┐рдХрд╛рд▓рд╛рдВрдЪреА рд╕рд░рд╛рд╕рд░реА рдХрд╛рдврдгреЗ рдЕрдзрд┐рдХ рдЗрд╖реНрдЯрддрдо рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдореА рдЕрджреНрдпрд╛рдк рдЕрдзрд┐рдХ рдЪрд╛рдЪрдгреНрдпрд╛ рдХрд░рдд рдирд╛рд╣реА.
рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрд╕реЗ рдХрдВрдЯреЗрдирд░ рд╕реБрд░реВ рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА рд╕реБрдорд╛рд░реЗ рдкрд╛рдЪ рддреЗ рджрд╣рд╛ рдкрдЯ рдЬрд╛рд╕реНрдд рд╡реЗрд│ рдШреЗрддрд╛рдд (рдХрдВрдЯреЗрдирд░реНрдб рд╡рд╛рдкрд░рддрд╛рдирд╛ рд╕рдорд╛рди рдХрдорд╛рдВрдбрд╕рд╛рдареА рдард░рд╛рд╡рд┐рдХ рд░рди рдЯрд╛рдИрдо рд╕реЗрдХрдВрджрд╛рдЪреНрдпрд╛ рдПрдХ рддреГрддреАрдпрд╛рдВрд╢рдкреЗрдХреНрд╖рд╛ рдХрдореА рдЕрд╕рддреЛ), рддрд░реАрд╣реА рдЖрдореНрд╣реА рдкреВрд░реНрдг рд╕реБрд░реВ рд╣реЛрдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдШреЗрддрд▓реА рддрд░ рддреЗ рдЦреВрдк рд▓рд╡рдХрд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд (рддреЗрдереЗ рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдгреЗ рдЖрд╣реЗрдд, рдЖрджреЗрд╢ рд╕рд░рд╛рд╕рд░реА рддреАрди рд╕реЗрдХрдВрджрд╛рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд). рдмрд░рдВ, рд╕реАрдкреАрдпреВ рдЖрдгрд┐ рд░реЕрдордЪреНрдпрд╛ рджреНрд░реБрдд рдЪрд╛рдЪрдгреАрдЪреЗ рдкрд░рд┐рдгрд╛рдо рдЬрд╡рд│рдЬрд╡рд│ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рджрд░реНрд╢рд╡рддрд╛рдд, рдЬреЗ рдЖрдирдВрджреА рд╣реЛрдК рд╢рдХрдд рдирд╛рд╣реАрдд, рд╡рд┐рд╢реЗрд╖рдд: рдХреЗрд╡реНрд╣реАрдПрдо рд╕рд╛рд░рдЦреНрдпрд╛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдпрдВрддреНрд░рдгреЗрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЕрд▓рдЧрд╛рд╡ рдкреНрд░рджрд╛рди рдХреЗрд▓рд╛ рдЬрд╛рддреЛ.
рдШреЛрд╖рдгрд╛
рд▓реЗрдЦ рдПрдХ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЛ рддреБрдореНрд╣рд╛рд▓рд╛ рдкрд░реНрдпрд╛рдпреА рд░рдирдЯрд╛рдЗрдо рдЕрдиреБрднрд╡рдгреНрдпрд╛рдЪреА рд╕рдВрдзреА рджреЗрддреЛ. рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреА рдЕрдиреЗрдХ рдХреНрд╖реЗрддреНрд░реЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдирд╛рд╣реАрдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╕рд╛рдЗрдЯ рдХрд╛рдЯрд╛ рдХрдВрдЯреЗрдирд░рдЪреНрдпрд╛ рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдЪреНрдпрд╛ рд╢рдХреНрдпрддреЗрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЗ. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдкрдг рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛ рд╢реЛрдзрдгреЗ, рдирд┐рд░реНрдмрдВрдз рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрдгрд┐ рдЗрддрд░ рдордиреЛрд░рдВрдЬрдХ рдЧреЛрд╖реНрдЯреАрдВрд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЪрд╛рдЪрдгреНрдпрд╛рдВрдЪреА рдорд╛рд▓рд┐рдХрд╛ рджреЗрдЦреАрд▓ рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛.
рдЬреНрдпрд╛рдВрдиреА рдЗрдереЗ рд╡рд╛рдЪрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рд╡рд╛рдЪрд▓реЗ рдЖрд╣реЗ рдЕрд╢рд╛ рд╕рд░реНрд╡рд╛рдВрдирд╛ рдореА рд╕рд░реНрд╡реЗрдХреНрд╖рдгрд╛рдд рднрд╛рдЧ рдШреЗрдгреНрдпрд╛рд╕ рд╕рд╛рдВрдЧрддреЛ, рдЬреНрдпрд╛рд╡рд░ рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░реАрд▓ рднрд╡рд┐рд╖реНрдпрд╛рддреАрд▓ рдкреНрд░рдХрд╛рд╢рдиреЗ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреАрд▓.
рдХреЗрд╡рд│ рдиреЛрдВрджрдгреАрдХреГрдд рд╡рд╛рдкрд░рдХрд░реНрддреЗрдЪ рд╕рд░реНрд╡реЗрдХреНрд╖рдгрд╛рдд рднрд╛рдЧ рдШреЗрдК рд╢рдХрддрд╛рдд.
рдореА рдХрд╛рдЯрд╛ рдХрдВрдЯреЗрдирд░реНрд╕рдмрджреНрджрд▓ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдгреЗ рд╕реБрд░реВ рдареЗрд╡рд╛рд╡реЗ рдХрд╛?
-
80,0%рд╣реЛрдп, рдЕрдЬреВрди рд▓рд┐рд╣рд╛!28
-
20,0%рдирд╛рд╣реА, рдирдХреЛ...7
35 рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдиреА рдорддрджрд╛рди рдХреЗрд▓реЗ. 7 рд╡рд╛рдкрд░рдХрд░реНрддреЗ рджреВрд░ рд░рд╛рд╣рд┐рд▓реЗ.
рд╕реНрддреНрд░реЛрдд: www.habr.com