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,
fuente
Respuestas:
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.
fuente
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:
Se implementa en C ++ con enlaces disponibles para C y una variedad de otros lenguajes.
fuente