Qual é o custo de desempenho em tempo de execução de um container Docker

Gostava de compreender o custo de desempenho de um Contentor de Docker. Eu encontrei referências a {[[2]}redes anecdotalmente sendo ~100µs mais lentas .

Também encontrei referências ao custo de execução "insignificante" e "próximo de zero", mas gostaria de saber mais precisamente quais são esses custos. Idealmente eu gostaria de saber o que o Docker está abstraindo com um custo de desempenho e coisas que são abstraídas sem um custo de desempenho. Rede, CPU, memória, etc.

Além disso, se há custos de abstração, existem maneiras de contornar o custo de abstração. Por exemplo, talvez eu possa montar um disco diretamente vs. virtualmente em Docker.

Author: Community, 2014-02-19

3 answers

Here é um excelente artigo de pesquisa da IBM de 2014 intitulado "An Updated Performance Comparison of Virtual Machines and Linux Containers" por Felter et al. isso fornece uma comparação entre os recipientes de metal, KVM e Docker. o resultado geral é que o acoplador é quase idêntico ao desempenho nativo e mais rápido que o KVM em cada categoria.

A excepção a isto é o NAT do Docker-se você usar o mapeamento de portas (por exemplo docker run -p 8080:8080), então você pode esperar um pequeno sucesso em latência, como mostrado abaixo. No entanto, você pode agora usar a pilha de rede da máquina (por exemplo docker run --net=host) ao lançar um contentor do acoplador, que irá executar de forma idêntica à coluna Native (Como mostrado nos resultados de latência Redis mais baixos).

Docker NAT overhead

Também fizeram testes de latência em alguns serviços específicos, como o Redis. Você pode ver que acima de 20 threads de clientes, a maior latência acima vai Docker NAT, em seguida, KVM, em seguida, uma gravata áspera para Docker host/native.

docker redis latency overhead

Apenas porque é um artigo muito útil, aqui estão alguns outros números. Por favor, faça o download para acesso completo.

Dar uma vista de olhos no disco IO:

IO docker vs kvm vs native

Agora a olhar para a CPU acima:

docker cpu overhead

Agora alguns exemplos de memória (leia o papel para mais detalhes, a memória pode ser muito complicada)

docker memory comparison

 328
Author: Hamy, 2016-11-16 01:48:06

Docker não é virtualização, como tal -- em vez disso, é uma abstração no topo do suporte do kernel para diferentes namespaces de processo, namespaces de dispositivo, etc.; um espaço de nomes não é inerentemente mais caro ou ineficiente do que outro, então o que realmente faz o Docker ter um impacto de desempenho é uma questão do que é realmente em esses espaços de nomes.


As escolhas do Docker em termos de como configura espaços de nomes para os seus contentores têm custos, mas esses custos são todos directamente associado aos benefícios -- pode prescindir deles, mas ao fazê-lo também abdica do benefício associado:

  • Os sistemas de ficheiros em camadas são caros -- exactamente quais os custos variam com cada um (e o Docker suporta várias infra-estruturas), e com os seus padrões de Utilização (a junção de vários directórios grandes, ou a fusão de um conjunto muito profundo de sistemas de Ficheiros será particularmente caro), mas não são gratuitos. Por outro lado, uma grande parte da funcionalidade do Docker - ser capaz de construir clientes de outros convidados de uma forma copy-on-write, e obter as vantagens de armazenamento implícito no mesmo -- ride on paying this cost.
  • a DNAT fica cara à escala -- mas dá-lhe o benefício de ser capaz de configurar a rede do seu convidado independentemente da do seu host e ter uma interface conveniente para encaminhar apenas as portas que deseja entre elas. Você pode substituir isso por uma ponte para uma interface física, mas novamente, perder o benefício.
  • Ser capaz de executar cada a pilha de software com suas dependências instaladas da maneira mais conveniente -- independente da distribuição do host, libc e outras versões da Biblioteca -- é um grande benefício, mas a necessidade de carregar bibliotecas compartilhadas mais de uma vez (quando suas versões diferem) tem o custo que você esperaria.
E assim por diante. Quanto esses custos realmente impactam você em seu ambiente -- com seus padrões de acesso à rede, suas restrições de memória, etc -- é um item para o qual é difícil fornecer um genérico resposta.
 67
Author: Charles Duffy, 2014-09-26 21:18:00

Aqui estão mais alguns pontos de Referência para Docker based memcached server versus host native memcached server Usando a Ferramenta de referência Twemperf https://github.com/twitter/twemperf {[13] } com 5000 ligações e 20K taxa de ligação

Conecte o tempo de sobrecarga para o memcached baseado em docker parece concordar com o papel branco acima a cerca de duas vezes a velocidade nativa.

Twemperf Docker Memcached

Connection rate: 9817.9 conn/s
Connection time [ms]: avg 341.1 min 73.7 max 396.2 stddev 52.11
Connect time [ms]: avg 55.0 min 1.1 max 103.1 stddev 28.14
Request rate: 83942.7 req/s (0.0 ms/req)
Request size [B]: avg 129.0 min 129.0 max 129.0 stddev 0.00
Response rate: 83942.7 rsp/s (0.0 ms/rsp)
Response size [B]: avg 8.0 min 8.0 max 8.0 stddev 0.00
Response time [ms]: avg 28.6 min 1.2 max 65.0 stddev 0.01
Response time [ms]: p25 24.0 p50 27.0 p75 29.0
Response time [ms]: p95 58.0 p99 62.0 p999 65.0

Twemperf Centmin Mod Memcached

Connection rate: 11419.3 conn/s
Connection time [ms]: avg 200.5 min 0.6 max 263.2 stddev 73.85
Connect time [ms]: avg 26.2 min 0.0 max 53.5 stddev 14.59
Request rate: 114192.6 req/s (0.0 ms/req)
Request size [B]: avg 129.0 min 129.0 max 129.0 stddev 0.00
Response rate: 114192.6 rsp/s (0.0 ms/rsp)
Response size [B]: avg 8.0 min 8.0 max 8.0 stddev 0.00
Response time [ms]: avg 17.4 min 0.0 max 28.8 stddev 0.01
Response time [ms]: p25 12.0 p50 20.0 p75 23.0
Response time [ms]: p95 28.0 p99 28.0 p999 29.0

Aqui está referências benchmarks a usar a referência memtier ferramenta

memtier_benchmark docker Memcached

4         Threads
50        Connections per thread
10000     Requests per thread
Type        Ops/sec     Hits/sec   Misses/sec      Latency       KB/sec
------------------------------------------------------------------------
Sets       16821.99          ---          ---      1.12600      2271.79
Gets      168035.07    159636.00      8399.07      1.12000     23884.00
Totals    184857.06    159636.00      8399.07      1.12100     26155.79

memtier_benchmark Centmin Mod Memcached

4         Threads
50        Connections per thread
10000     Requests per thread
Type        Ops/sec     Hits/sec   Misses/sec      Latency       KB/sec
------------------------------------------------------------------------
Sets       28468.13          ---          ---      0.62300      3844.59
Gets      284368.51    266547.14     17821.36      0.62200     39964.31
Totals    312836.64    266547.14     17821.36      0.62200     43808.90
 14
Author: p4guru, 2015-04-19 20:31:01