Eu ouvi resultados mistos sobre a limitação da largura de banda de entrada, mas isso deve ser possível com o dispositivo ifb no kernel. Enquanto uma verdade é o que @ voretaq7 disse, você pode "limitar" pacotes de entrada se aceitar todos os pacotes de entrada e redirecioná-los com redirecionamento ou espelhamento em um dos dispositivos "I_ntermediate F_unctional B_lock". Para esses, você pode anexar qualquer filtro normalmente limitado a filtragem 'egress'.
Isso pode não parecer "útil", já que você tem que aceitar todo o tráfego, no ifb - mas então você decide qual tráfego sai dessa fila de espera "IN" para o resto do seu sistema.
Isso tem o benefício de não descartar pacotes a menos que sejam pacotes de menor prioridade. Certamente, se você está sendo DoS'd, o principal problema é que o tráfego total de entrada é maior do que a sua linha pode sustentar, então tentar afetá-lo com esse método é fútil. Este método só funcionaria em fluxos legítimos sobre qualquer protocolo desejado (TCP, UDP, ICMP, etc ...). Ou seja se eu quiser priorizar o DNS sobre downloads em massa, eu posso fazer isso, não importa o algoritmo de tráfego, se você tem 30Mb /, então com uma interrupção de clock normal mais rápida de 1000Hz, você ainda tem que lidar com 30Kb de tráfego / clock e isso é presumir que você seja chamado em tempo hábil. Essa é a principal razão pela qual você tem que ter uma alta taxa de burst, porque é difícil lidar com isso apenas com a limitação de taxa.
Seria útil , se sua placa de rede tiver várias filas de E / S. Muitos cartões têm 6-12 filas / direção que podem fornecer algumas classificações "automáticas" em filas separadas com base nas opções de filtragem, geralmente mais limitadas, na placa ethernet.
O que pode ser mais útil - se você pode dividir seu tráfego nessas várias filas, é possível definir a afinidade do processador com as filas. Se você está se encontrando limitado nos pacotes de processamento da CPU, com os multiQs, isso pode ajudar a espalhar o tráfego de entrada para processamento em Core's diferentes (não use Hyperthreading - ele provavelmente causará um problema de desempenho já que os threads não estão operando em dados compartilhados, mas em fluxos de dados separados.O tratamento desses será melhor com cpu usando caches L1 & L2 separadas (L3 ainda será compartilhado, normalmente, entre vários núcleos), mas você pode pelo menos dedicar os caches L1 & L2 a seus próprios "fluxos").
Devido a problemas na taxa de transferência, eu tive com filas únicas e policiamento, desisti do controle de ingresso - e eu só tinha uma entrada de 5Mb na época (7Mb agora), então eu não tentei ver o quão eficiente usando multiq e ifb estão em modelagem de ingresso. Como é, geralmente uso moldagem em nível de aplicativo & controles - não ideal, mas bastante confiável.
Uma questão que surge de vez em quando, é que devido a problemas de linha ou congestionamento de ISP, não recebo meu BW máximo, então minhas predefinições de filtro fixo não se adaptam ... essa é outra razão pela qual trabalhei muito nessa questão, pois não tenho certeza de quanto trabalho seria necessário para que a limitação da taxa fosse dinâmica e percebesse tais problemas ou problemas, e agora tenho muitos outros projetos de prioridade mais alta na minha fila. (e minha taxa de E / S está bem abaixo da porta da minha ethernet) ...; -)