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