O primeiro passo é descobrir qual é o gargalo: é E / S de disco, E / S de rede ou CPU?
Se o gargalo é o disco de E / S, não há muito o que fazer. Certifique-se de que os discos não atendam a muitas solicitações paralelas, pois isso só pode diminuir o desempenho.
Se o gargalo for a E / S da rede, execute o processo de compactação na máquina em que os arquivos estão armazenados: executá-lo em uma máquina com uma CPU mais robusta só ajuda se a CPU for o gargalo.
Se o gargalo é a CPU, a primeira coisa a considerar é usar um algoritmo de compactação mais rápido. Bzip2 não é necessariamente uma má escolha - sua principal fraqueza é a velocidade de descompactação - mas você pode usar o gzip e sacrificar algum tamanho pela velocidade de compressão, ou experimentar outros formatos como lzop ou lzma. Você também pode ajustar o nível de compactação: o padrão do bzip2 é -9
(tamanho máximo do bloco, portanto compactação máxima, mas também tempo de compactação mais longo); defina a variável de ambiente BZIP2
para um valor como -3
para testar o nível de compactação 3. Este tópico e este fio discute algoritmos comuns de compressão; em particular esta postagem no blog citada pela derobert fornece alguns valores de referência que sugerem que gzip -9
ou bzip2
com um nível baixo pode ser um bom compromisso em comparação com bzip2 -9
. Esta outra referência que também inclui o lzma (o algoritmo do 7zip, então você pode usar 7z
em vez de tar --lzma
) sugere que lzma
em um nível baixo pode atingir a taxa de compactação bzip2 mais rapidamente. Qualquer outra opção além do bzip2 irá melhorar o tempo de descompressão. Lembre-se de que a taxa de compactação depende dos dados, e a velocidade de compactação depende da versão do programa de compactação, de como ela foi compilada e da CPU em que ela é executada.
Outra opção, se o gargalo for a CPU e você tiver vários núcleos, é paralelizar a compactação. Existem duas maneiras de fazer isso. Um que funciona com qualquer algoritmo de compactação é compactar os arquivos separadamente (individualmente ou em alguns grupos) e usar parallel
para executar os comandos de arquivamento / compactação em paralelo. Isso pode reduzir a taxa de compactação, mas aumenta a velocidade de recuperação de um arquivo individual e funciona com qualquer ferramenta. A outra abordagem é usar uma implementação paralela da ferramenta de compactação; este tópico lista vários.