Compresión adaptativa de CPU

10

Supongamos que necesito enviar algunos datos de una computadora a otra, a través de una red bastante rápida ... por ejemplo, una conexión estándar de 100Mbit (~ 10MB / s). Mis unidades de disco son HDD estándar, por lo que su velocidad oscila entre 30 MB / sy 100 MB / s. Así que supongo que comprimir los datos sobre la marcha podría ayudar.

Pero ... no quiero estar limitado por la CPU. Si elijo un algoritmo que es intensivo en la CPU, la transferencia en realidad será más lenta que sin compresión.

Esto es difícil con compresores como GZIP y BZIP2 porque generalmente establece la fuerza de compresión una vez para toda la transferencia, y mis flujos de datos a veces son fáciles, a veces difíciles de comprimir; esto hace que el proceso sea subóptimo porque a veces no uso CPU completa, y a veces el ancho de banda está infrautilizado.

¿Existe un programa de compresión que se adapte a la CPU / ancho de banda actual y llegue al punto óptimo para que la transferencia sea óptima? Idealmente para Linux, pero todavía tengo curiosidad por todas las soluciones. Me encantaría ver algo compatible con los descompresores GZIP / BZIP2, pero esto no es necesario.

Por lo tanto, me gustaría optimizar el tiempo de transferencia total, no simplemente la cantidad de bytes para enviar.

Además, no necesito descompresión en tiempo real ... la compresión en tiempo real es suficiente. El host de destino puede procesar los datos más tarde en su tiempo libre. Sé que esto no cambia mucho (la compresión suele ser mucho más intensiva en CPU que la descompresión), pero si hay una solución que podría usar este hecho, mucho mejor.

Cada vez que estoy transfiriendo datos diferentes, y realmente quiero hacer estas transferencias únicas lo más rápido posible. Por lo tanto, no me beneficiaré de obtener transferencias múltiples más rápido debido a una compresión más fuerte.

Gracias,

liori
fuente
1
+1 idea interesante y potencialmente útil. Si alguna vez encuentras algunas buenas maneras de hacer esto, me gustaría saberlo.
David Cary

Respuestas:

3

Este es un tema de investigación actual, principalmente en el área de redes de sensores donde el objetivo es minimizar el uso de energía, en lugar de maximizar el rendimiento. Sin embargo, el principio de compresión adaptativa es el mismo.

Aquí hay un artículo reciente de un profesor de la USC .

¿Quizás podrías intentar implementar su algoritmo? Estoy seguro de que habría muchas personas interesadas en una buena implementación.

sml
fuente
Me encantaría, si pudiera ... las restricciones habituales de tiempo humano se aplican aquí. Aún así puedo ser el primero en probarlo ;-) Gracias por los enlaces a los documentos, podría intentar encontrar otras personas que puedan estar interesadas.
liori
2

Hum, esta pregunta tiene más de un año, por lo que puede pasar desapercibida:

De todos modos, Google ha publicado recientemente Snappy que puede ser exactamente lo que estás buscando, a saber:

[...] No tiene como objetivo la máxima compresión o compatibilidad con ninguna otra biblioteca de compresión; en cambio, apunta a velocidades muy altas y una compresión razonable. Por ejemplo, en comparación con el modo más rápido de zlib, Snappy es un orden de magnitud más rápido para la mayoría de las entradas, pero los archivos comprimidos resultantes son entre un 20% y un 100% más grandes [...]

Se implementa en C ++ con enlaces disponibles para C y una variedad de otros lenguajes.

phw
fuente
Oh, no, no pasará desapercibido, al menos para mí ;-) Y parece que no es adaptativo en el sentido que busco, es simplemente rápido.
liori