
En esta publicación quiero compartir mis experimentos con algunas aplicaciones emule, explicar su funcionamiento a nivel de red sólo en referencia a ciertos aspectos concretos (una explicación en profundidad requeriría mucha extensión y además de que no soy ningún experto en emule, quiero ser breve) y sugerir algunos valores para algunos de sus múltiples y complejos parámetros que creo que hacen mejorar notablemente su rendimiento. El artículo está destinado a aquellos que ya tienen funcionando correctamente su emule (no voy a hablar de apertura de puertos) y quieren ver hasta dónde es capaz de llegar. Agradecería comentarios al artículo, tras probar lo que en él se explica. El feed-back siempre es enriquecedor.
- Entorno de comunicaciones cliente/servidor
- Funcionamiento de emule: el p2p que recompensa al más generoso
- Definición de algunos términos que atañen a emule: kad, fuentes, clientes, ping, uss ...
- Los parámetros: imágenes de pantallas de configuración de emule sugeridas.
Entorno de comunicaciones cliente/servidor
El uso de programas de p2p convierte nuestra máquina (ordenador) simultaneamente en cliente, dado que queremos obtener ficheros que otros servidores poséen y en servidor, ya que según vamos obteniendo algunas partes de esos ficheros, también nosotros podemos servirlas a otros clientes. Realmente es una idea genial, pues al hacer posible que todo el mundo pueda ser servidor, eliminamos la dependencia de un lugar centralizado como fuente, siendo todos los clientes a la vez fuentes de otros clientes.
A pesar de la demonización del p2p en algunos sectores, hay que decir que su filosofía de funcionamiento también es utilizada con fines comerciales, por ejemplo con imagenio de telefónica, ya que cada domicilio que lo tiene contratado actúa a la vez como cliente que demanda contenidos y como fuente de contenidos para otros clientes, de esta forma telefónica evita mantener un lugar centralizado del que todos dependan y con gran ancho de banda. Además así telefónica no tiene que pagar la factura de la luz de múltiples discos duros manteniendo contenidos audiovisuales, ya lo hacen sus clientes. ¿Qué pasaría si muchos clientes de imagenio apagaran sus cacharros cuando no los usan para ahorrar en factura de la luz? A mi es que tener un cacharro en casa que no paran de encenderse lucecitas que no controlo y sabiendo encima que anda subiendo información con mi adsl a otros, la verdad me resultaría molesto, pero para gustos los colores.
Fucionamiento de emule: p2p que recompensa al más generoso
Emule se rige por un sistema de créditos, que se consiguen subiendo información, cuanto más sea capaz de subir, más créditos obtendre y ello conllevará que más podré bajar. Los créditos que mi emule ha obtenido no es posible falsearlos, dado que están apuntados en cada uno de los cientos de miles de aplicaciones emule de otros usuarios a los que he subido información. Del mismo modo mi emule tiene créditos apuntados de muchos otros usuarios de los que yo bajé información.
Por ello, con emule, debemos tratar de hacer que nuestra conexión suba al máximo posible, siempre sin llegar a saturarla, dado que si eso ocurriera tampoco podríamos bajar gran cosa. Precisamente la clave de que emule baje bien o baje realmente bien, está en afinar al máximo esta relación entre subida y bajada.
Una descripción más técnica del sistema de créditos podéis encontrarla en www.emule-proyect.net buscando símplemente créditos.
Definición de términos
En este apartado voy a citar los términos a los que hago referencia más adelante, desde luego no todos los que sería necesario explicar para abarcar por completo emule.
Fuente: Identifica a un servidor emule que dispone de ficheros que yo estoy buscando. El número total de fuentes puede verse bajo estadísticas - descargas - sesión. Las fuentes de cada fichero en concreto pueden examinarse sin más que hacer doble clic en ese fichero estando en tráfico. Resulta interesante disponer de una aplicación emule que permita configurar un número máximo de fuentes global y no un número máximo de fuentes por archivo, dado que la velocidad total de bajada dependerá en parte de cuántas fuentes en total tengamos. Limitar las fuentes por archivo es un error, dado que podemos estar perdiendo fuentes en algún archivo y por ello posibilidades de descarga cuando el número total de fuentes puede ser pequeño para las posibilidades de la conexión que tenemos. Desconozco si el emule oficial ya dispone de el parámetro "Global HL" (global hard limit) que limita el número de fuentes global. Se puede encontrar bajo preferencias - mod options - morph, si utilizamos emule MorphXt descargable en http://emulemorph.sourceforge.net/
Kad: Emule utiliza simultáneamente la red ed2k, basada en la existencia de servidores y la red kad, mantenida directamente entre todos las aplicaciones emule, sin necesidad de servidores intermedios. Disponer de la red kad funcionando correctamente es fundamental para aprovechar las posibilidades de emule, dado que el uso de conexiones udp que hace esta red resulta más económico en recursos de red para obtener fuentes o buscar información. Para saber si kad está funcionando correctamente basta intentar buscar algo fácil de encontrar con el método kad y comprobar que se obtienen resultados. También es útil ver que en el apartado kad que tenemos más de 500 contactos y muchos de ellos en verde (pasadas unas horas de funcionamiento). Desde luego no es suficiente con que la segunda flechita del emule esté en verde. Si tenéis un router Xavi 7968r de telefónica, despediros del kad a no ser que lo pongáis en monopuesto ya que por alguna razón este router en modo NAT se come el protocolo udp en presencia de otro tipo de tráfico, vamos que pierde casi todos los paquetes udp, algo realmente fantástico.
uss: son las siglas de "upload sense speed", velocidad de subida sensible. Es un método que recomiendo activar para conseguir que la subida sea la máxima posible en cada momento. Se basa en el sencillo análisis de los tiempos de respuesta de ping, nosotros fijamos un umbral y si se supera dicho límite es que la red está cargada y hay que subir menos y si el umbral no es superado, es que podemos subir más. Aunque las bases son simples, lleva algo de tiempo encontrar los parámetros adecuados para cada conexión y hay que observar un tiempo el comportamiento del emule para acertar con estos parámetros. Los parámetros que funcionan para mi conexión, pueden no ser los adecuados para la de otro, sobre todo el del umbral de ping y los límites máximo y mínimo de subida.
ancho de banda excedente: es el ancho de banda debido a la gestión de las conexiones, es decir todo lo que no es debido a intercambio real de bytes de archivos.
... hay alguno más que probablemente vaya completando más adelante, creo que es interesante publicar ya los parámetros sugeridos ...
Los parámetros ...
Capacidad de subida: podemos encontrarle bajo preferencias - opciones generales - conexión. Para conocer nuestra capacidad real de subida tenemos 2 opciones:
- Hacer un test de velocidad con la conexión parada (sin uso), yo utilizo www.testdevelocidad.es
- Arrancar emule, poner la capacidad de subida muy por encima de nuestra conexión, no limitar la subida y ver hasta dónde es capaz de subir de forma mantenida nada más arrancar (sería ideal que todavía no esté bajando nada). Este segundo método me parece más fiable que el primero. Yo con una ADSL de telefónica 6 Mbps / 320 Kbps, consigo 32 KB de subida mantenidos. (B - Byte, b - bit).

El número máximo de fuentes por archivo aunque está fijado en 700 es ignorado si se fija el anteriormente citado "Global HL"
Conexiones máximas: Este parámetro indica cuántas conexiones a la vez será capaz de realizar emule. Es vital al comenzar nuestra sesión (nada más arrancar emule) dado que es cuando más conexiones es necesario hacer, un número elevado permitirá que emule se ponga a tono más rápido pero no nos dará gran ventaja pasada una hora de funcionamiento. Depende del router que tengamos, 500 conexiones realmente es mucho para algunos routers, se puede limitar a 400 y tampoco vamos a notar gran diferencia. Si vemos que el router se cuelga o resetea, puede ser porque estemos sobrecargándole demasiado con este parámetro.
Nuevas conexiones máximas cada 5 segundos: Creo que el texto del parámetro es suficientemente claro para identificar lo que significa. Por defecto viene configurado a 20, yo recomiendo ponerlo a 30 si nuestro router no se aturulla. Además hay una configuración de Windows que debemos cambiar, lo explico en el siguiente parámetro, que está intrínsecamente relacionado con este.
Máximas conexiones a medio abrir: número de conexiones que mantendremos en periodo de negociación a la vez. Por defecto viene a 9 porque Windows XP admite un máximo de 10. Si queremos buscar fuentes rápidamente y hacer que nuestro emule sea ágil nada más arrancarlo o nada más perder conexión (por un corte de internet), debemos saltarnos esa limitación de XP y poner este parámetro a 50. Para saltarnos la limitación de XP tenemos este patch. Podéis descargarlo sin miedo, seguid las instrucciones y cuando Windows XP te pregunte si deseas sustituir los archivos originales por los nuevos, di que sí. Por defecto la utilidad también pone el límite de Windows a 50.

Ojo, nunca se debe poner este parámetro por encima de 10 sin haber aplicado antes el patch. Abrir la posibilidad a tener 50 conexiones a medio abrir incrementa dramáticamente la velocidad con la que emule se pone en marcha nada más encenderle o tras una caida de red.
Tamaño del buffer por archivo: es el tamaño en memoria ram del que disponemos para ir escribiendo datos que van llegando en bajada para cada archivo que estemos descargando, antes de escribirlos a disco. Cuanto más grande lo pongamos menos hacemos trabajar al disco para poca cosa pero más información perderemos en el caso de que ocurra un desastre. No es un parámetro muy influyente en la velocidad de descarga.
Tamaño de la cola de espera: cuanto más alto sea este parámetro, más clientes tendremos en nuestra cola, lo cuál hará que el sistema de créditos funcione más equitativamente (una cola demasiado pequeña puede dejar fuera a clientes con créditos). He leído que no influye en la subida, pero no me lo creo, si hay clientes en la cola, periódicamente deberán comprobar el estado de mi emule, este valor es relativamente alto y emule funciona bastante bien con él. El tamaño de la cola de espera también consume recursos de ram.
Límite de fuentes global: No merece la pena mantener emule encendido si el número de fuentes es inferior a 3000 (a no ser que estemos descargando de fuentes fuera de España, cuyas velocidades de subida son dignas). Esto puede ser debido a que hemos puesto pocos ficheros a descargar o los ficheros son raros de encontrar. Cada fuente es una cola de clientes en la que estamos esperando a que nos toque, si estamos en 5000 colas es 5 veces más fácil que descarguemos algo que si estamos en 1000. Yo recomendaría acumular ficheros de descarga y cuando en poco tiempo nuestro emule sea capaz de recopilar 5000 o 6000 fuentes, entonces merece la pena mantenerlo encendido unos días, también así ahorraremos energía. Limitando el número de fuentes global a 6000 (esto ya provoca un ancho de banda de subida excedente de 3 o 5 KB) ya estamos poniendo un techo y podemos poner decenas o incluso cientos de descargas simultaneas sin miedo de saturar la conexión. Un límite de fuentes global por encima de 6000 invierte demasiado ancho de banda de subida en la gestión de dichas fuentes por lo que podemos perder créditos y con ello posibilidades de bajada.

uss: es el método para la subida dinámica que recomiendo utilizar, francamente no he probado el otro (suc), vamos a comentar como ajustar sus parámetros. Activarlo sin ajustar perfectamente un máximo de subida (ya comentado antes en el artículo), un mínimo y el valor de ping adecuado, puede conllevar a que los resultados sean peores que no tenerlo activado.
use max ping value: especifica usar el valor en milisegundos de ping como umbral para decidir sobre la velocidad de subida, en lugar de trabajar con la tolerancia de ping.
max ping value: este es el valor crítico que puede variar para cada conexión. uss tiene un problema de implementación y es que cuando se pierden pings, el uss no reacciona y precisamente se pierden pings cuando hay saturación en la línea, justo cuando el uss debería haber reaccionado bajando la subida. Por ello es crítico que fijemos un valor de ping por debajo del umbral a partir del cual se empiezan a perder pings en nuestra línea, pero no demasiado bajo para que el uss pueda detectar correctamente la saturación. Esto sólo podemos ajustarlo observando al uss trabajar un buen rato y probando distintos valores. La traza de las acciones del uss, las podemos ver en la barra inferior del emule en la parte derecha (velocidad de subida seleccionada / ping actual / ping umbral) Un buen valor por el que comenzar podrían ser los 100 ms (más conservador que 120). Si se observa que durante varios minutos la velocidad de subida seleccionada es mayor que la velocidad de subida real que consigue emule y no hay una tendencia a bajarla es que claramente hay saturación y es posible que hayamos seleccionado un valor demasiado alto para el umbral de ping. Del mismo modo, si se observa que el valor de ping actual no cambia, es que se están perdiendo pings, cosa normal de vez en cuando, pero no debe ser mantenido demasiado tiempo.
going up slowness: retardo en milisegundos para hacer que la velocidad de subida aumente. Valores altos en este parámetro conseguirán que emule sea conservador antes de incrementar la velocidad de subida, también consiguen que la velocidad de subida se incremente poco a poco.
going down slowness: retardo en milisegundos para hacer que la velocidad de subida se disminuya. Valores pequeños de este parámetro harán que emule reaccione rápidamente ante saturación en la red, disminuyendo la subida. Como se ve, este sistema dinámico que se conforma con estos parámetros, se recomienda que sea tendente a ser conservador con la subida, disminuyéndola rápidamente ante posible saturación y aumentándola cuidadosamente cuando las condiciones sean favorables. En la práctica lo que se debe ver es que cuando no estamos bajando mucho, sí que subimos mucho, aprovechando nuestra conexión y alrevés, cuando estamos bajando rápidamente, la subida se hace con menos ancho de banda para evitar sobrecargar la línea. Del mismo modo si empezamos a navegar intensivamente con nuestra conexión, veremos que emule educadamente, disminuye el ancho de banda de subida.
max number of pings: basta con 1, no hay necesidad de mandar varios para hacer la media.

Auto-actualizar lista de servidores al iniciar: es fundamental disponer de una lista de servidores fiables en emule, por ello recomiendo marcar esta opción en Preferencias - Opciones generales - Servidor. En el botón de editar debemos escribir la fuente de la lista de servidores que es esta: http://peerates.net/servers.php
Eso es todo, espero que pueda servir para algo.


