Limite el ancho de banda entrante y saliente y la latencia en Linux

15

Me doy cuenta de que ya se han hecho muchas preguntas similares, pero hasta ahora todavía no he encontrado una solución a mi problema.

Tengo un servidor Linux virtual (que ejecuta Debian Squeeze) que uso para probar las velocidades del sitio web con el fin de medir el aumento y la disminución del tiempo de carga de dichos sitios web. Estoy tratando de limitar el ancho de banda y la latencia de este servidor para poder acercarme a los tiempos de carga del mundo real en los sitios web, pero hasta ahora he fallado.

Lo que quiero específicamente es lo siguiente:

  • Para establecer una latencia entrante y saliente de 50 ms.
  • Para establecer un límite de ancho de banda entrante de 512 kbps.
  • Para establecer un límite de ancho de banda saliente de 4096 kbps.

He estado leyendo sobre netem y usando el tccomando, pero todavía está todo un poco sobre mi cabeza. Me las arreglé para armar este comando para controlar la latencia que parece funcionar, pero ni siquiera estoy seguro de si eso solo maneja la latencia saliente o ambas:

tc qdisc add dev eth0 root netem delay 50ms

¿Algún gurú de la red que me pueda ayudar?

Editar:

Después de una mayor investigación, he llegado a la mitad de mi objetivo, usando este comando todo el tráfico saliente se comporta como quiero:

tc qdisc add dev eth0 root tbf rate 4.0mbit latency 50ms burst 50kb mtu 10000

Sin embargo, todavía no he podido regular el tráfico entrante correctamente. Aprendí que se supone que debo usar un "filtro Ingress Policer". Intenté hacer eso con el siguiente comando, jugando con diferentes valores, pero sin suerte.

tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match ip src 0.0.0.0/0 flowid :1 police rate 1.0mbit mtu 10000 burst 10k drop

Sin embargo, el ancho de banda se ve afectado por el comando, los valores anteriores hacen que la velocidad comience a 2 MB / sy, a medida que avanza una transferencia, cayendo lentamente a alrededor de 80-90 kB / s, que alcanza después de aproximadamente 30 segundos de transferencia.

¿Alguna idea sobre lo que estoy haciendo mal?

yzfr1
fuente
netem delay 50msNo limita la latencia. Aumenta la latencia en 50mscomparación con lo que de otro modo hubiera sido.
kasperd
De hecho tienes razón. Se eliminó el límite de palabras porque en realidad estaba buscando un aumento de 50 ms (ya que era una máquina virtual en la misma computadora, la latencia original era lo suficientemente cercana a 0 de todos modos)
yzfr1

Respuestas:

12

Finalmente decidí simplemente configurar el ancho de banda / latencia saliente en el servidor, y luego hacer lo mismo en el cliente, logrando efectivamente el mismo resultado.

Estos son los comandos que ejecuté en el servidor y el cliente respectivamente para alcanzar mis objetivos:

Servidor: 4 Mbit 50 ms

tc qdisc add dev eth0 handle 1: root htb default 11
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 4Mbit
tc qdisc add dev eth0 parent 1:11 handle 10: netem delay 50ms

Cliente: 512 kbit 50 ms

tc qdisc add dev vmnet1 handle 1: root htb default 11
tc class add dev vmnet1 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev vmnet1 parent 1:1 classid 1:11 htb rate 512kbit
tc qdisc add dev vmnet1 parent 1:11 handle 10: netem delay 50ms
yzfr1
fuente
He estado buscando esto por meses. Gracias. ¿Una pregunta? ¿Cómo eliminas la regla? tc class del dev eth0 root muestra respuestas RTNETLINK: No existe tal archivo o directorio
Nur
Fue hace unos meses, pero parece recordar que fue suficiente para eliminar qdisc: tc qdisc del dev eth0 root
yzfr1
2

Unos 80-90 kByte / s son acerca de qué esperar de

    tc filter add ... police rate 1.0mbit ...

Pide que los datos entrantes se descarten cuando lleguen a 1 mBit / s, es decir, aproximadamente 125 kByte / s. El servidor remoto se reducirá considerablemente a eso (tal vez la mitad, no estoy seguro). Después de eso, todos los paquetes llegan, por lo que el extremo remoto aumenta lentamente la velocidad hasta alcanzar nuevamente 125 kByte / s. Obtiene un rendimiento promedio considerablemente inferior a 125 kByte / s, que es típico de la configuración de ingreso.

Estoy un poco sorprendido de que la velocidad alcance los 2 MByte / s con el filtro de política de ingreso ya implementado. ¿Dónde midió: en el cliente descendente (programa) o en algún enrutador ascendente? ¿O tal vez comenzó por primera vez la conexión y solo después de haber activado el filtro de política de ingreso?

amante anónimo de linux
fuente