Entrar ou criar conta

Upnetix Labs · protocolo de experimento

Protocolo: Qual o impacto do uso de volumes Docker no desempenho de I/O de containers?

Este protocolo mede a diferença de desempenho de I/O entre containers Docker usando volumes persistentes e armazenamento apenas no sistema de arquivos do container. O objetivo é quantificar a latência e a taxa de transferência de operações de leitura e escrita.

Docker e containers do zero à produção
Ligado ao treinamento Docker e containers do zero à produção
Protocolo, não resultado. Esta página descreve como medir. Os números que valem são os que você obtém na sua bancada, seguindo o método abaixo. Nenhum valor aqui é resultado de medição da Upnetix.
Pergunta

O uso de volumes Docker afeta o desempenho de I/O (latência e throughput) dos containers em comparação ao armazenamento interno do container?

Hipótese

Containers Docker usando volumes montados apresentam desempenho de I/O diferente em comparação ao uso exclusivo do sistema de arquivos interno do container.

Variáveis

Independentes (o que varia)Tipo de armazenamento (volume Docker vs. filesystem interno do container)
Dependentes (o que se mede)Latência de I/O; Taxa de transferência de I/O (MB/s)
Controladas (o que fica fixo)Imagem base do container; Configuração do host Docker; Tamanho do arquivo de teste; Ferramenta de benchmark; Recursos do host (CPU, RAM)

Ambiente

Host Linux com Docker Engine instalado (consulte a documentação para versão mínima). Ferramenta fio (https://github.com/axboe/fio) instalada no container. Dois containers idênticos: um usando volume Docker montado em /data, outro usando apenas o filesystem padrão do container.

Procedimento

  1. Preparar host

    Certifique-se de que Docker Engine está instalado e operacional.

  2. Criar volume Docker

    Crie um volume Docker para uso no teste.

    docker volume create test_volume
  3. Rodar container com volume

    Inicie um container com o volume montado em /data.

    docker run --rm -it -v test_volume:/data ubuntu:latest bash
  4. Instalar fio no container

    No shell do container, instale o fio.

    apt-get update && apt-get install -y fio
  5. Executar benchmark no volume

    Execute o fio para medir I/O em /data.

    fio --name=vol_test --directory=/data --size=1G --bs=4k --rw=readwrite --ioengine=libaio --numjobs=1 --runtime=60 --group_reporting
  6. Rodar container sem volume

    Inicie outro container idêntico, sem volume montado.

    docker run --rm -it ubuntu:latest bash
  7. Instalar fio no container

    No shell do container, instale o fio.

    apt-get update && apt-get install -y fio
  8. Executar benchmark no filesystem interno

    Execute o fio para medir I/O em /tmp.

    fio --name=fs_test --directory=/tmp --size=1G --bs=4k --rw=readwrite --ioengine=libaio --numjobs=1 --runtime=60 --group_reporting
  9. Repetir testes

    Repita cada teste pelo menos 5 vezes para cada cenário, alternando a ordem para reduzir viés.

Planilha de coleta

cenario (volume|filesystem)latencia_media_ms (ms)throughput_mb_s (MB/s)desvio_padrao_latencia (ms)desvio_padrao_throughput (MB/s)
EXEMPLO: volume, 1.2, 120, 0.1, 5

Repetições recomendadas: 5. Baixe a planilha vazia em CSV: colunas prontas.

Análise

Calcule a média, mediana e desvio padrão dos resultados de latência e throughput para cada cenário. Compare os valores entre volume e filesystem interno. Analise se a diferença é estatisticamente relevante (por exemplo, se a média do volume for consistentemente maior ou menor que a do filesystem interno).

Critérios de decisão

  • Se a diferença média de latência ou throughput entre os cenários for superior a 10% e consistente nas repetições, considere o impacto significativo.
  • Se o desvio padrão for alto, repita o teste ou investigue causas externas.

Fontes de erro e mitigação

  • Cache do sistema operacional pode influenciar resultados; limpe caches entre execuções ou reinicie o container.
  • Carga do host pode afetar desempenho; execute testes em horários de baixa utilização.
  • A ordem dos testes pode influenciar; alterne a ordem entre repetições.

Referências

  1. Documentação Docker volumes · Docker, Inc. (docs.docker.com)