Limitar el ancho de banda de la interfaz con tc en Linux

8

Tengo un enrutador de Linux que tiene una interfaz de 10 GBe en el exterior e interfaces Gigabit Ethernet en el interior.

Actualmente tenemos un presupuesto de 2GBit / s. Si superamos esa tasa en más del 5% del promedio durante un mes, se nos cobrará la capacidad total de 10 Gbit / s. Todo un paso adelante en términos de dólares.

Entonces, quiero limitar esto a 2GBit / s en la interfaz de 10GBe.

El filtro TBF puede ser ideal, pero este comentario es preocupante.

En todas las plataformas, excepto Alpha, es capaz de configurar hasta 1mbit / s de tráfico normal con una ráfaga mínima ideal, enviando datos exactamente a las velocidades configuradas.

¿Debo usar TBF o algún otro filtro para aplicar esta velocidad a la interfaz y cómo lo haría? No entiendo el ejemplo dado aquí: COMO de Control de Tráfico

En particular, "Ejemplo 9. Crear un TBF de 256kbit / s"

tc qdisc add dev eth0 handle 1:0 root dsmark indices 1 default_index 0
tc qdisc add dev eth0 handle 2:0 parent 1:0 tbf burst 20480 limit 20480 mtu 1514 rate 32000bps

¿Cómo se calcula la velocidad de 256K bit / s? En este ejemplo, 32000bps = 32k bytes por segundo. Como tc usa bps = bytes por segundo. Supongo que la explosión y el límite entran en juego, pero ¿cómo elegirías números razonables para alcanzar la tasa deseada?

Esto no es un error. Probé esto y dio una tasa cercana a 256K pero no exactamente eso.


EDITAR

Después de leer y probar mucho, llegué a la conclusión de que TBF es inapropiado debido al ancho de banda involucrado. Cualquiera que sea la configuración que probé, no pude obtener TBF para proporcionar ancho de banda> ~ 50Mbit / s. De acuerdo con lartc.org/lartc.pdf, el método RED es mejor para dar forma al ancho de banda> 100Mbit / s, así que intentaré usarlo.

Sin embargo, elegir el valor a para min (es decir, Tamaño de cola promedio en el que el marcado se convierte en una posibilidad). El ejemplo dado es este:

Debe establecer el mínimo calculando la latencia de cola base más alta aceptable que desee y multiplíquela por su ancho de banda. Por ejemplo, en mi enlace RDSI de 64 kbit / s, es posible que desee una latencia de cola base de 200 ms, así que configuré un mínimo de 1600 bytes.

  1. ¿Cómo elegiría la latencia de cola base más alta aceptable? El ejemplo es para 64kbit / s.

  2. ¿Qué sería aceptable para 2 Gbit / s?

Mate
fuente

Respuestas:

2
  1. Debe elegir una latencia de cola aceptable según el tipo de tráfico.

    • Por ejemplo, para las colas de voz de más de 200 ms ya es un problema.
    • Si bien tener un búfer de 500 ms para el tráfico ftp / torrent no es un gran problema en absoluto.
  2. La latencia / estrategia de colas es una cuestión de tipo de tráfico, no de velocidad de interfaz. Por ejemplo, VOIP, tal vez, no debería ponerse en cola en absoluto. Desafortunadamente, la documentación de tc RED no es muy clara, es mejor que lea alguna información de RED en el sitio de Juniper / Cisco y aplique ese conocimiento a tc.

Alex_www
fuente
1

¿Cómo se calcula la velocidad de 256K bit / s? En este ejemplo, 32,000bps = [32,000] bytes por segundo.

Sí, las matemáticas son correctas. Si está viendo un número cercano a 256k, probablemente esté ligeramente por debajo. ¿De dónde estás midiendo ese número? Si se trata de la descarga de su navegador o algo similar, no cuentan la sobrecarga de los encabezados de los paquetes, sino que tccuentan todo.

Jeff Ferland
fuente
Buen punto. Estaba usando iperf.
Matt
1

En mi experiencia, qdisc TBF puede limitar fácilmente el ancho de banda a 1 Gbps, por lo que supongo que también escalará a 2 Gbps. Sin embargo, probablemente necesitará una CPU real para el trabajo en lugar de un enrutador de borde de gama baja. Algo como 4 GHz i3 seguramente será suficiente.

Intenta algo como

tc qdisc add dev "$DEV" root handle 1: \
  tbf rate "$UPLINK_RATE" burst "$UPLINK_BURST" latency "$TBF_LATENCY"

dónde

DEV="$(ip route | grep "^default " | grep -Po "(?<=dev )[^ ]+")"
UPLINK_RATE="2000Mbit"
UPLINK_BURST="6500"
TBF_LATENCY="14ms"

Tenga en cuenta que para usar TBF de baja latencia, es posible que deba ejecutar el kernel PREEMPT (por ejemplo, el linux-lowlatency-hwe-*paquete Ubuntu ) o el sistema puede fallar al manejar todos esos paquetes.

Ver también: https://networkengineering.stackexchange.com/a/54404/36597

Mikko Rantalainen
fuente
Gracias. Olvidé esta pregunta. Encontré una respuesta y tenía un guión que lo hizo. Pero dejé la compañía y no puedo publicar la solución ahora. Sin embargo, sí, creo que utilicé TBF y sí, el enrutador era un servidor rápido de xeon.
Matt