How-to / Cómo limitar el uso de ancho de banda para programas ejecutados desde consola
Publicado por yylex en Abril 24, 2008
Creo que muchos usuarios de Debian, o por lo menos Ubuntu han deseado poder limitar la velocidad máxima de descarga de programas como el apt a la hora de realizar una larga actualización/instalación.
Por lo visto, apt no tiene característica alguna out of the box para limitar el ancho de banda, tampoco he encontrado algo similar al –limit-rate de wget, aunque me encontré con trickle.
¿Qué es trickle? Según la descripción de que podemos encontrar en la página:
trickle is a portable lightweight userspace bandwidth shaper. It can run in collaborative mode (together with trickled) or in stand alone mode.
¿Cómo funciona?
trickle works by taking advantage of the unix loader preloading. Essentially it provides, to the application, a new version of the functionality that is required to send and receive data through sockets. It then limits traffic based on delaying the sending and receiving of data over a socket. trickle runs entirely in userspace and does not require root privileges.
Si se ejecuta un comando desde consola por medio de trickle, éste cargará las librerías relacionadas con los socket de red para tal aplicación por si sola y forzará un un rango (rate) máximo de subida y bajada.
Por ejemplo:
# trickle -s -d 50 apt-get dist-upgrade
de esta forma apt-get se mantendrá aproximadamente a un rango de 50kB/s aunque hasta ahora me ha variado entre 50 y 70kB/s. Ya con esto se puede dejar que apt-get haga su trabajo sin interrumpir la navegación del usuario o cualquier otro uso que le de a su ancho de banda.
Para evitar la parte de RTFH:
Usage: trickle [-hvVs] [-d <rate>] [-u <rate>] [-w <length>] [-t <seconds>]
[-l <length>] [-n <path>] command ...
-h Help (this)
-v Increase verbosity level
-V Print trickle version
-s Run trickle in standalone mode independent of trickled
-d <rate> Set maximum cumulative download rate to <rate> KB/s
-u <rate> Set maximum cumulative upload rate to <rate> KB/s
-w <length> Set window length to <length> KB
-t <seconds> Set default smoothing time to <seconds> s
-l <length> Set default smoothing length to <length> KB
-n <path> Use trickled socket name <path>
-L <ms> Set latency to <ms> milliseconds
Inconveniente: El único que he encontrado hasta ahora es que el proceso del http (de éste es que se vale el apt para hacer el fetch) se va hasta la v**** en uso del CPU. Por lo demás está bien.
Jaime escribió
Estoy montando equipos para brindar servicio de Internet por vía inalámbrica a mi comunidad, pero necesito saber como puedo hacer en un server debian para limitar el ancho de banda para cada usuario (tengo usuarios que deben conectarse máximo a 256 kbps, otros a 512 kbps) y la segunda pregunta es cual seria la mamnera mas eficiente para evitar el excesivo consumod e ancho de banda por parte de programas p2p (limewire, ares, etc).
Gracias