Compressão adaptável à CPU

10

Vamos supor que eu preciso enviar alguns dados de um computador para outro, através de uma rede muito rápida ... por exemplo, conexão padrão de 100Mbit (~ 10MB / s). As minhas unidades de disco são HDD padrão, por isso a sua velocidade está entre 30MB / se 100MB / s. Então eu acho que comprimir os dados na hora pode ajudar.

Mas ... eu não quero ser limitado pela CPU. Se eu escolher um algoritmo que seja intensivo na CPU, a transferência será realmente mais lenta do que sem compactação.

Isso é difícil com compressores como GZIP e BZIP2 porque você costuma configurar a força de compressão uma vez para toda a transferência, e meus fluxos de dados são às vezes fáceis, às vezes difíceis de compactar - isso torna o processo sub-ótimo porque às vezes eu não uso CPU completa e às vezes a largura de banda é subutilizada.

Existe um programa de compressão que se adapte à atual CPU / largura de banda e acerte o ponto ideal para que a transferência seja ideal? Idealmente para Linux, mas ainda estou curioso sobre todas as soluções. Eu adoraria ver algo compatível com os descompressores GZIP / BZIP2, mas isso não é necessário.

Então, eu gostaria de otimizar o tempo total de transferência, não apenas a quantidade de bytes para enviar.

Também não preciso de descompressão em tempo real ... a compressão em tempo real é suficiente. O host de destino pode processar os dados posteriormente em seu tempo livre. Eu sei que isso não muda muito (a compactação geralmente exige muito mais da CPU do que a descompactação), mas se houver uma solução que possa usar esse fato, melhor ainda.

Cada vez que estou transferindo dados diferentes, quero realmente fazer essas transferências únicas o mais rápido possível. Por isso, não me beneficiarei de obter várias transferências mais rapidamente devido à compactação mais forte.

Obrigado,

liori
fonte
1
Uma ideia interessante e potencialmente útil. Se você encontrar algumas boas maneiras de fazer isso, eu gostaria de ouvir sobre isso.
David Cary

Respostas:

3

Este é um assunto atual de pesquisa - principalmente na área de redes de sensores, onde o objetivo é minimizar o uso de energia, em vez de maximizar o rendimento. O princípio da compressão adaptativa é o mesmo no entanto.

Aqui é um artigo recente de um professor na USC .

Talvez você possa tentar implementar o algoritmo dele? Tenho certeza de que haveria muitas pessoas interessadas em uma boa implementação.

sml
fonte
Eu adoraria, se eu pudesse ... as restrições usuais de tempo humano se aplicam aqui. Ainda assim, posso ser o primeiro a testá-lo ;-) Obrigado por links para artigos, posso tentar encontrar outras pessoas que possam estar interessadas.
liori
2

Hum, essa questão já tem mais de um ano, então isso pode passar despercebido:

De qualquer forma, o Google publicou recentemente Mal-humorado isso pode ser exatamente o que você está procurando, a saber:

[...] Ele não tem como objetivo a compactação máxima ou a compatibilidade com qualquer outra biblioteca de compactação; Em vez disso, ele aponta para velocidades muito altas e compressão razoável. Por exemplo, comparado com o modo mais rápido do zlib, o Snappy é uma ordem de magnitude mais rápida para a maioria das entradas, mas os arquivos compactados resultantes estão entre 20% e 100% maiores [...]

É implementado em C ++ com ligações disponíveis para C e uma variedade de outras linguagens.

phw
fonte
Oh, não, não será despercebido, pelo menos por mim ;-) E parece que não é adaptativo no sentido que eu procuro - é apenas rápido.
liori