martes, 21 de febrero de 2012

QoS : Buffers y thresholds de salida en los 3560/3750

Toca el turno de hablar un poco de QoS que ya era hora... ;)
En esta ocasión de como maneja los buffers y los umbrales de salida los switches Catalyst 3560/3750.


Colas y programación de colas de salida.
Figura 1.











 
La figura  1 muestra el buffer de las colas de salida. El espacio de buffers  se divide entre el pool común y el pool reservado. El switch utiliza un esquema de asignación que reserva una cantidad mínima de búferes para cada cola de salida, para evitar que cualquier cola o un puerto consuman todos los búferes, privando a otras colas, y también para garantizar espacio de búfer a una cola de su interés.
El switch determina si una cola, no ha consumido más búferes que los que tiene reservados (bajo el límite), o si se ha consumido la totalidad de sus topes máximos (más del límite), y si el pool común está vacío (no hay mas búferes libres) o no vacío (buffers libres).  Si la cola no está al límite, el switch puede asignar espacio de buffers  del pool reservado o del pool común (si no está vacío).  Si no existen buffers libres en pool común o si la cola esta más del límite, el switch descarta la trama.

Weighted Tail Drop

Tanto las colas de entrada, como las colas de salida utilizan una versión mejorada del mecanismo de tail-drop. WTD es implementado en las colas para gestionar la longitud de las colas y para proporcionar precedencias de descarte para las diferentes clases de tráfico.

Cuando una trama se envía a una cola determinada, WTD utiliza la etiqueta QoS de la trama para someterla a diferentes umbrales. Si se supera el umbral de esa etiqueta QoS, es decir, que el espacio disponible en la cola de destino es menor que el tamaño de la trama, el switch descarta la trama.

En la figura 2 se muestra un ejemplo de funcionamiento WTD  en una cola cuyo tamaño es de 1000 tramas (1000 tramas es el 100% del espacio del buffer asignado). Se configuran tres porcentajes de descarte: el 40 por ciento (400 tramas), el 60 por ciento (600 tramas), y 100 por ciento (1000 tramas). 

Estos porcentajes significan que más de 400 tramas pueden encolarse hasta el umbral del 40 por ciento, hasta 600 tramas en el umbral de 60 por ciento, y hasta 1000 tramas en el umbral de 100 por ciento.

En este ejemplo, los valores de CoS 6 y 7 tienen una importancia mayor que los otros valores de CoS, y se les asigna el umbral de descarte de 100 por ciento (estado de la cola en el límite). Los valores de CoS 4 y 5 se asignan al umbral del 60 por ciento, y los valores de CoS 0 a 3 se asignan al umbral del 40 por ciento.
Supongamos que la cola ya contiene  600 tramas y llegan unas nuevas.  Estas tramas tienen los valores de CoS  4 y 5 y están fijadas  al límite del 60 por ciento. Si estas nuevas tramas se agregan a la cola, el umbral se superó, por lo que el switch descartara dichas nuevas tramas.

Figura 2.  WTD



Mapeos de QoS  a colas por defecto

Valores de QoS
Colas
Umbral
CoS  5
DSCP  40 a 47
Cola  1
1
CoS  0 y 1
DSCP  0 a 15
Cola  2
1
CoS 2 y 3
DSCP 16 a 31
Cola  3
1
CoS  4, 6 y 7
DSCP 32 a 39
CSCP 48 a 63
Cola  4
1



Por defecto se utiliza el threshold 1 en todas las colas.

Mapeo de valores de  DSCP o CoS a una cola y asignacion de Threshold (Umbral)

mls qos srr-queue output dscp-map queue X threshold Y [dscp1...dscp8] [cos1...cos7]
donde:
X= queue-id  = 1 - 4
Y= threshold id = 1 - 3. El umbral de descarte,  donde el límite es 3 y está predefinido ( establece la cola en su capacidad total).


Ejemplo:
Este ejemplo muestra cómo asignar valores DSCP 10 y 11 a la cola 1 y al umbral  2:

Switch(config)# mls qos srr-queue output dscp-map queue 1 threshold 2 10 11

Buffers y asignación de memoria

Si se quiere garantizar la disponibilidad de los buffers, fijar los umbrales de descarte, y configurar la máxima asignación de memoria para un queue-set (cada queue-set tiene 4 colas de egreso por puerto) mediante el uso de del comando:

mls qos queue-set output X threshold Y A B C D, donde:
X = queue-set  = 1 - 2
Y = queue-id  = 1 - 4
A,B,C,D = 1 - 3200

Cada valor umbral (A, B, C y D) es un porcentaje de las colas de búferes asignados. Las colas utilizan WTD para soportar distintos porcentajes de descarte para diferentes clases de tráfico.
A continuación se muestra cómo asignar buffers y thresholds  a la queue-set 2  (por defecto se utiliza el queue-set 1). 

Switch(config)# mls qos queue-set output 2 buffers 40 20 20 20
Switch(config)# mls qos queue-set output 2 threshold 2 40 60 100 200

En el ejemplo, se asigna el 40% del espacio de búfer a la cola 1 (queue 1) y  20%  para cada una de las colas restantes, es decir, 2, 3 y 4.
Se configura los umbrales de descarte para la cola 2 a 40% en el primer umbral y el 60% al segundo umbral de la memoria asignada, se garantiza (reserva) el 100% de la memoria asignada, y se configura un 200% como máximo de memoria que puede tener esta cola, antes que los paquetes se descartan.
La suma de todos los búferes asignados representa el pool reservado, y los buffers restantes forman parte del pool común.

A través de asignación de los buffers, puede asegurarse que el tráfico de alta prioridad es encolado. Por ejemplo, si el espacio de búfer es de 400, que puede asignar un 70 por ciento de este buffer a la cola 1 y 10 por ciento a las colas de 2 a 4. La cola de 1, entonces dispone de 280 buffers que le es asignada, y las colas de 2 a 4 tienen cada una 40 búferes asignados.

Entonces se puede garantizar que los búferes asignados están reservados para una cola específica en un queue-set. Por ejemplo, si hay 100 buffers para una cola, se puede reservar el 50 por ciento (50 buffers). El switch devuelve los 50 buffers restantes que no utiliza, al pool común. También se puede habilitar una cola que ya utiliza todos los buffers asignados para obtener más búferes de los que están reservados mediante el establecimiento de un umbral máximo. El switch se puede asignar los búferes que necesita del pool común, si el pool común no está vacío.

Se debe recordar que los  buffers es diferente de ancho de banda. Los buffers es la cantidad de memoria que se asigna a las colas y el ancho de banda es la cantidad de tiempo asignada para sacar los paquetes de la cola.

Como regla general es recomendable que las colas que tengan buffers pequeños en anchos de banda grandes, para que el switch saque los paquetes más rápido, y  colas con buffers grandes en ancho de banda bajos para que las colas puedan contener más de paquetes antes de enviarlos a la interface
En el pasado, cada puerto tenía un buffer de 400 que se divide entre cada una de las colas, este número ha sido replanteado a 3200 para una mejor flexibilidad. Si utiliza un número por encima de la cantidad asignada, se estará utilizando el pool común, si se utiliza menos de la asignada, se dejan en el pool común para ser utilizado por otros puertos.




Como siempre, dudas? preguntas?  enviame un tweet a @guscorre4


Saludos