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,
la source
Réponses:
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.
la source
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 est implémenté en C ++ avec des liaisons disponibles pour C et une gamme d'autres langages.
la source