Compressione adattiva alla CPU


10

Supponiamo di dover inviare alcuni dati da un computer a un altro, su una rete piuttosto veloce ... ad esempio una connessione standard a 100 Mb (~ 10 MB / s). Le mie unità disco sono HDD standard, quindi la loro velocità è compresa tra 30 MB / se 100 MB / s. Quindi immagino che la compressione dei dati al volo possa aiutare.

Ma ... non voglio essere limitato dalla CPU. Se scelgo un algoritmo che è intensivo su CPU, il trasferimento in realtà andrà più lentamente che senza compressione.

Questo è difficile con compressori come GZIP e BZIP2 perché di solito imposti la resistenza a compressione una volta per l'intero trasferimento e i miei flussi di dati a volte sono facili, a volte difficili da comprimere: questo rende il processo non ottimale perché a volte non utilizzo la CPU completa, e talvolta la larghezza di banda è sottoutilizzata.

Esiste un programma di compressione che si adatterà all'attuale CPU / larghezza di banda e colpirà il punto ottimale in modo che il trasferimento sia ottimale? Idealmente per Linux, ma sono ancora curioso di sapere tutte le soluzioni. Mi piacerebbe vedere qualcosa di compatibile con i decompressori GZIP / BZIP2, ma questo non è necessario.

Quindi vorrei ottimizzare il tempo totale di trasferimento, non semplicemente la quantità di byte da inviare.

Inoltre non ho bisogno di decompressione in tempo reale ... la compressione in tempo reale è sufficiente. L'host di destinazione può elaborare i dati in un secondo momento nel suo tempo libero. So che questo non cambia molto (la compressione di solito richiede molta più CPU rispetto alla decompressione), ma se esiste una soluzione che potrebbe utilizzare questo fatto, tanto meglio.

Ogni volta che trasferisco dati diversi e voglio davvero effettuare questi trasferimenti una tantum il più rapidamente possibile. Quindi non trarrò beneficio dall'ottenere più trasferimenti più velocemente grazie alla compressione più forte.

Grazie,


1
+1 idea interessante e potenzialmente utile. Se mai dovessi trovare dei buoni modi per farlo, mi piacerebbe saperlo.
David Cary,

Risposte:


3

Questo è un argomento di ricerca attuale, principalmente nell'area delle reti di sensori in cui l'obiettivo è ridurre al minimo il consumo di energia, anziché massimizzare il rendimento. Il principio della compressione adattativa è lo stesso tuttavia.

Ecco un recente articolo di un professore della USC .

Forse potresti provare a implementare il suo algoritmo? Sono sicuro che ci sarebbero molte persone interessate a una buona implementazione.


Mi piacerebbe, se potessi ... qui si applicano i soliti vincoli di tempo umani. Posso ancora essere il primo a provarlo ;-) Grazie per i collegamenti ai documenti, potrei provare a trovare altre persone che potrebbero essere interessate.
liori,

2

Hum, questa domanda è più vecchia di un anno, quindi potrebbe passare inosservata:

Ad ogni modo, Google ha recentemente pubblicato Snappy che potrebbe essere esattamente quello che stai cercando, vale a dire:

[...] Non mira alla massima compressione o compatibilità con qualsiasi altra libreria di compressione; invece, mira a velocità molto elevate e compressione ragionevole. Ad esempio, rispetto alla modalità più veloce di zlib, Snappy è un ordine di grandezza più veloce per la maggior parte degli input, ma i file compressi risultanti sono ovunque dal 20% al 100% più grandi [...]

È implementato in C ++ con collegamenti disponibili per C e una gamma di altre lingue.


Oh, no, non passerà inosservato, almeno da parte mia ;-) E sembra che non sia adattivo nel senso che cerco - è solo veloce.
liori,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.