compactação adaptável à CPU

10

Vamos supor que preciso enviar alguns dados de um computador para outro, através de uma rede bastante rápida ... por exemplo, conexão padrão de 100Mbit (~ 10MB / s). As minhas unidades de disco são de série, pelo que 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á 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 cheia e, às vezes, a largura de banda é subutilizada.

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

Portanto, 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 muito mais intensa que a descompactação), mas se houver uma solução que possa usar esse fato, melhor ainda.

Sempre 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 strong.

Obrigado,

    
por liori 13.06.2010 / 00:48

2 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 implementar o algoritmo dele? Tenho certeza de que haveria muitas pessoas interessadas em uma boa implementação.

    
por 17.06.2010 / 18:52
2

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

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

[...] It does not aim for maximum compression, or compatibility with any other compression library; instead, it aims for very high speeds and reasonable compression. For instance, compared to the fastest mode of zlib, Snappy is an order of magnitude faster for most inputs, but the resulting compressed files are anywhere from 20% to 100% bigger [...]

Ele é implementado em C ++ com ligações disponíveis para C e vários outros idiomas.

    
por 22.08.2011 / 13:42