Monthly Archive for October, 2007

µTorrent en Linux (III): Tuning TCP/IP

En este nuevo post de mi serie sobre µTorrent en Linux, hablaré de los parametros de kernel que he modificado en mi maquina para intentar optimizar el tema de conexiones.

La verdad es que he cojido estos parametros de algun manual sobre como tunear un servidor para tener un buen rendimiento cuando asume muchas conexiones, lo cual deberia servir en nuestro caso.

Estas lineas se introducen en el fichero /etc/sysctl.conf y para cargarlas usamos el comando: sysctl -p. Ahi van los parametros, con comentarios:

# Enable fast recycling of TIME-WAIT sockets status

net.ipv4.tcp_tw_recycle=1

# tcp_fin_timeout is the time to hold a socket in state
# FIN-WAIT-2 when the socket is closed at the server.

net.ipv4.tcp_fin_timeout=30

# One of the problems found in servers with many simultaneous TCP
# connections is the large number of connections that are open but unused.
# TCP has a keepalive function that probes these connections and
# drops them after tcp_keepalive_time

net.ipv4.tcp_keepalive_time=1800

# max OS send buffer size (wmem) and receive buffer size (rmem)
# for queues on all protocols (8388608=8MB)

net.core.wmem_max=8388608
net.core.rmem_max=8388608

# In addition, you should also use the following commands for send and receive
# buffers. They specify three values: minimum size, initial size, and maximum
# size. The third value must be the same as or less than the value of
# wmem_max and rmem_max.

net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608

# When the server is heavily loaded or has many clients with bad connections
# with high latency, it can result in an increase in half-open connections.
# This is very common for Web servers, especially when there are many dial-up
# users. These half-open connections are stored in the backlog connections
# queue. You should set this value to at least 4096 (the default is 1024).

net.ipv4.tcp_max_syn_backlog=4096

# don't cache ssthresh from previous connection
net.ipv4.tcp_no_metrics_save = 1

Lo cierto es que no tengo datos para comparar si va mejor asi, pero el caso es que a mi me va de fabula!

Blog upgraded to WP2.3

I’ve just upgraded this blog to the latest (to the date) wordpress release, WP2.3. I hope nothing is broken…

µTorrent en Linux (II): Gestión del ancho de banda

Siguiendo con la serie de posts sobre como montar un servidor de bittorent en Linux, hablaré esta vez del tema del ancho de banda.

En efecto, Bittorent es un protocolo muy goloso: en pocas palabras, se suele comer todo el ancho de banda disponible (si le dejas).

Para bajar rapido, eso puede ser genial! Pero si queremos poder hacer algo mas, como navegar por ejemplo, conviene restringir un poco el Bittorrent.

En mi caso, uso el “scheduler” de µTorrent para lograrlo:
* Durante la noche (de 01:00 a 07:00 entre semana, y de 01:00 a 10:00 el fin de semana), cuando no me importa poder navegar o no (porque duermo!), lo dejo en “Full Speed”, es decir que no restrinjo. Si µTorrent tiene algo encolado para bajar/subir, podra disfrutar de todo el ancho de banda disponible.
* El resto del dia, limito el uTorrent a 90kB/s en bajada y 15kB/s en subida, asi no se come todo el ancho de banda.
* Cuando no se esta bajando nada, no suele consumirse casi nada de ancho de banda (logicamente).

utorrent bandwidth scheduler

µTorrent en Linux (I): Introducción

utorrent_logo.pngPara bajar los capitulos de mi series preferidas, no he encontrado ningun cliente Bittorrent mejor que µTorrent:
* es muy pequeño y consume poco
* no necesita instalacion,
* soporta RSS (programar el µTorrent para que baje una serie es mas facil que programar el video!).

Lo malo es que es para Windows. En casa tengo un servidor de ficheros corriendo Debian y esto me obligaba a mantener encendido tambien otro equipo con Windows. En Linux probe Azureus, pero no conseguir hacer funcionar ningun plugin de RSS. Ademas el consumo de Azureus (Java) era mucho mayor.

Hasta que probe µTorrent bajo Wine en Debian, y funciono perfectamente.

Bajamos Wine y µTorrent:

# apt-get install wine
$ wget http://download.utorrent.com/1.7.5/utorrent.exe

En mi caso, como mi Linux hace de servidor, no suele tener conectado ni monitor ni teclado (salvo casos que los necesite). Por lo tanto, no tiene entorno grafico, pero µTorrent (y Wine) necesitan un entorno grafico para correr. Para resolver este problema, he instalado el paquete vncserver.

Es un servidor X que corre en background (frame buffer). Es decir que esta en memoria, no en un monitor. Para poder interactuar con el, lo haremos de forma remota con un cliente VNC. Es perfecto para poder lanzar µTorrent en el servidor.

Para bajar VNCserver:

# apt-get vncserver

En este post, vamos a suponer que lanzo µTorrent en el puerto 4567, con el usuario utorrent.

Abrimos el firewall del linux, para permitir conexiones entrantes al puerto del µTorrent:

# Apertura puerto 4567 para uTorrent
iptables -A INPUT -i eth0 -p tcp --dport 4567 -m state --state NEW -j ACCEPT

Lanzamos el servidor X vncserver. En mi caso, lo lanzo en el display :2 :

utorrent@servidor$ vncserver :2

Vemos que vncserver lanza Xrealvnc con un monton de opciones:

utorrent  10784     1  4 15:22 pts/0    00:10:12 Xrealvnc :2 -desktop X -httpd /usr/share/vnc-java -auth /home/utorrent/.Xauthority -geometry 796x576 -depth 24 -pixelformat bgr888 -rfbwait 120000 -rfbauth /home/utorrent/.vnc/passwd -rfbport 5902 -fp /usr/share/fonts/X11/misc/ -co /etc/X11/rgb

Al abrir el display :2, el servidor VNC escucha en el puerto 5900+2=5902. Para levantar µTorrent, vamos a conectarnos desde otro equipo con un cliente VNC a nuestro servidor (en el cliente indicaremos “servidor::5902″).

Al desconectarnos, no pasara nada, todo lo que teniamos sigue corriendo en el vncserver.

Para lanzar µTorrent, ejecutaremos:

DISPLAY=:2 wine ~/.wine/drive_c/Program\ Files/uTorrent/uTorrent.exe

(En mi caso, he copiado el binario uTorrent.exe en la ruta ~/.wine/drive_c/Program\ Files/).

Si es la primera vez que lanzamos Wine, saldra un pequeño asistente, indicar tipo de equipo “Windows XP”. Luego, configurar el µTorrent. (En mi caso, he conservado la configuracion de µTorrent que tenia bajo Windows, copiando los ficheros de configuracion de µTorrent en la misma ruta que el binario en Linux).

Podemos ver que µTorrent en Linux no requiere muchos recursos:

top - 06:48:06 up 9 days,  9:01,  3 users,  load average: 0.07, 0.26, 0.68
Tasks: 112 total,   2 running, 110 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.3%us,  2.6%sy,  0.0%ni, 94.4%id,  0.3%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:    256972k total,   253344k used,     3628k free,     3672k buffers
Swap:   735852k total,    56760k used,   679092k free,    72680k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
13873 utorrent   18   0 2597m  10m 4948 S  2.3  4.2  31:05.70 uTorrent.exe
13877 utorrent   15   0  4076  712  544 S  1.6  0.3   6:41.99 wineserver

Aqui van algunos pantallazos del µTorrent corriendo en mi Linux:
pict0004.gif pict0005.gif pict0002.gif

En futuros posts hablaré de los siguientes temas:
* notificacion automatica por email de nuevos ficheros bajados,
* scripts arranque/parada: para que arranquen el vncserver y µTorrent cuando arranca la maquina, sin que tengamos que hacer nada nosotros.
* monitorizacion: para que siempre este arriba nuestro servidor µTorrent. Si se cae, volver a levantarlo. (Monitorizacion de puerto y proceso)
* tuning tcp/ip linux: Algunos cambios de parametros de TCP/IP. Dada la naturaleza de Bittorrent, se van a abrir y cerrar muchas conexiones en la maquina. Puede venir bien modificar algunos parametros para optimizar el tema de conexiones.

Que serie veo esta noche?

Con esto de bajar capitulos de serie americanas de la red, uno puede hacerse un lio con tantos capitulos en el disco, que si tengo o no los subtitulos…

Asi que me he hecho un script para saber lo que tengo disponible para ver. El script me dice:
* que series tengo
* cuales son los capitulos que tengo bajados y no he visto
* para cuales me faltan los subtitulos

Este es un ejemplo de salida:

BrothersSisters: 2x00* 2x01
Californication: 1x04  1x05  1x06  1x07  1x08
           Curb: 6x01  6x02  6x03  6x04
   GreysAnatomy: 4x00* 4x01  4x02
         Heroes: 2x01  2x02
   Men_in_Trees: 1x10  1x11  1x12  1x13  1x14  1x15  1x16  1x17
   Prison_Break: 3x03
           Rome: 2x01* 2x02* 2x03* 2x10*
          Weeds: 3x06  3x07  3x08

Dado que la nomenclatura de los capitulos dentro de los nombres de ficheros es un poco variada (401, S04E01, 4×01…) el script intenta reformatearlo en un unico formato: 4×01 (el formato que me gusta). Si no lo detecta, pone “?x??”.

Los capitulos con “*” son aquellos que no tienen subtitulos (o mi script no lo ha detectado).

Para que funcione el script, es necesario un minimo de organizacion:
* los capitulos y subs de una serie en un mismo directorio (con el nombre de la serie),
* todos los directorios de series en un mismo repositorio,
* una vez que he visto un capitulo, lo muevo con su subtitulo a un subdirectorio “vistos” dentro del directorio de esta serie.

Si alguien quiere probar el script, solo tiene que modificar la variable DIR.




Close
Powered by ShareThis