рдпреЛ рд▓реЗрдЦрд▓реЗ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреЗрд░ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫ
рдбрдХрд░рд╕рдБрдЧ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрдХрд╛ рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдкрд╣рд┐рд▓реЗ рдиреИ
рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВ
- рдЫреБрдЯреНрдЯреИ рдХреЛрд░рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджреИ, рдпрд╕рд░реА рдиреЗрдЯрд╡рд░реНрдХ, рдореЗрдореЛрд░реА рд░ I / O рдкреГрдердХрддрд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрджреИ, рдпреЛ рднрд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рд╡рд┐рд╕реНрддрд╛рд░рд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЕрд▓рдЧрд╛рд╡рдХреЛ рдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдЬрдмрд░рдЬрд╕реНрддреА рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫред
- OCI (рдХрдиреНрдЯреЗрдирд░ рдврд╛рдБрдЪрд╛), Kubernetes CRI рд╕рд╣рд┐рдд рдЙрджреНрдпреЛрдЧ рдорд╛рдирдХрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди
- рдирд┐рдпрдорд┐рдд рд▓рд┐рдирдХреНрд╕ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рджрд░реНрд╢рди, рдирд┐рдпрдорд┐рдд VM рдХреЛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рдУрднрд░рд╣реЗрдб рдмрд┐рдирд╛ рдмрдвреЗрдХреЛ рдЕрд▓рдЧрд╛рд╡
- рдкреВрд░реНрдг рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ рднрд┐рддреНрд░ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рдЪрд▓рд╛рдЙрдиреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рд▓рд╛рдИ рд╣рдЯрд╛рдЙрдиреБрд╣реЛрд╕реН, рдЬреЗрдиреЗрд░рд┐рдХ рдЗрдиреНрдЯрд░рдлреЗрд╕рд╣рд░реВ рдПрдХреАрдХрд░рдг рд░ рд╕реБрд░реБрд╡рд╛рддрд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН
рд╕реЗрдЯрд┐рдЩ
рдЫрдиреН
рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг: рдХрд╛рдЯрд╛ рдХрдиреНрдЯреЗрдирд░рдХреЛ рдХрд╛рдо рд╣рд╛рд░реНрдбрд╡реЗрдпрд░рдорд╛ рдорд╛рддреНрд░ рд╕рдорд░реНрдерд┐рдд рдЫ, рднрд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╕рди рдлрд░реНрд╡рд╛рд░реНрдбрд┐рдЩрд▓реЗ рдкрдирд┐ рд╕рдзреИрдВ рдХрд╛рдо рдЧрд░реНрджреИрди sse4.1 рд╕рдорд░реНрдерди рдЪрд╛рд╣рд┐рдиреНрдЫ рдкреНрд░реЛрд╕реЗрд╕рд░рдмрд╛рдЯред
рдХрд╛рдЯрд╛ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБ рдПрдХрджрдо рд╕рд░рд▓ рдЫ:
рднрдгреНрдбрд╛рд░рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН:
# yum -y install yum-utils
Selinux рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдпреЛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдЕрдЭ рд╕рд╣реА рдЫ, рддрд░ рд╕рд░рд▓рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдо рдпрд╕рд▓рд╛рдИ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрджрдЫреБ):
# 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
рд╣рд╛рдореА daemon.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
RAM рдкрд░реАрдХреНрд╖рдг
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
Docker+Kata рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ 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
RAM рдкрд░реАрдХреНрд╖рдг
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