CPU-adaptive Komprimierung

10

Nehmen wir an, ich muss einige Daten von einem Computer zu einem anderen über ein ziemlich schnelles Netzwerk senden ... zum Beispiel eine Standard-100-Mbit-Verbindung (~ 10 MB / s). Meine Festplatten sind Standard-Festplatten, daher liegt ihre Geschwindigkeit zwischen 30 MB / s und 100 MB / s. Ich denke also, dass das schnelle Komprimieren der Daten helfen könnte.

Aber ... ich möchte nicht durch die CPU eingeschränkt werden. Wenn ich einen Algorithmus wähle, der die CPU stark beansprucht, wird die Übertragung tatsächlich langsamer als ohne Komprimierung.

Dies ist bei Kompressoren wie GZIP und BZIP2 schwierig, da Sie die Komprimierungsstärke normalerweise einmal für die gesamte Übertragung einstellen und meine Datenströme manchmal einfach und manchmal schwer zu komprimieren sind. Dies macht den Prozess suboptimal, da ich manchmal nicht die volle CPU verwende. und manchmal ist die Bandbreite nicht ausgelastet.

Gibt es ein Komprimierungsprogramm, das sich an die aktuelle CPU / Bandbreite anpasst und den Sweet Spot erreicht, damit die Übertragung optimal ist? Ideal für Linux, aber ich bin immer noch neugierig auf alle Lösungen. Ich würde gerne etwas sehen, das mit GZIP / BZIP2-Dekompressoren kompatibel ist, aber das ist nicht notwendig.

Daher möchte ich die Gesamtübertragungszeit optimieren und nicht nur die Anzahl der zu sendenden Bytes.

Außerdem brauche ich keine Echtzeit-Dekomprimierung ... Echtzeit-Komprimierung ist genug. Der Zielhost kann die Daten später in seiner Freizeit verarbeiten. Ich weiß, dass sich daran nicht viel ändert (die Komprimierung ist normalerweise viel CPU-intensiver als die Dekomprimierung), aber wenn es eine Lösung gibt, die diese Tatsache nutzen könnte, umso besser.

Jedes Mal, wenn ich andere Daten übertrage, möchte ich diese einmaligen Übertragungen wirklich so schnell wie möglich durchführen. Ich werde also nicht davon profitieren, wenn mehrere Übertragungen aufgrund der stärkeren Komprimierung schneller erfolgen.

Vielen Dank,

liori
quelle
1
+1 interessante und potenziell nützliche Idee. Wenn Sie jemals gute Möglichkeiten finden, dies zu tun, würde ich gerne davon hören.
David Cary

Antworten:

3

Dies ist ein aktuelles Forschungsthema - vor allem im Bereich der Sensornetzwerke, bei denen das Ziel darin besteht, den Stromverbrauch zu minimieren, anstatt den Durchsatz zu maximieren. Das Prinzip der adaptiven Komprimierung ist jedoch dasselbe.

Hier ist eine aktuelle Arbeit eines Professors am USC .

Vielleicht könnten Sie versuchen, seinen Algorithmus zu implementieren? Ich bin sicher, dass es viele Leute geben würde, die an einer guten Implementierung interessiert sind.

sml
quelle
Ich würde gerne, wenn ich könnte ... hier gelten jedoch die üblichen menschlichen Zeitbeschränkungen. Trotzdem kann ich es als Erster testen ;-) Vielen Dank für Links zu Artikeln, ich könnte versuchen, andere Leute zu finden, die interessiert sein könnten.
Liori
2

Hum, diese Frage ist jetzt älter als ein Jahr, daher kann dies unbemerkt bleiben:

Wie auch immer, Google hat kürzlich Snappy veröffentlicht , das genau das ist, wonach Sie suchen, nämlich:

[...] Es strebt keine maximale Komprimierung oder Kompatibilität mit anderen Komprimierungsbibliotheken an. Stattdessen werden sehr hohe Geschwindigkeiten und eine angemessene Komprimierung angestrebt. Im Vergleich zum schnellsten Modus von zlib ist Snappy für die meisten Eingaben um eine Größenordnung schneller, aber die resultierenden komprimierten Dateien sind zwischen 20% und 100% größer [...]

Es ist in C ++ mit Bindungen implementiert, die für C und eine Reihe anderer Sprachen verfügbar sind.

phw
quelle
Oh nein, es wird nicht unbemerkt bleiben, zumindest von mir ;-) Und es scheint nicht adaptiv in dem Sinne zu sein, wie ich es suche - es ist einfach schnell.
Liori