Estou tentando entender como os sistemas de QoS funcionam e não tenho certeza de como exatamente o WFQ e o WRED interagem.
No começo, pensei que o WFQ é um mecanismo de enfileiramento e que o WRED é um mecanismo para evitar congestionamentos. O WFQ deve agendar pacotes nas filas e o WRED existe para descartá-los quando as filas estiverem cheias. Se eu estiver configurando a QoS, por exemplo, em um switch L3, eu configuraria um mecanismo de enfileiramento e um mecanismo de prevenção de congestionamentos, para que, em teoria, eu pudesse ter o WFQ e o WRD trabalhando juntos. Por exemplo, este documento parece sugerir que eles seriam configurados dessa maneira. Alguns outros documentos da Cisco mencionam que eu poderia usá-los independentemente.
Então, eu queria aprender mais sobre como eles funcionavam e comecei a pesquisar na Internet. Como resultado, agora não tenho idéia do que são e como funcionam.
Alguns sites (pelo menos para minha compreensão do conteúdo) afirmam que algoritmos de agendamento de pacotes e algoritmos para evitar congestionamentos são basicamente os mesmos. Por exemplo, neste artigo da Wikipedia, todos eles são colocados em um mesmo grupo. Alguns artigos aleatórios mencionaram que eu poderia usar o WFQ XOR WRED.
Então, o que eu queria perguntar é qual a relação entre WFQ e WRED? Quando eu usaria um ou outro e quando ambos, se isso é possível?
fonte
Respostas:
O enfileiramento justo ponderado (WFQ) é como o nome implica em um algoritmo de enfileiramento. O enfileiramento é usado quando há congestionamento em uma interface. Isso geralmente é detectado pelo fato de o anel de transmissão (anel TX) estar cheio. Isso significa que a interface está ocupada enviando pacotes. O enfileiramento não ocorre a menos que haja congestionamento na interface. Em alguns casos, o tamanho do anel TX pode ser manipulado. Um pequeno anel TX dá à fila do software mais poder sobre quais pacotes são enviados primeiro, mas não é muito eficaz. Um anel TX muito grande tornaria o software na fila quase inútil e levaria a uma latência e instabilidade mais altas para pacotes importantes.
O algoritmo de enfileiramento padrão geralmente é o primeiro a entrar, primeiro a sair (FIFO). Isso significa que os pacotes são entregues exatamente na ordem em que chegam na entrada da interface. Isso geralmente não é desejável porque alguns pacotes devem ser priorizados.
É bastante comum que um cliente compre um serviço de um provedor de serviços de Internet (ISP) na subrate. Ou seja, o cliente compra um serviço de 50 Mbit / s, mas a interface física está sendo executada a 100 Mbit / s. Nesse caso, não haverá congestionamento, mas o ISP limitará a quantidade de tráfego do cliente. Para introduzir congestão artificial nesses casos, um modelador pode ser aplicado.
Portanto, agora que há congestionamento, um algoritmo de fila pode ser aplicado. Observe que os algoritmos de enfileiramento não fornecem largura de banda extra, apenas permitem decidir quais pacotes são mais importantes para nós. O WFQ é um algoritmo que utiliza vários parâmetros e toma uma decisão com base nisso. O algoritmo é bastante complexo e usa peso (IP Precedence), tamanho do pacote e tempo de programação como parâmetros. Há uma explicação muito detalhada do INE aqui. O WFQ é uma boa opção se você não quiser mexer muito com as filas, pois fornece largura de banda adequada para fluxos de tamanho pequeno como SSH, Telnet, voz e isso significa que uma transferência de arquivo não roubará toda a largura de banda.
A Detecção Precoce Aleatória Ponderada (WRED) é um mecanismo para evitar congestionamentos. WRED mede o tamanho das filas, dependendo do valor de Precedência e começa a soltar pacotes quando a fila está entre o limite mínimo e o limite máximo. A configuração decidirá que 1 em cada N pacotes será descartado. O WRED ajuda a impedir a sincronização e a privação de TCP. Quando o TCP perde pacotes, o início é lento e, se todas as sessões TCP perderem pacotes ao mesmo tempo, elas poderão se tornar sincronizadas, o que fornece um gráfico como este:
Como pode ser visto se o WRED não estiver configurado, o gráfico fica a todo vapor, depois silencioso, depois a todo vapor e assim por diante. O WRED fornece uma taxa de transmissão mais média. É importante observar que o UDP não é afetado pela queda de pacotes porque não possui mecanismo de reconhecimento e janela deslizante implementada como o TCP. Portanto, o WRED não deve ser implementado na classe baseada em UDP, como uma classe que manipula SNMP, DNS ou outros protocolos baseados em UDP.
O WFQ e o WRED podem e devem ser implantados juntos.
fonte
Primeiro de tudo, não acredite em tudo que você lê na Internet ;-)
Às vezes, algoritmos (ou a maneira como são fisicamente implementados) não se encaixam perfeitamente em uma categoria teórica. O que você chama é menos importante do que entender o que faz.
O objetivo principal do WFQ (ou qualquer outro algoritmo de agendamento) é compartilhar a largura de banda limitada do link entre os vários fluxos. O WFQ tenta alocar a largura de banda proporcionalmente a cada fluxo. O CBWFQ faz o mesmo para cada "classe". Em um mundo perfeito, com filas ilimitadas e memória ilimitada, isso seria tudo o que você precisa - você compartilha a largura de banda e todos ficam felizes.
Mas como os dispositivos não têm filas e memória ilimitadas, alguns "atalhos" precisam ser feitos. Como uma fila tem um tamanho limitado, existe o risco de a fila ser preenchida, causando quedas de cauda e sincronização de tráfego. Basicamente, se minha fila está transbordando, não estou mais controlando a largura de banda.
Para evitar minhas filas transbordando, eu uso a detecção precoce aleatória. Esse algoritmo descarta pacotes aleatoriamente da fila de acordo com a profundidade da fila (profundidade) - quanto mais cheia a fila, mais pacotes serão descartados. O objetivo é impedir o transbordamento da fila, para que o algoritmo de agendamento possa funcionar.
Então, um engenheiro da Cisco notou que era possível usar menos filas (hardware mais simples) e eliminar aleatoriamente diferentes tipos de tráfego em diferentes profundidades de fila. WRED descarta o tráfego da fila em diferentes profundidades, dependendo do tipo de tráfego. Embora você possa chamar o WRED de um mecanismo para evitar congestionamentos, uma vez que a profundidade em que o tráfego é descartado varia de acordo com o tipo de tráfego, o efeito é que tipos diferentes obtêm menos espaço na fila e, portanto, menos largura de banda. Por isso, também atua como um algoritmo de agendamento. Você diz po-tay-to e eu digo po-tah-toe.
Mais uma diferença: o FQ e o WFQ funcionam em todos os tipos de tráfego, uma vez que contam essencialmente bytes. O RED e o WRED funcionam apenas com o TCP, pois dependem do mecanismo de controle de fluxo do TCP para diminuir a velocidade do tráfego e impedir que a fila transborde.
(Observação: por uma questão de explicação, estou ignorando as filas de prioridade e o LLQ. Essa é outra resposta).
Eu concordo com tudo o que Mike disse também.
fonte
Aqui está um exemplo de CBWFQ e WRED:
mapa de política OUT
classe
Porcentagem de prioridade de voz 20
por cento da largura de banda do vídeo da classe 30
por cento da largura de banda da classe P1 10
dscp de detecção
aleatória com detecção aleatória dscp af31 26 40 10
por cento da largura de banda da classe P2 15
dscp de detecção
aleatória com detecção aleatória dscp af21 24 40 10
classe class-default-
fair-fila
-random-detect com base em dscp
fonte