Me gustaría comprender exhaustivamente el costo de rendimiento en tiempo de ejecución de un contenedor Docker. He encontrado referencias a redes que anecdóticamente son ~ 100 µs más lentas .
También he encontrado referencias a que el costo de tiempo de ejecución es "insignificante" y "cercano a cero", pero me gustaría saber con mayor precisión cuáles son esos costos. Idealmente, me gustaría saber qué está abstrayendo Docker con un costo de rendimiento y cosas que se resumen sin un costo de rendimiento. Redes, CPU, memoria, etc.
Además, si hay costos de abstracción, ¿hay formas de evitar el costo de abstracción? Por ejemplo, quizás pueda montar un disco directamente vs. virtualmente en Docker.
performance
docker
Luke Hoersten
fuente
fuente
Respuestas:
Un excelente trabajo de investigación de IBM 2014 " Una comparación de rendimiento actualizada de máquinas virtuales y contenedores de Linux " por Felter et al. proporciona una comparación entre los contenedores de metal desnudo, KVM y Docker. El resultado general es: Docker es casi idéntico al rendimiento nativo y más rápido que KVM en todas las categorías.
La excepción a esto es el NAT de Docker: si usa la asignación de puertos (por ejemplo,
docker run -p 8080:8080
), puede esperar un golpe menor en la latencia, como se muestra a continuación. Sin embargo, ahora puede usar la pila de red del host (p. Ej.docker run --net=host
) Al iniciar un contenedor Docker, que funcionará de manera idéntica a la columna nativa (como se muestra en los resultados de latencia de Redis más abajo).También realizaron pruebas de latencia en algunos servicios específicos, como Redis. Puede ver que por encima de 20 subprocesos de cliente, la sobrecarga de latencia más alta va a Docker NAT, luego a KVM, luego a un vínculo aproximado entre el host Docker / nativo.
Solo porque es un documento realmente útil, aquí hay algunas otras figuras. Descárguelo para tener acceso completo.
Echando un vistazo a Disk I / O:
Ahora mirando la sobrecarga de la CPU:
Ahora, algunos ejemplos de memoria (lea el documento para más detalles, la memoria puede ser muy complicada):
fuente
--net=host
(dos guiones) y-p 8080:8080
(minúscula 'p') para NAT.Docker no es virtualización como tal; en cambio, es una abstracción además del soporte del kernel para diferentes espacios de nombres de procesos, espacios de nombres de dispositivos, etc .; un espacio de nombres no es inherentemente más costoso o ineficiente que otro, por lo que lo que realmente hace que Docker tenga un impacto en el rendimiento es una cuestión de lo que realmente hay en esos espacios de nombres.
Las opciones de Docker en términos de cómo configura los espacios de nombres para sus contenedores tienen costos, pero esos costos están directamente asociados con los beneficios: puede renunciar a ellos, pero al hacerlo también renuncia a los beneficios asociados:
Etcétera. Cuánto cuestan realmente estos costos en su entorno, con sus patrones de acceso a la red, sus limitaciones de memoria, etc., es un elemento para el que es difícil proporcionar una respuesta genérica.
fuente
Aquí hay algunos puntos de referencia más en
Docker based memcached server
comparaciónhost native memcached server
con el uso de la herramienta de referencia Twemperf https://github.com/twitter/twemperf con 5000 conexiones y una velocidad de conexión de 20kLa sobrecarga de tiempo de conexión para Memcached basada en Docker parece estar de acuerdo con el documento técnico anterior a aproximadamente el doble de la velocidad nativa.
Twemperf Docker Memcached
Twemperf Centmin Mod Memcached
Aquí hay puntos de referencia utilizando la herramienta de referencia memtier
memtier_benchmark docker Memcached
memtier_benchmark Centmin Mod Memcached
fuente
avg 200.5 min 0.6 max 263.2 stddev 73.85