
Entiendo que la ventana acoplable tiene cierta sobrecarga y no esperaría que fuera tan rápida como el contenedor local, pero ¿2 segundos de sobrecarga? Parece demasiado... Una vez que el contenedor se está ejecutando, la ejecución en sí parece la misma.
$ time docker-compose run --rm php-cli php -i > /dev/null
docker-compose run --rm php-cli php -i > /dev/null 0,43s user 0,07s system 23% cpu 2,107 total
$ time php -i > /dev/null
php -i > /dev/null 0,04s user 0,01s system 98% cpu 0,050 total
Incluso el simple hello-world de Docker lleva más tiempo del que creo que es apropiado.
time docker run --rm hello-world > /dev/null
docker run --rm hello-world > /dev/null 0,07s user 0,02s system 9% cpu 0,869 total
Intenté rastrear el comando y se bloquea en wait4 la mayor parte del tiempo (¿que supongo que está esperando la respuesta del demonio acoplable? No soy un profesional, así que corríjame), aquí hay un resultado parcial si eso ayudahttps://pastebin.com/pdA63zBi.
¿Es este el comportamiento esperado o hay algún problema con mi configuración?
EDITAR: Aquí hay un resumen de strace para una imagen limpia de php-cli:
strace -tt -c -f -S time docker run --rm php:7.2-cli php -i > /dev/null
strace: Process 30557 attached
strace: Process 30558 attached
strace: Process 30559 attached
strace: Process 30560 attached
strace: Process 30561 attached
strace: Process 30562 attached
strace: Process 30563 attached
strace: Process 30565 attached
strace: Process 30566 attached
strace: Process 30567 attached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
71.53 0.039424 43 919 163 futex
18.01 0.009927 47 211 pselect6
6.56 0.003617 50 73 mmap
1.27 0.000702 5 128 rt_sigaction
0.41 0.000227 2 138 rt_sigprocmask
0.34 0.000188 9 22 sigaltstack
0.34 0.000188 17 11 gettid
0.30 0.000165 14 12 munmap
0.25 0.000138 4 38 mprotect
0.22 0.000124 12 10 clone
0.14 0.000076 76 1 readlinkat
0.11 0.000062 1 87 sched_yield
0.10 0.000053 3 17 openat
0.09 0.000049 1 65 epoll_pwait
0.09 0.000048 4 11 set_robust_list
0.06 0.000032 3 10 epoll_ctl
0.04 0.000024 1 34 10 read
0.04 0.000020 3 6 fcntl
0.03 0.000018 1 20 close
0.02 0.000012 12 1 epoll_create1
0.01 0.000006 3 2 lseek
0.01 0.000004 0 13 fstat
0.01 0.000004 0 48 47 newfstatat
0.01 0.000003 0 7 write
0.00 0.000002 0 5 2 connect
0.00 0.000001 0 5 socket
0.00 0.000001 0 3 getpeername
0.00 0.000001 0 3 setsockopt
0.00 0.000000 0 3 brk
0.00 0.000000 0 2 1 ioctl
0.00 0.000000 0 10 10 access
0.00 0.000000 0 2 getpid
0.00 0.000000 0 1 shutdown
0.00 0.000000 0 3 getsockname
0.00 0.000000 0 1 execve
0.00 0.000000 0 1 getuid
0.00 0.000000 0 1 arch_prctl
0.00 0.000000 0 1 sched_getaffinity
0.00 0.000000 0 1 set_tid_address
0.00 0.000000 0 1 prlimit64
0.00 0.000000 0 1 getrandom
------ ----------- ----------- --------- --------- ----------------
100.00 0.055116 1928 233 total
Si ejecuto bash en él y luego hago lo mismo dentro del contenedor, la llamada al sistema futex casi no tiene impacto: funciona bien.
Respuesta1
La ejecución de un comando desde el host al contenedor hará que el demonio acoplable lo procese.
Si usted exec -it [image ID] bash
y luego prueba el tiempo:
$ docker exec -it php bash
root@0fddab587d30:/# time php -i > /dev/null
real 0m0.029s
user 0m0.011s
sys 0m0.018s
Ejecutándose strace
en el host, a través de Dockerd hasta el contenedor.
$ strace -c -f -S name docker run -d --rm php:cli php -i > /dev/null
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
0.04 0.000073 7 10 10 access
0.01 0.000025 25 1 arch_prctl
0.04 0.000064 21 3 brk
0.21 0.000359 45 8 clone
0.09 0.000158 9 17 close
0.02 0.000036 9 4 2 connect
0.02 0.000027 27 1 epoll_create1
0.04 0.000068 11 6 epoll_ctl
3.97 0.006676 56 120 epoll_wait
0.00 0.000000 0 1 execve
0.03 0.000056 14 4 fcntl
0.05 0.000082 6 13 fstat
72.92 0.122754 128 959 161 futex
0.00 0.000001 1 2 getpeername
0.00 0.000000 0 1 getpid
0.01 0.000022 22 1 getrandom
0.00 0.000000 0 2 getsockname
0.12 0.000199 22 9 gettid
0.00 0.000004 4 1 getuid
0.03 0.000044 22 2 1 ioctl
0.01 0.000011 6 2 lseek
0.78 0.001317 20 67 mmap
0.49 0.000821 24 34 mprotect
0.25 0.000427 39 11 munmap
0.01 0.000013 13 1 open
0.09 0.000154 11 14 openat
0.02 0.000027 27 1 prlimit64
17.57 0.029574 78 381 pselect6
0.10 0.000166 7 23 6 read
0.03 0.000046 46 1 readlinkat
1.50 0.002522 20 128 rt_sigaction
0.74 0.001241 9 132 rt_sigprocmask
0.02 0.000032 32 1 sched_getaffinity
0.30 0.000500 18 28 sched_yield
0.10 0.000175 19 9 set_robust_list
0.01 0.000025 25 1 set_tid_address
0.00 0.000000 0 2 setsockopt
0.19 0.000323 18 18 sigaltstack
0.03 0.000044 11 4 socket
0.13 0.000215 8 28 27 stat
0.03 0.000049 10 5 write
------ ----------- ----------- --------- --------- ----------------
100.00 0.168330 2056 207 total
Y con la ejecución de strace en el php:cli
contenedor, el tiempo es significativamente menor incluso con más llamadas al sistema, parece que la futex
llamada al sistema es motivo de preocupación aquí:
$ docker run -it --security-opt seccomp:unconfined php:cli bash
root@3bd1a83a2586:/# apt update && apt install strace
root@3bd1a83a2586:/# strace -c -f -S name php -i > /dev/null
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
4.38 0.000830 15 55 54 access
0.03 0.000006 6 1 arch_prctl
0.00 0.000000 0 15 brk
2.73 0.000518 8 61 close
0.00 0.000000 0 1 execve
3.74 0.000708 12 61 fstat
0.02 0.000003 0 18 futex
0.00 0.000000 0 1 getcwd
0.00 0.000000 0 2 getdents
0.00 0.000000 0 3 getrandom
0.00 0.000000 0 2 getrlimit
0.00 0.000000 0 1 1 ioctl
0.00 0.000000 0 2 lseek
0.00 0.000000 0 5 1 lstat
0.00 0.000000 0 1 madvise
10.42 0.001974 14 145 mmap
5.06 0.000959 9 108 mprotect
0.24 0.000046 4 13 munmap
10.34 0.001960 28 69 9 open
3.45 0.000654 10 63 read
0.00 0.000000 0 80 rt_sigaction
0.00 0.000000 0 2 rt_sigprocmask
0.00 0.000000 0 1 set_robust_list
0.00 0.000000 0 1 set_tid_address
0.00 0.000000 0 1 socket
0.23 0.000043 7 6 4 stat
0.00 0.000000 0 1 sysinfo
0.00 0.000000 0 1 uname
59.36 0.011250 4 3037 write
------ ----------- ----------- --------- --------- ----------------
100.00 0.018951 3757 69 total