Utilitário GZIP mais rápido

18

Estou procurando o gziputilitário mais rápido (ou zip). Eu tenho um volume LVM que 95% existe em branco 0, então comprimir é muito fácil. Estou procurando a solução mais rápida e realmente não ligo para a compressão, exceto a 0.

Estou ciente gzip -1(igual a gzip --fast), mas queria saber se existe algum método mais rápido.

Obrigado.

Edit: depois de alguns testes, eu comparei gzip -1, lzop -1e pigz -1com o outro e chegou aos seguintes resultados:

PIGZ:

time dd if=/dev/VPS/snap | pigz -1 | ssh backup-server "dd of=/home/backupvps/snap.pigz"

104857600+0 records in
104857600+0 records out
53687091200 bytes (54 GB) copied, 2086.87 seconds, 25.7 MB/s
7093985+266013 records in
7163950+1 records out
3667942715 bytes (3.7 GB) copied, 2085.75 seconds, 1.8 MB/s

real    34m47.147s

LZOP:

time dd if=/dev/VPS/snap | lzop -1 | ssh backup-server "dd of=/home/backupvps/snap.lzop"

104857600+0 records in
104857600+0 records out
53687091200 bytes (54 GB) copied, 1829.31 seconds, 29.3 MB/s
7914243+311979 records in
7937728+1 records out
4064117245 bytes (4.1 GB) copied, 1828.08 seconds, 2.2 MB/s

real    30m29.430s

GZIP:

time dd if=/dev/VPS/snap | gzip -1 | ssh backup-server "dd of=/home/backupvps/snap_gzip.img.gz

104857600+0 records in
104857600+0 records out
53687091200 bytes (54 GB) copied, 1843.61 seconds, 29.1 MB/s
7176193+42 records in
7176214+1 records out
3674221747 bytes (3.7 GB) copied, 1842.09 seconds, 2.0 MB/s

real    30m43.846s

Edição 2 :

Isso não está relacionado à minha pergunta inicial, no entanto, usando time dd if=/dev/VPS/snap | lzop -1 | ssh backup-server "dd of=/home/backupvps/snap.lzop"(tamanho do bloco alterado para 16M) o tempo é reduzido para real 18m22.442s!

Devator
fonte
11
Cuidado: é um pouco injusto usar timedessa maneira. A taxa de transferência do dd usada pigzé menor que os outros dois.
Henk
@ Devator: olhando os horários, pode-se concluir que agora empurrar bytes pelo túnel ssh criptografado é o gargalo. você tentou usar ssh com a bandeira "-c" (compressão) e deixou o pré-compressor fora da equação? você também pode mudar para um algoritmo de criptografia mais rápido. Afora isso: re-referência sem o ssh-túnel (por exemplo, usando / dev / null como o dissipador de saída)
akira
Como nota de rodapé, você poderia usar um arquivo esparso ? Então os zeros não ocupariam espaço no disco. Sua compressão também seria mais rápido porque os zeros seria interpolado pelo driver sistema de arquivos (e não teria de ser lido a partir do disco.)
Li-Aung Yip
@ Li-aungYip Acho que não, pois os "arquivos" são volumes LVM.
Devator
Ah entendo. Continue!
Li-aung Yip 15/03/2012

Respostas:

14

Se você não se importa em se afastar do DEFLATE, lzopé uma implementação do LZO que favorece a velocidade sobre a taxa de compactação.

Ignacio Vazquez-Abrams
fonte
11
ou .. snappy: code.google.com/p/snappy
akira
Obrigado, eu achei lzopo mais rápido no meu cenário. É mais rápido do que de pigzalguma forma (provavelmente devido ao lote de 0).
Devator
23

Embora eu pessoalmente ainda não o tenha usado, acho que o uso do gzip paralelo pode acelerar um pouco as coisas:

O pigz, que significa implementação paralela do gzip, é um substituto totalmente funcional para o gzip que explora vários processadores e vários núcleos ao máximo ao compactar dados.

Pascal
fonte
11
Eu o uso rotineiramente e recomendo o pigz se houver vários núcleos disponíveis. Além de alterar o nível de compactação, esse é de longe o meio mais acessível e direto de acelerar a compactação.
jgrundstad
3
O site parece um pouco estranho. Mas não se deixe enganar por isso, o pigz foi escrito por Mark Adler, um dos desenvolvedores do gzip e do zlib.
so_mv
Parece que o projeto está abandonado neste momento.
AlexLordThorsen
Eu prefiro pensar nisso como "estável". Ele não é atualizado com frequência, mas é atualizado.
Alan De Smet
7

Você pode tentar o Parallel Gzip (Pascal vinculado), ou Parallel BZIP.
Em teoria, o BZIP é muito melhor para texto, então você pode tentar o pbzip .

Apache
fonte
2

Seu disco está limitado a 30 MB / s

Todos os compressores fazem bem o suficiente. Você pode até reduzir a transferência de rede usando o bzip2 mais lento, mas onipresente.

$dd if=/dev/zero bs=2M count=512 | pigz -1 | dd > /dev/null
512+0 records in
512+0 records out
1073741824 bytes (1.1 GB) copied, 9.12679 s, 118 MB/s
8192+7909 records in
9488+1 records out
4857870 bytes (4.9 MB) copied, 9.13024 s, 532 kB/s
$dd if=/dev/zero bs=2M count=512 | bzip2 -1 | dd > /dev/null
512+0 records in
512+0 records out
1073741824 bytes (1.1 GB) copied, 37.4471 s, 28.7 MB/s
12+1 records in
12+1 records out
6533 bytes (6.5 kB) copied, 37.4981 s, 0.2 kB/s
$dd if=/dev/zero bs=2M count=512 | gzip -1 | dd > /dev/null
512+0 records in
512+0 records out
1073741824 bytes (1.1 GB) copied, 14.305 s, 75.1 MB/s
9147+1 records in
9147+1 records out
4683762 bytes (4.7 MB) copied, 14.3048 s, 327 kB/s

Você já considerou rsync? Faz soma de verificação e depois fecha apenas a diferença.

ZaB
fonte
11
Meu disco não está limitado a 30 MB / s. Acabei de executar seu teste: pigz -1: 1073741824 bytes (1.1 GB) copied, 8.6779 seconds, 124 MB/se gzip -1: 1073741824 bytes (1.1 GB) copied, 11.6724 seconds, 92.0 MB/s. Eu pensei em rsync, mas isso verificaria o arquivo diferenciado e provavelmente não ajudaria, pois na maioria das vezes muito mudou.
Devator
Se você estiver transferindo zeros, veja como é impressionante a codificação bzip2 em comparação. De que lado você mede a velocidade .... 4Mbit / s de pigz pode ser demais para uma linha DSL comum ... Ele fica ainda pior se o seu disco é tão rápido.
ZaB 18/03
2

Re: lzop é mais lento na sua configuração std ... Tweaking pode metade do tempo. Mas há uma substituição ainda mais rápida chamada blosc:

https://github.com/FrancescAlted/blosc

Hmm ... O tempo que levou para postar isso e obter respostas provavelmente é pelo menos o dobro da economia de tempo que você terá ... Agora, desculpe-me enquanto recompilar meu kernel para eliminar outros .1s do meu tempo de inicialização dos 2s.

technosaurus
fonte