of 68/68
Mecanismos de QoS em Linux tc – Traffic Control Edgard Jamhour

Mecanismos de QoS utilizando tc linux

  • View
    220

  • Download
    1

Embed Size (px)

Text of Mecanismos de QoS utilizando tc linux

  • Mecanismos de QoS em Linuxtc Traffic ControlEdgard Jamhour

  • BibliografiaA maior parte das figuras desta apresentao foi extrada do tutorial:

    http://www.opalsoft.net/qos/DS.htm

  • Arquitetura de Rede no LinuxUm host com duas placas de rede, executando o sistema operacional linux pode ser transformado em um roteador, conforme a figura abaixo.

  • Implementao de QoS em LinuxOs elementos que implementam o QoS no linux so os seguintes:

    pacote destinado ao n localpacote destinado ao roteamento

  • Controle de TrfegoO controle de trfego implementado atravs de dois mecanismos:Pacotes so policiados na entradapacotes indesejveis so descartadosPacotes so enfileirados na respectiva interface de sadapacotes podem ser atrasados, descartados ou priorizados

  • Elementos do Controle de TrfegoO controle de trfego implementado internamente por 4 tipos de componentes:Queuing Disciplines = qdiscalgoritmos que controlam o enfileiramento e envio de pacotes. e.g. FIFOClassesrepresentam entidades de classificao de pacotes. cada classe pode estar associada a uma qdiscFiltersutilizados para classificar os pacotes e atribu-los as classes.Policersutilizados para evitar que o trfego associado a cada filtro ultrapasse limites pr-definidos

  • ExemploA Qdisc principal obrigatria. Ela controla como os pacotes so recebidos e enviados pela interface.As Qdisc associadas as classes controlam apenas os pacotes da classe.

  • Comandos: Criar a qdisc principal1) Cria a qdisc principal chamada 1:0handle o identificador da qdisc. O id de qdisc sempre termina em :0htb o algoritmo utilizado pela qdisc.no caso, o algoritmo no exige nenhum parmetro obrigatrio

    > tc qdisc add dev eth0 root handle 1:0 htb

  • Comandos: Criar as classes filhas2) cria duas classes com taxas diferentesAs classes so filhas da qdisc principalO htb, quando utilizado em uma classe existe parmetros de taxa de transmisso

    > tc class add dev eth0 parent 1:0 classid 1:1 htb rate 500Kbit> tc class add dev eth0 parent 1:0 classid 1:2 htb rate 300Kbit

  • Comandos: Criar as qdisc das classes3) cria as qdiscs de sada, associadas a cada classe:Cada qdisc filha das classe a ela associadaO sfq o algoritmo escolhido para a qdiscperturb um parmetro do algoritmo

    > tc qdisc add dev eth0 parent 1:1 handle 10: sfq perturb 10> tc qdisc add dev eth0 parent 1:2 handle 20: sfq perturb 10

  • Comandos: Criar os filtros4) cria os filtros para as classesOs filtros so filhos do qdisc principalO tipo de filtro utilizado u32

    > tc filter add dev eth0 parent 1:0 protocol ip u32 match ip protocol 0x06 0xff flowid 1:1> tc filter add dev eth0 parent 1:0 protocol ip u32 match ip protocol 0x11 0xff flowid 1:2

  • Comandos de monitoramentoiplink showmostra a classe default associada a interfacetc [-s] qdisc/class/filter show dev eth0mosta as qdisc/class/filter associadas a interfaces mostra as estatsticas do uso da qdisc/class/filtertc qdisc del root dev eth0limpa as regras de QoS

  • Queueing DisciplinesSem classe (sem classificao)FIFO: First In First OutSFQ: Stochastic Fair QueuingTBF: Token Bucket FlowDS_MARK: Diff-Serv MarkerRED: Random Early DetectionCom classe (classificao e priorizao)PRIO: Priority Queue[CBQ: Class-Based Queueing]HTB: Substituto do CBQ

  • FIFOCria uma fila com capacidade para 10 pacotes Os pacotes so processados na ordem de chegada

  • PRIO

  • Classes PRIO so associadas a FIFOCria automaticamente 3 classes denominadas: 1:1, 1:2 e 1:3Associa a qdisc PFIFO as classesOs filtros precisam ser adicionados posteriormente as classes.

  • Exemplos de Filtros para as Classes PFIFOOs exemplos abaixo mostram como associar pacotes as classes baseando-se nos cdigos de TOS (DSCP)

  • Exerccio 1Crie um script para classificar o trfego recebido e enviado pelo seu computador, associando:todo trfego TCP na classe 1:1 (prioridade alta)todo trfego UDP na classe 1:2 (prioridade mdia)todo trfego ICMP na classe 1:3 (prioridade baixa)Aps gerar trfego com seu computador, verifique as estatsticas de uso dos elementos qdisc, classe e filter (se houverem).

  • ObservaoAo fazer os testes, lembre-se que qdisc influencia o trfego de sada do computador e no o de entrada.Dessa forma, a medio deve ser feita no host de origem.

    qdiscHost origemHost destinoTCPUDPICMP

  • TBF: Token-Bucket FilterTBF um algoritmo de condicionamento de trfego (traffic-shaping)Ele permite limitar a banda associada a uma classe, associando uma taxa mdia e a possibilidade de envio de rajadas controladas.

    b bytesr bytes/schegadap bytes/ssada

  • ParmetrosOnde:rate: taxa mdia transmitidaburst: tamanho do balde (em bytes)latency: tempo mximo que um pacote pode ficar na fila aguardando o tokenpeakrate: taxa de pico de descarga do baldominburst: geralmente o mtu de um pacote

    > tc qdisc add dev eth0 parent 1:1 tbf rate 0.5mbit burst 5k latency 70ms peakrate 1mbit minburst 1540

  • Exemplo

  • Exerccio 2Altere o script do exerccio 1, associando uma qdisc do tipo TBF a classe 1:1tbf rate 0.5mbit burst 5k latency 70ms peakrate 1mbit minburst 1540 Crie os seguintes filtros:Todo trfego TCP associado a classe 1:1O trfego enviado ao computador ao lado associado a classe 1:2O trfego default associado a classe 1:3Faa download de um arquivo grande em seu computador pela Internet e verifique as estatsticas associadas a classe. Efetue pings no computador enquanto voc faz o download para avaliar o efeito do QoS.

  • SFQ: Stochastic Fair QueuingAs filas so servidas um pacote de cada vez, utilizando a estratgia de round-robin

  • ParmetrosperturbIntervalo para reconfigurao de hashing.Valor recomendado: 10squantumQuantidade de bytes removidos da fila por interao. O valor default 1 = maximum sized packet (MTU-sized).

  • Exemplo

  • HTBEsse algoritmo utilizado no lugar do CBQ, considerada muito complexa, para construir hierarquias de diviso de banda conforme a figura abaixo.

  • Parmetrosrate: taxa associada garantida para classe e suas filhasceil: taxa mxima que pode ser emprestada da classe paiburst: quantidade mxima de bytes que pode ser enviada na taxa ceilcburst:quantidade mxima de bytes que pode ser enviada na taxa da interface (quando no houver limite imposto pela classe pai)priority: ordenamento das classes. As classes de maior prioridade recebem o excesso de banda primeiro, reduzindo sua latncia (prio 0 a maior)

    > tc qdisc add dev eth0 root handle 1: htb> tc class add dev eth0 parent 1:0 classid 1:1 htb rate rate ceil rate burst bytes [ cburst bytes ] [ prio priority ]

  • Exemplo

  • Criao da Hierarquia

  • Criao da Qdisc de SadaA criao da Qdisc de sada obrigatria

  • Criao dos FiltrosOs filtros so atribudos diretamente as classes filhas.A classe pai utilizada apenas para definir os limites do emprstimo de banda compartilhada.

  • Exerccio 3Crie um script com a hierarquia para o seu computador, adotando o desenho abaixo. Depois avalie as estatsticas da classe:

    SSH128K256Koutros64K256KDNS32K64Koutros32K64KTCP192K256KUDP64K64Klink256K512K

  • DSMARKA disciplina DSMARK utilizado para fazer a marcao ou remarcao de bits do campo DS.

  • DSMARKA marcao baseada na seguinte equao:new_DS = (old_DS & mask) | value

    old DSbits zeradosAND mask& (zera bits)new DSOR value| (seta bits)

  • Exemplo: Criao das classes

  • Exemplo: Criao de Classes

  • CodePoints de PHBA marcao dos pacotes deve desprezar os trs ltimos bits do byte de TOS (DSCP), conforme a figura abaixo.

    ENC(2 bits)

    Seletores de ClasseDrop PrecedencePHB Padronizado00: (1)01: (2)10: (3)0001: (AF1)010: (AF2)011: (AF3)100: (AF4)

  • PHBs Padronizados

    Drop PrecedenceDCSP em HexaDS em Hexa

  • ExemplosSetar todos os pacotes para AF23: mask 0x0 (b00000000 ) value 0x58 (b01011000 ) Setar todos os pacotes como AF12, preservando os bits ECN:mask 0x3 (b00000011 ) value 0x30 (b00110000 ) Setar em 2 o 'drop precedence' de todos os pacotes mask 0xe3 (b11100011 ) value 0x10 (b00010000)Setar todos os pacotes para AF3, sem alterar os bites ECN e os bits de precedncia. mask 0x1f (b00011111) value 0x60 (b01100000)

  • Exemplo: Criao dos Filtros

  • Exerccio 4:Crie um script para:marcar os pacotes UDP com AF 11marcar os pacotes TCP com AF 23Utilizando o Ethereal, capture os pacotes enviados e recebidos pelo seu computador e verifique como eles so marcados.

  • Policiamento: PolicingA funo do policiamento limitar o trfego do usurio as condies importas pelo SLA.O policiamento feito normalmente na interface de entrada dos roteadores de borda.

    Roteador de bordaControle do excesso de trfego e marcao para classe de core Trfego garantido: AF11

    Trfego excedente: AF12

    Trfego violado: DROP

    Roteador de core

  • Policiamento: PolicingO policiamento implementado pelo cascateamento de fluxos token-bucket controladosO ltimo parmetro especifica o que deve ser feito com os pacotes que excederem o burst.drop: os pacotes so descartadoscontinue: continua a classificao do pacote assumindo a regra de filtro de prioridade inferior mais prxima.classify (apenas para CBQ): classifica o pacote como Best Effort.

    > police rate BPS burst BYTES [reclassify | drop | continue]

  • Policiamento: PolicingO trfego que excede o balde tratado pelo prximo filtro no qual o trfego se encaixa.

    balde 1balde 2Xdroptrfego totalcontinue(excesso)drop(excesso)rate: e.g. 500 kbpsENVIADO PARA CLASSE NORMALe.g. AF11ENVIADO PARA CLASSE DE TRATAMENTO DE EXCESSOe.g. AF12burst:e.g. 62,5 kbytesburst:e.g. 62,5 kbytesrate: e.g. 500 kbps

  • Exemplo de script com policiamento:#!/bin/bashtc qdisc del dev eth0 root# Crias as classes dsmarktc qdisc add dev eth0 handle 1:0 root dsmark indices 4# Marcao em AF41tc class change dev eth0 parent 1:0 classid 1:1 dsmark mask 0x0 value 0x88# Marcao AF42tc class change dev eth0 parent 1:0 classid 1:2 dsmark mask 0x0 value 0x90# Marcao AF13tc class change dev eth0 parent 1:0 classid 1:3 dsmark mask 0x0 value 0x38

  • Continuao: Filtros# Filtro para classe AF41tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 192.168.1.2/32 police rate 500kbit burst 50k continue classid 1:1# Filtro para classe AF42tc filter add dev eth0 parent 1:0 protocol ip prio 2 u32 match ip dst 192.168.1.2/32 police rate 500kbit burst 50k drop classid 1:2# Filtro para classe AF13tc filter add dev eth0 parent 1:0 protocol ip prio 5 u32 match ip protocol 0 0 flowid 1:3

  • Exerccio 6:Configure um dos computadores da sua bancada como roteador.Utilizando o script anterior como base, policie o trfego de A para B. Faa a transferncia de um arquivo grande (> 5Mbytes) utilizando scp, e verifique como a marcao do campo DS dos pacotes foi feita. Verifique tambm as estatsticas dos filtros da sua regra.

    ABpoliciamento

  • ALGORITMOS DE DESCARTEAlgoritmos de DescarteProjeto de um Roteador CoreCriao de Filtros com IP Tables

  • RED: Random Early DetectionO principal objetivo deste algoritmo limitar o tamanho das filas, controlando o atraso mdio introduzido na transmisso de pacotes.

  • Parmetrosprobability: probabilidade de descarte (de 0.0 a 1.0)Recomendado: 0.01 ou 0.02Entre min e max, a probabilidade de descarte proporcional ao tamanho mdio da fila max : tamanho de fila mdio com probabilidade de descarte mxima Clculo: (largura de banda) * (delay mximo desejado) min: tamanho de fila mdio que inicia o descarteRecomendado: 1/3 * max

  • Parmetroslimit: tamanho mximo da fila Recomendado: >> max + burst ou 8 * maxburst: tolerncia para tamanho instantneo da filaRecomendado (min+min+max)/(3*avpkt).avpkt : Tamanho mdio do pacote em bytesecn: Explicit Congestion NotificationBits menos significativos do DSCPUsado como alternativa ao descartebandwidth: usado para calcular o tamanho mdio da fila na ausncia de trfego (velocidade do link).

  • Exemplo: Dimensionamento do REDConsidere que: = 512 kbps ~ 512000 bps = 64000 bytes / secLatncia mxima desejada = 500 msEnto: 64000 bytes / sec * 0.5 sec = 32000 bytes ~ 1/3 = 12000 bytes ~ 8 * = 256000 bytes. = 1000 bytes. = (2 * + ) / (3 * )= (2 * 12000 + 32000) / (3 * 1000) = 18.67 ~ 20.

  • ExemplosO comando abaixo define a seguinte poltica de descarte:Iniciar o descarte em 12 KbytesA probabilidade mxima de descarte 2%Atingir a probabilidade mxima de descarte em 32 KbytesAdmitir burst de 20 pacotes (20 Kbytes)Descartar tudo acima de 256 KbytesObs.Quando ECN usado, os pacotes abaixo de limit so marcados com ECN ao invs de descartados.

  • GREDGRED um algoritmo de descarte que permite tratar mltiplos nveis de prioridade de descarte.Cada nvel de prioridade associado a uma fila virtual.So possveis at 16 nveis de prioridade (1 a 16), sendo 1 o nvel mais alto.

  • Exemplos de Comandos GRED

  • TcindexTcindex um parmetro opcional de DSMARKtc qdisc add dev eth0 handle 1:0 root dsmark indices 4 set_tc_index

    A opo permite criar um filtro de entrada que efetua operaes de mascaramento e deslocamento no byte DS:tc filter add dev eth0 parent 1:0 protocol ip prio 1tcindex mask shift pass_on

    O resultado pode ser explorado pelos demais filtros:Resultado = (byte_DS & p.mask ) >> p.shift

  • Exemplotc filter add dev eth0 parent 1:0 protocol ip prio 1 tcindex mask 0xfc shift 2 pass_on

    Suponha que o cdigo recebido foi:Tratamento de prioridade numa mesma classeAF11: 0x28 & 0xfc >> 2 =(00101000 & 11111100) >> 2 = 00001010 = 0xA (10 em decimal)Similarmente:AF11 = 10 e AF12 = 12 e AF13 = 14AF21 = 18 e AF22 = 20 e AF23 = 22AF31 = 26 e AF32 = 28 e AF33 = 30AF41 = 34 e AF42 = 36 e AF43 = 38

  • TcIndexOs filtros subseqentes podem ser criados usando o atributo handle X tcindex, conforme o exemplo abaixo:AF11 = 10, AF12 = 12 e AF13 = 14

  • Tcindex e REDA prioridade setada de acordo com o ndice minor da classe.

    ( skb->tc_index & p.mask ) >> p.shift = ( 0x30 & 0xfc ) >> 2 =( 00110000 & 11111100 ) = 00110000 >> 2 = 00001100 = 0xc

  • ExerccioCrie um roteador de core com suporte as classes AF11, AF12 e AF13Supondo que a interface de sada do roteador de 1Mbps, imponha os seguintes limites de delay:Classe AF11:delay mximo: 10 msprobabilidade de descarte: 10%Classe AF12delay mximo: 30 msprobabilidade de descarte: 20%Classe AF13delay mximo: 50 msprobabilidade de descarte: 30%

  • Exemplo de Script#!/bin/bashtc qdisc del root dev eth0# criar a qdisc principaltc qdisc add dev eth0 root handle 1: prio# criar as qdiscs de sadatc qdisc add dev eth0 handle 2: parent 1:3 htbtc class add dev eth0 parent 2:0 classid 2:1 htb rate 1000kbit ceil 1000kbit burst 1k tc qdisc add dev eth0 parent 2:1 handle 3: red \limit 10000 min 1000 max 2000 avpkt 1000 burst 1 probability 0.5#criar os filtrostc filter add dev eth0 parent 2:0 protocol ip prio 1 u32 \ match ip protocol 0x06 0xff flowid 2:1

  • Modos de Criao das RegrasUm filtro pode ser implementado de duas formas:classificador u32classificador fwA classificao baseada em fw permite utilizar regras de filtro iptables para classificar os pacotes. A ao do iptables do tipo:-j MARK set mark idOnde id definido pelo parmetro handle do tc filter.

  • Exemplo de Filtro com IPTables

  • Exemplo com Policiamento

  • Exemplo: Marcao, Shaping e Descarte com tcindex

    filtrofiltrofiltro...dsmarkdsmarkdsmarkhtbQdisc - dsmarkhtbhtbhtbredredredMarcao DS com tcindexfiltrofiltrofiltro...Classificao baseada em byte DSQdisc para shapingClassificao baseada no cabealho do pacoteclasse de shapingQdisc para descarte

  • Scripttc qdisc del root dev eth0# cria a qdisc e as classes de marcaotc qdisc add dev eth0 handle 1:0 root dsmark indices 4 set_tc_index tc class change dev eth0 classid 1:1 dsmark mask 0x0 value 0x31 # associa o filtro a qdisc principaltc filter add dev eth0 parent 1:0 \

    protocol ip prio 1 u32 match ip protocol 0x06 0xff flowid 1:1

  • Continuao# cria a qdisc e as classes de shapingtc qdisc add dev eth0 parent 1:1 handle 2:0 htb tc class add dev eth0 classid 2:1 htb rate 1000kbit ceil 1000kbit # associa o filtro a qdisc de shaping, baseada no cdigo dsmarktc filter add dev eth0 parent 2:0 protocol ip prio 2 handle 0x31 tcindex mask 0xff classid 2:1# cria a qdisc de descartetc qdisc add dev eth0 parent 2:1 handle 3: red limit 50000 min 10000 max 40000 avpkt 1000 burst 10 probability 0.1