Numeração de classes / filtros do Linux TC

12

Atualmente, estou trabalhando em uma solução de modelagem de tráfego para empresas de nível ISP e cheguei a um problema interessante (gentil e filosófico).

Analisando o número de terminais que o sistema deve manipular (que é de cerca de ~ 20k) fiquei um pouco preocupado com o que aconteceria quando eu precisasse de políticas / moldar o tráfego de mais usuários. Como atualmente estou usando a árvore de modelagem HFSC (veja tc-hfsc, principalmente o mesmo, mas mais legal que o HTB mais conhecido) para toda a rede, eu precisaria usar mais ClassIDs (obviamente pelo menos um para cada usuário no rede). O problema que eu encontrei foi que os TC ClassID's são muito limitados - eles são números de 16 bits, o que me dá um máximo possível de 64k usuários moldados por esta solução.

Da mesma forma, se eu quiser gerenciar filtros TC com eficiência (por exemplo, não usando a técnica 'flush all'), preciso excluir ou modificar entradas de filtro individuais. (Eu estou usando algo semelhante à tabela de hash do LARTC [1]). Novamente, o único método que parece estar trabalhando com isso é numerar todos os filtros usando prioridades individuais (tc filter add dev ... prio 1). Não há outro parâmetro que possa ser usado para esse propósito, e, infelizmente, o prio também é de 16 bits.

A minha pergunta é a seguinte: Existe algum método bom para ampliar o "espaço de identificador" disponível, como o comando clsid de 32 bits para o comando 'tc class' e 32 bits (ou quaisquer outras manipulações de modificação) para ' tc filter 'command?

Muito obrigado,

-mk

(btw espero que isso não vá para "64k usuários devem ser suficientes para todos" cenário ...)

    
por exa 21.08.2011 / 16:55

2 respostas

2

Eu acho que você não deve colocar os usuários de 64k com classes e filtros upstream e downstream para cada um deles na mesma interface. Você pode repetir os manipuladores para cada interface que você tem, então adicione mais interfaces. Você precisará de um incrível trabalho / servidor / placa de rede para ter essas coisas. Se o servidor travar, você terá 64k usuários off-line (e ele falhará facilmente com essa quantidade de tráfego). Não esqueça que CADA pacote que passa pela sua placa de rede será verificado e classificado por um filtro e enviado para uma classe a ser enfileirada. Isso é muito trabalho para um NIC de um gateway ISP com 64k clientes. Principalmente com todo o fluxo de vídeo que temos hoje em dia (o que é difícil fazer fila corretamente).

    
por 30.12.2011 / 15:11
0

Você pode dividir o tráfego em duas máquinas (usando uma terceira) em vez de manipular todo o tráfego em uma máquina. O tráfego pode ser roteado simplesmente com base no endereço IP de origem. Então, você terá otimamente 10 mil usuários se puder dividir o (s) intervalo (s) de IPs uniformemente.

Claro, você pode usar mais de duas máquinas, se necessário. Eu acho que isso pode ser melhor do que corrigir o kernel do Linux e fazer alguns outros hacks. Em resumo, a modelagem do tráfego será distribuída em várias máquinas. O nó central apenas encaminhará o tráfego para o nó de processamento correto.

    
por 02.01.2012 / 12:15