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.

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
- Preparar host
Certifique-se de que Docker Engine está instalado e operacional.
- Criar volume Docker
Crie um volume Docker para uso no teste.
docker volume create test_volume - Rodar container com volume
Inicie um container com o volume montado em /data.
docker run --rm -it -v test_volume:/data ubuntu:latest bash - Instalar fio no container
No shell do container, instale o fio.
apt-get update && apt-get install -y fio - 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 - Rodar container sem volume
Inicie outro container idêntico, sem volume montado.
docker run --rm -it ubuntu:latest bash - Instalar fio no container
No shell do container, instale o fio.
apt-get update && apt-get install -y fio - 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 - 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
- Documentação Docker volumes · Docker, Inc. (docs.docker.com)
