Compression adaptative au processeur

10

Supposons que j'ai besoin d'envoyer des données d'un ordinateur à un autre, sur un réseau assez rapide ... par exemple une connexion standard à 100 Mbits (~ 10 Mo / s). Mes disques durs sont des disques durs standard, donc leur vitesse se situe entre 30 Mo / s et 100 Mo / s. Je suppose donc que la compression des données à la volée pourrait aider.

Mais ... je ne veux pas être limité par le CPU. Si je choisis un algorithme intensif sur CPU, le transfert sera en fait plus lent que sans compression.

C'est difficile avec des compresseurs comme GZIP et BZIP2 car vous définissez généralement la force de compression une fois pour tout le transfert, et mes flux de données sont parfois faciles, parfois difficiles à compresser - cela rend le processus sous-optimal car parfois je n'utilise pas le processeur complet, et parfois la bande passante est sous-utilisée.

Existe-t-il un programme de compression qui s'adapterait à la CPU / bande passante actuelle et atteindrait le point idéal pour que le transfert soit optimal? Idéalement pour Linux, mais je suis toujours curieux de toutes les solutions. J'aimerais voir quelque chose de compatible avec les décompresseurs GZIP / BZIP2, mais ce n'est pas nécessaire.

Je voudrais donc optimiser le temps de transfert total, pas simplement la quantité d'octets à envoyer.

De plus, je n'ai pas besoin de décompression en temps réel ... la compression en temps réel est suffisante. L'hôte de destination peut traiter les données plus tard pendant son temps libre. Je sais que cela ne change pas beaucoup (la compression est généralement beaucoup plus gourmande en CPU que la décompression), mais s'il existe une solution qui pourrait utiliser ce fait, tant mieux.

Chaque fois que je transfère des données différentes, je souhaite vraiment effectuer ces transferts uniques le plus rapidement possible. Je ne bénéficierai donc pas d'obtenir plusieurs transferts plus rapidement en raison d'une compression plus forte.

Merci,

liori
la source
1
+1 idée intéressante et potentiellement utile. Si jamais vous trouvez de bonnes façons de le faire, j'aimerais en entendre parler.
David Cary

Réponses:

3

Il s'agit d'un sujet de recherche actuel - principalement dans le domaine des réseaux de capteurs où l'objectif est de minimiser la consommation d'énergie, plutôt que de maximiser le débit. Le principe de la compression adaptative est cependant le même.

Voici un article récent d'un professeur de l'USC .

Peut-être pourriez-vous essayer d'implémenter son algorithme? Je suis sûr que de nombreuses personnes seraient intéressées par une bonne mise en œuvre.

sml
la source
J'adorerais, si je pouvais ... les contraintes habituelles de temps humain s'appliquent ici cependant. Je peux quand même être le premier à le tester ;-) Merci pour les liens vers les articles, je pourrais essayer de trouver d'autres personnes qui pourraient être intéressées.
liori
2

Hum, cette question a plus d'un an maintenant, donc cela peut passer inaperçu:

Quoi qu'il en soit, Google a récemment publié Snappy qui pourrait être exactement ce que vous recherchez, à savoir:

[...] Il ne vise pas la compression maximale, ni la compatibilité avec toute autre bibliothèque de compression; il vise plutôt des vitesses très élevées et une compression raisonnable. Par exemple, par rapport au mode le plus rapide de zlib, Snappy est un ordre de grandeur plus rapide pour la plupart des entrées, mais les fichiers compressés résultants sont de 20% à 100% plus gros [...]

Il est implémenté en C ++ avec des liaisons disponibles pour C et une gamme d'autres langages.

phw
la source
Oh, non, ça ne passera pas inaperçu, du moins par moi ;-) Et il semble que ce ne soit pas adaptatif dans le sens que je recherche - c'est juste rapide.
liori