Máquina virtual Xen con servicio web Apache / Windows Vista, problema de conexión lenta

Tengo montado un servidor con soporte Xen, donde he virtualizado un servidor web con Apache. Desde hace un par de días me he dado cuenta que cuando intento acceder a la web usando como cliente Windows (indistintamente del navegador), la conexión era terriblemente lenta, mientras que desde un GNU/Linux la web me cargaba sin problemas.

Llevo casi 2 días obsesionado por ver que era lo que ocurría, el esquema virtualizado es el siguiente:

Internet < ==> | [Host real] ----> redirige puerto 80 ---> [Guest virtualizado] |

En la configuración del servidor securicé el sistema cambiando parámetros del kernel (p.ej. Syn cookies), realizando hardening de Apache, configurando el firewall con iptables, estableciendo QoS, etc… Me he pasado horas cambiando toda esa configuración para determinar el origen del problema.

Dado que había detectado el problema en clientes Windows y no en Linux, supuse que tenia que ser algo a nivel de red TCP. Sin embargo, en cuanto hice pruebas más exaustivas validando la velocidad de descarga, descubrí que si hacía un wget de un fichero del Guest la velocidad de bajada era como mucho 7 Kb/s, mientras que si el fichero lo situaba en el Host real, podia descargar a la velocidad máxima.

Por tanto aislé el problema a la red Xen y conseguí dar con la solución en este post. Basta con ejecutar en el guest:

/usr/sbin/ethtool -K eth0 tx off

Si explico toda la historia y no voy directo al grano es porque me llama la atención no haber percibido ese problema desde un cliente Linux. No llego a entender muy bien el motivo, a primera vista parece razonable deducir que la pila TCP/IP de Linux es bastante más óptima y se comporta mejor con conexiones lentas.

De hecho, mientras buscaba soluciones identifiqué un problema de Windows Vista con la ventana TCP que puede aparecer en función de los dispositivos de red por los que viaje el tráfico. Para ver la configuración actual en Windows:

netsh interface tcp show global

Resultado:

TCP Global Parameters
———————————————-
Receive-Side Scaling State : enabled
Chimney Offload State : disabled
Receive Window Auto-Tuning Level : highlyrestricted
Add-On Congestion Control Provider : none
ECN Capability : disabled
RFC 1323 Timestamps : disabled 

Probé a desactivar el auto-tuning de la ventana:

netsh interface tcp set global autotuning=disabled

Pero no tuve suerte, dado que esta no era la fuente del problema. No obstante, viene bien conocer esa problemática porque en redes de algunos clientes si he tenido problemas de velocidad y quizás esto pueda mejorarlo.

Leave a Reply

Your email address will not be published. Required fields are marked *