segunda-feira, 2 de janeiro de 2012

LAN QoS, parte 1

Bom, QoS na LAN todo mundo sabe configurar, né? "auto qos voip cisco-phone" e boa, o Switch faz tudinho pra você, seguindo as melhores práticas da Cisco. Inclui um monte de configurações automaticamente e tudo funciona perfeitamente bem. Mas para a prova, não basta saber só isso... temos que entender exatamente o que o Switch configura para você com o auto qos, para podermos modificá-lo do jeito que o enunciado pedir.
Para esse post, utilizarei como base um 3750, que é o que teremos na prova. Para outros modelos de switch, algumas coisas podem ser diferentes.
Quando aplicamos o auto qos, o switch inclui as seguintes configurações (dentre outras, que mostrarei em outro post):

mls qos map cos-dscp 0 8 16 24 32 46 48 56
mls qos srr-queue input bandwidth 90 10
mls qos srr-queue input threshold 1 8 16
mls qos srr-queue input threshold 2 34 66
mls qos srr-queue input buffers 67 33
mls qos srr-queue input cos-map queue 1 threshold 2 1
mls qos srr-queue input cos-map queue 1 threshold 3 0
mls qos srr-queue input cos-map queue 2 threshold 1 2
mls qos srr-queue input cos-map queue 2 threshold 2 4 6 7
mls qos srr-queue input cos-map queue 2 threshold 3 3 5
mls qos srr-queue input dscp-map queue 1 threshold 2 9 10 11 12 13 14 15
mls qos srr-queue input dscp-map queue 1 threshold 3 0 1 2 3 4 5 6 7
mls qos srr-queue input dscp-map queue 1 threshold 3 32
mls qos srr-queue input dscp-map queue 2 threshold 1 16 17 18 19 20 21 22 23
mls qos srr-queue input dscp-map queue 2 threshold 2 33 34 35 36 37 38 39 48
mls qos srr-queue input dscp-map queue 2 threshold 2 49 50 51 52 53 54 55 56
mls qos srr-queue input dscp-map queue 2 threshold 2 57 58 59 60 61 62 63
mls qos srr-queue input dscp-map queue 2 threshold 3 24 25 26 27 28 29 30 31
mls qos srr-queue input dscp-map queue 2 threshold 3 40 41 42 43 44 45 46 47
mls qos srr-queue output cos-map queue 1 threshold 3 5
mls qos srr-queue output cos-map queue 2 threshold 3 3 6 7
mls qos srr-queue output cos-map queue 3 threshold 3 2 4
mls qos srr-queue output cos-map queue 4 threshold 2 1
mls qos srr-queue output cos-map queue 4 threshold 3 0
mls qos srr-queue output dscp-map queue 1 threshold 3 40 41 42 43 44 45 46 47
mls qos srr-queue output dscp-map queue 2 threshold 3 24 25 26 27 28 29 30 31
mls qos srr-queue output dscp-map queue 2 threshold 3 24 25 26 27 28 29 30 31
mls qos srr-queue output dscp-map queue 2 threshold 3 56 57 58 59 60 61 62 63
mls qos srr-queue output dscp-map queue 3 threshold 3 16 17 18 19 20 21 22 23
mls qos srr-queue output dscp-map queue 3 threshold 3 32 33 34 35 36 37 38 39
mls qos srr-queue output dscp-map queue 4 threshold 1 8
mls qos srr-queue output dscp-map queue 4 threshold 2 9 10 11 12 13 14 15
mls qos srr-queue output dscp-map queue 4 threshold 3 0 1 2 3 4 5 6 7
mls qos queue-set output 1 threshold 1 138 138 92 138
mls qos queue-set output 1 threshold 2 138 138 92 400
mls qos queue-set output 1 threshold 3 36 77 100 318
mls qos queue-set output 1 threshold 4 20 50 67 400
mls qos queue-set output 2 threshold 1 149 149 100 149
mls qos queue-set output 2 threshold 2 118 118 100 235
mls qos queue-set output 2 threshold 3 41 68 100 272
mls qos queue-set output 2 threshold 4 42 72 100 242
mls qos queue-set output 1 buffers 10 10 26 54
mls qos queue-set output 2 buffers 16 6 17 61

Vamos tentar entender o que é tudo isso...
Primeiramente é preciso saber que o 3750 trabalha com 2 filas de entrada e 4 filas de saída por porta. Vamos pensar primeiro na entrada, ou seja, quando o pacote chega no switch. Nesse momento ele pode ser colocado em uma das duas filas de entrada (ingress). Os parâmetros dessas filas são definidas nos comandos (obs: L1, L2, L3 e L4 não fazem parte do comando. É só para identificar a linha):
L1. mls qos srr-queue input bandwidth 90 10
L2. mls qos srr-queue input threshold 1 8 16
L3. mls qos srr-queue input threshold 2 34 66
L4. mls qos srr-queue input buffers 67 33
Com isso estamos dizendo que vamos alocar 90% da banda para a fila 1 e 10% da banda para a fila 2 (L1), e dividiremos o buffer de memória em 67% para a fila 1 e 33% para a fila 2 (L4). Com isso determinamos o quanto de dados podem ser armazenados na fila antes que os pacotes comecem a ser droppados na interface. Além disso, definimos também alguns thresholds para cada fila (L2 e L3): para a fila 1, temos o primeiro threshold em 8% e o segundo em 16%; e para a fila 2 temos o primeiro threshold em 34% e o segundo em 66%. Para as duas filas existe também um terceiro threshold em 100% (não configurável). Isso quer dizer que se colocarmos um tráfego na fila 1, threshold 1, por exemplo, quando ele atingir os 8% da fila, começará a ser droppado (WTD - Weighted Tail Drop). Mas para isso, precisamos separar os pacotes nas filas/threshold, de acordo com a sua marcação de CoS e DSCP. Esse mapeamento é feito pelos comandos:  
L1. mls qos srr-queue input cos-map queue 1 threshold 2 1
L2. mls qos srr-queue input cos-map queue 1 threshold 3 0
L3. mls qos srr-queue input cos-map queue 2 threshold 1 2
L4. mls qos srr-queue input cos-map queue 2 threshold 2 4 6 7
L5. mls qos srr-queue input cos-map queue 2 threshold 3 3 5
L6. mls qos srr-queue input dscp-map queue 1 threshold 2 9 10 11 12 13 14 15
L7. mls qos srr-queue input dscp-map queue 1 threshold 3 0 1 2 3 4 5 6 7
L8. mls qos srr-queue input dscp-map queue 1 threshold 3 32
L9. mls qos srr-queue input dscp-map queue 2 threshold 1 16 17 18 19 20 21 22 23
L10. mls qos srr-queue input dscp-map queue 2 threshold 2 33 34 35 36 37 38 39 48
L11. mls qos srr-queue input dscp-map queue 2 threshold 2 49 50 51 52 53 54 55 56
L12. mls qos srr-queue input dscp-map queue 2 threshold 2 57 58 59 60 61 62 63
L13. mls qos srr-queue input dscp-map queue 2 threshold 3 24 25 26 27 28 29 30 31
L14. mls qos srr-queue input dscp-map queue 2 threshold 3 40 41 42 43 44 45 46 47
De L1 a L5, fazemos o mapeamento baseado no CoS. Tipo, Cos 1 vai para a fila 1, threshold 2; Cos 0 vai para fila 1, threshold 3; CoS 3 e 5 vão para a fila 2 threshold 3... E de L6 a L14 fazemos o mapeamento baseado no DSCP. Tipo, DSCP 46 está na fila 2, threshold 3. (obs:Quando muitos DSCPs estão mapeados na mesma fila e threshold, o switch quebra a config em várias linhas, mas é como se estivesse tudo numa linha só. Ex: L13 e L14 são mapeamentos da fila 2, threshold 3).
Beleza, agora vamos ver as filas de saída (egress). O 3750 trabalha com 4 filas de saída para cada interface, que vamos chamar de Q1, Q2, Q3 e Q4. E para cada fila podemos configurar também 2 thresholds (e existe mais um terceiro fixo nos 100%). A diferença é que nas filas de saída os thresholds podem ficar acima dos 100%, pois ele usará a memória do switch alocada para a interface.  As filas e thresholds são configuradas por esses comandos:  
mls qos queue-set output 1 threshold 1 138 138 92 138
mls qos queue-set output 1 threshold 2 138 138 92 400
mls qos queue-set output 1 threshold 3 36 77 100 318
mls qos queue-set output 1 threshold 4 20 50 67 400
mls qos queue-set output 2 threshold 1 149 149 100 149
mls qos queue-set output 2 threshold 2 118 118 100 235
mls qos queue-set output 2 threshold 3 41 68 100 272
mls qos queue-set output 2 threshold 4 42 72 100 242
Queue-sets são como se fossem templates. O 3750 deixa você configurar 2 templates, e a Cisco recomenda que você mexa apenas no template 2. Isso porque se você fizer alguma cagada, pode simplesmente voltar para o template 1 e tudo estará bem. Para aplicar um queue-set em uma interface, basta entrar na config dela e aplicar queue-set 1 ou queue-set 2. Nos queue-sets definimos os thresholds de cada fila. Mas nos comandos podemos ver que na frente do ID da fila temos 4 parâmetros. Se eu disse que só configuramos 2 Thresholds, o que são os outros dois? A sintaxe do comando é a seguinte:
mls qos queue-set output <queue-set id> threshold <queue-id> <T1> <T2> <Reserved> <Maximum>

Para entender isso é preciso saber que o 3750 reserva um buffer de memória para cada fila de cada interface (reserved buffer pool). Quando a fila não usa essa memória, ela vai pro common buffer pool, e fica disponível para outras filas. Meio complicado mesmo, faz parte da arquitetura do switch. Mas o importante é saber que depois de definir os thresholds (T1 e T2), definimos quantos % da memória reservada para a fila eu vou garantir para ela. É a memória que vou deixar reservada para ela. Já o outro parâmetro, Maximum, é o máximo de memória que eu vou poder alocar para essa fila, usando o common buffer pool. E finalmente, esses comandos dividem o buffer da porta entre as 4 filas (a soma da 100%):
mls qos queue-set output 1 buffers 10 10 26 54
mls qos queue-set output 2 buffers 16 6 17 61
Bom, mas agora falta jogarmos os tráfegos classificados dentro das filas e thresholds. Lembrando que para o Switch 3750, a fila de maior prioridade (PQ) é a fila 1! Mas isso muda de switch pra switch, já vi alguns que a Priority Queue é a 4. Vai saber pq a Cisco faz isso... Para mapear o tráfego nas filas é igual fizemos nas de entrada:
mls qos srr-queue output cos-map queue 1 threshold 3 5
mls qos srr-queue output cos-map queue 2 threshold 3 3 6 7
mls qos srr-queue output cos-map queue 3 threshold 3 2 4
mls qos srr-queue output cos-map queue 4 threshold 2 1
mls qos srr-queue output cos-map queue 4 threshold 3 0
mls qos srr-queue output dscp-map queue 1 threshold 3 40 41 42 43 44 45 46 47
mls qos srr-queue output dscp-map queue 2 threshold 3 24 25 26 27 28 29 30 31
mls qos srr-queue output dscp-map queue 2 threshold 3 24 25 26 27 28 29 30 31
mls qos srr-queue output dscp-map queue 2 threshold 3 56 57 58 59 60 61 62 63
mls qos srr-queue output dscp-map queue 3 threshold 3 16 17 18 19 20 21 22 23
mls qos srr-queue output dscp-map queue 3 threshold 3 32 33 34 35 36 37 38 39
mls qos srr-queue output dscp-map queue 4 threshold 1 8
mls qos srr-queue output dscp-map queue 4 threshold 2 9 10 11 12 13 14 15
mls qos srr-queue output dscp-map queue 4 threshold 3 0 1 2 3 4 5 6 7

Eu sei, esse post ficou enorme, cansativo e dificil! Vou tentar fazer um exemplo... Digamos que a gente tenha esse mapeamento:
mls qos srr-queue output cos-map queue 2 threshold 1  3
mls qos srr-queue output cos-map queue 2 threshold 2  4 5


E configuramos esses thresholds para a fila 2:
mls qos queue-set output 1 threshold 2 40 70 90 400

Quer dizer que quando o buffer da fila 2 estiver em 40% (T1), ela vai começar a droppar o tráfego marcado com CoS 3, mas não o tráfego marcado com CoS 4 e 5, porque estes estão mapeados no T2, que está em 70%.
Digamos agora que a gente tenha o seguinte buffer configurado:
mls qos queue-set output 1 buffers 15 45 20 20
Para a fila 2, configuramos 90% de reserved e 400 de maximum. Isso significa que reservaremos 90% do buffer da fila 2 (isto é, 45% da memória da porta). Então teremos garantido para essa fila 90% dos 45% de memória da porta. Os outros 10% ficarão no common buffer pool e poderá ser usado pelas filas 1, 3 e 4. Assim como as outras filas também podem ter deixado uma sobrinha no common buffer pool.

Agora só ficou faltando falar sobre esse comando:
mls qos map cos-dscp 0 8 16 24 32 46 48 56  
Esse é fácil. É simplesmente como o switch vai fazer o mapeamento de CoS para DSCP, como expliquei no post passado. Nesse caso o switch vai mapear CoS 0 com DSCP 0, CoS 1 com DSCP 8, CoS 2 com DSCP 16, CoS 3 com DSCP 24 (Voice Signaling!), CoS 4 com DSCP 32, CoS 5 com DSCP 46 (RTP!), CoS 6 com DSCP 48 e CoS 7 com DSCP 56.  

Caraca, esse post ficou todo confuso... mas espero que tenha ajudado!

4 comentários:

  1. Este comentário foi removido pelo autor.

    ResponderExcluir
  2. amigo esse comando "auto qos voip cisco-phone" não funciona no Switch 2960 ?

    ResponderExcluir
    Respostas
    1. Depende da IOS que você está usando... Se não me engano, precisa da IOS LAN Base. Abs!

      Excluir