Como você calcula o tamanho ideal do bloco ao executar um dd
? Eu pesquisei um pouco e não encontrei nada sugerindo como isso seria realizado.
Estou com a impressão de que um tamanho de bloco maior resultaria em um mais rápido dd
... isso é verdade?
Estou prestes a dd
dois HDDs Hitachi idênticos de 500 gb que rodam a 7200 rpm em uma caixa executando um Intel Core i3 com 4 GB de DDR3 1333 mhz de RAM, então estou tentando descobrir qual tamanho de bloco usar. (Vou iniciar o Ubuntu 10.10 x86 a partir de uma unidade flash e executá-lo a partir disso.)
dd
encontrar o melhor tamanho de bloco durante a transferência do arquivoRespostas:
O tamanho ideal do bloco depende de vários fatores, incluindo o sistema operacional (e sua versão) e os vários barramentos e discos de hardware envolvidos. Vários sistemas do tipo Unix (incluindo Linux e pelo menos alguns tipos de BSD) definem o
st_blksize
membro nostruct stat
que fornece o que o kernel pensa que é o tamanho ideal do bloco:A melhor maneira pode ser experimentar: copie um gigabyte com vários tamanhos de bloco e tempo. (Lembre-se de limpar os caches do buffer do kernel antes de cada execução:)
echo 3 > /proc/sys/vm/drop_caches
.No entanto, como regra geral, descobri que um tamanho de bloco grande o suficiente permite
dd
fazer um bom trabalho, e as diferenças entre, digamos, 64 KiB e 1 MiB são menores, em comparação com 4 KiB versus 64 KiB. (Embora, reconhecidamente, já tenha sido um tempo desde que eu fiz isso. Eu uso um mebibyte por padrão agora, ou deixodd
escolher o tamanho.)fonte
Como outros já disseram, não há tamanho de bloco universalmente correto; o que é ideal para uma situação ou uma peça de hardware pode ser terrivelmente ineficiente para outra. Além disso, dependendo da integridade dos discos, pode ser preferível usar um tamanho de bloco diferente do que é "ideal".
Uma coisa que é bastante confiável no hardware moderno é que o tamanho padrão do bloco de 512 bytes tende a ser quase uma ordem de magnitude mais lenta que uma alternativa mais ideal. Na dúvida, descobri que 64K é um padrão moderno bastante sólido. Embora 64K geralmente não seja o tamanho ideal de bloco, na minha experiência, ele tende a ser muito mais eficiente que o padrão. O 64K também tem um histórico bastante sólido de desempenho confiável: Você pode encontrar uma mensagem na lista de discussão Eug-Lug, por volta de 2002, recomendando um tamanho de bloco de 64K aqui: http://www.mail-archive.com/eug- [email protected]/msg12073.html
Para determinar o tamanho ideal do bloco de saída, escrevi o seguinte script que testa a gravação de um arquivo de teste de 128M com dd em um intervalo de tamanhos de bloco diferentes, do padrão de 512 bytes a um máximo de 64M. Esteja avisado, este script usa dd internamente, portanto, use com cuidado.
dd_obs_test.sh:
Ver no GitHub
Eu testei esse script apenas em um sistema Debian (Ubuntu) e no OSX Yosemite, portanto, provavelmente será necessário algum ajuste para fazer funcionar outros tipos de Unix.
Por padrão, o comando criará um arquivo de teste chamado dd_obs_testfile no diretório atual. Como alternativa, você pode fornecer um caminho para um arquivo de teste personalizado, fornecendo um caminho após o nome do script:
A saída do script é uma lista dos tamanhos de bloco testados e suas respectivas taxas de transferência da seguinte forma:
(Nota: a unidade das taxas de transferência variará de acordo com o sistema operacional)
Para testar o tamanho ideal do bloco de leitura, você pode usar mais ou menos o mesmo processo, mas em vez de ler de / dev / zero e gravar no disco, você deve ler do disco e gravar em / dev / null. Um script para fazer isso pode ser assim:
dd_ibs_test.sh:
Ver no GitHub
Uma diferença importante nesse caso é que o arquivo de teste é um arquivo gravado pelo script. Não aponte este comando para um arquivo existente ou o arquivo existente será substituído por zeros!
Para meu hardware em particular, descobri que 128K era o tamanho de bloco de entrada mais ideal em um HDD e 32K era o melhor em um SSD.
Embora esta resposta cubra a maioria das minhas descobertas, já me deparei com essa situação várias vezes em que escrevi uma postagem sobre o blog: http://blog.tdg5.com/tuning-dd-block-size/ Você pode encontrar mais detalhes nos testes que realizei lá.
fonte
dd_obs_test.sh
conv=fsync
não funciona no macOS e pode ser removido.Descobri que meu tamanho ideal de bloco é de 8 MB (igual ao cache do disco?). Precisava limpar (alguns dizem: lavar) o espaço vazio em um disco antes de criar uma imagem compactada. Eu usei:
Eu experimentei valores de 4K a 100M.
Depois de deixar o dd rodar por um tempo, eu o matei (Ctlr + C) e li a saída:
Como o dd exibe a taxa de entrada / saída (19,1 MB / s neste caso), é fácil ver se o valor que você escolheu está executando melhor que o anterior ou pior.
Minhas pontuações:
Nota: Para verificar qual é o tamanho do cache / buffer do disco, você pode usar
sudo hdparm -i /dev/sda
fonte
8M
é difícil de bater.Isso depende totalmente do sistema. Você deve tentar encontrar a solução ideal. Tente começar com
bs=8388608
. (Como os HDDs da Hitachi parecem ter 8 MB de cache).fonte
bs=8M
no GNU / Linux oubs=8m
no BSDbs=8388608
e decréscimo uma vez a cada passo"fonte
fonte