Como um processador pode lidar com 10 Gigabit por segundo ou mais taxa de dados?


11

Não sei se é o lugar certo para perguntar. Pode ser uma pergunta muito boba. Presumo que algum processador precise processar quadros de dados para alternar / rotear. Os processadores modernos têm velocidade de poucos GHz. Como eles lidam com dados que chegam mais rapidamente do que operam?

Respostas:


16

Você está totalmente correto, se tivermos que usar um ciclo de instruções por bit, 10 Gbps seria inatingível. Portanto, a primeira coisa a observar é que lidamos com uma palavra por instrução da CPU - 64 bits.

Mesmo assim, a pior coisa que podemos fazer pelo desempenho é fazer com que a CPU acesse todas as palavras de um pacote. Assim, o foco no manuseio de "cópia zero" de pacotes. Alguns desses truques estão nas próprias interfaces: eles têm DMA ("acesso direto à memória") para que o chip do controlador ethernet copie os dados na RAM; eles calculam as somas de verificação para que a CPU não precise acessar todas as palavras no pacote para fazer isso. Parte disso está no design da estrutura de dados: temos o cuidado de alinhar os buffers de pacotes para que possamos movê-los alterando a propriedade de uma entrada da tabela de páginas. Algumas delas são apenas uma programação cuidadosa para garantir que os dados do pacote sejam acessados ​​pelo menor número de vezes e, de preferência, não sejam acessados ​​até o programa aplicativo de recebimento.

Depois de fazer tudo isso, a próxima limitação é a sobrecarga de manipular pacotes, um de cada vez. Portanto, há um monte de recursos de "descarregamento de segmentação" no controlador ethernet e no kernel, para que possamos lidar com grupos de pacotes. Estamos atrasando a recuperação de dados do controlador ethernet para que esses grupos sejam maiores.

Finalmente, temos atalhos de casos especiais, como a chamada sendfile () do kernel, que é um caminho expresso do disco para a rede usando a quantidade mínima de trabalho.

Podemos até rotear casos especiais (o encaminhamento de pacotes de uma interface para outra) usando os recursos de hardware das placas de interface de rede e tratando o barramento PCI como um barramento entre as placas, em vez de envolver a CPU. Isso não pode ser feito em sistemas operacionais de uso geral, mas fornecedores como a Intel fornecem bibliotecas de software para implementar esses recursos em seus controladores ethernet.

Afastando-se das CPUs, podemos até construir roteadores para fins especiais, onde todas as tarefas de encaminhamento acontecem no hardware. Como o barramento PCI seria uma limitação, eles executam vários barramentos paralelos; ou até vários barramentos paralelos para vários conjuntos de chaves de barras paralelas. Em uma extremidade do mercado, um pequeno switch Ethernet baseado em TCAM seria um exemplo; No outro extremo do mercado, o Juniper M40 seria um projeto canônico.

Um switch típico começará a receber um pacote, procurará o endereço de destino no TCAM, anexará um tag com a porta de saída ao pacote e, em seguida, DMA o pacote ainda recebido ao controlador da porta de saída. Observe que, se a porta de saída estiver congestionada, tudo o que pode ser feito nesse comutador simples é jogar fora o pacote de entrada. Portanto, comutadores simples não são uma boa escolha para quando os links alteram a velocidade e é desejável um certo enfileiramento. É claro que existem switches mais sofisticados, pelos quais você paga mais.

Um roteador típico receberá um pacote e o mantém em uma fila curta. O endereço IP de destino será pesquisado na RAM estática, o pacote será explodido nas células para reduzir a latência e cada célula será enviada para um comutador de barra cruzada no cartão de saída. Esse cartão remontará as células em um pacote e enfileirará o pacote na interface de saída. A fila na interface de saída pode ser sofisticada.


Ótima resposta. Você pode elaborar the packet will then be exploded into cells to reduce latency?
Eddie

Em um design de roteador, você pode simplesmente enviar um pacote de uma placa de linha para outra através da comutação entre barras (ou algum outro tipo de barramento entre placas). Porém, a latência é limitada pelo tamanho do pacote - você teria outro atraso completo na transmissão do pacote à medida que o pacote é enviado através da comutação da barra cruzada. Para evitar isso, podemos ter vários links paralelos na comutação da barra cruzada e dividir o pacote nesses links. Então, a latência para pacotes grandes é muito reduzida. Uma parte de um pacote dividido é chamada de 'célula'.
Vk5tu 17/05/19

Eu sei que essa resposta é de dois anos atrás, mas MUITO OBRIGADO. Eu tive a mesma pergunta que o pôster original e encontrei sua resposta em minha pesquisa. É MUITO bem escrito e completo. Obrigado!
loneboat

0

Hoje, quase todas as comutações e grande parte do roteamento são tratadas em hardware, portanto a velocidade do processador entra em jogo com exceções. Para coisas como servidores, é possível que o processador não seja rápido o suficiente. Este foi o caso no passado. Quando a Ethernet de 1 Gbps foi lançada, o barramento usado em PCs e servidores só suportava 400 Mbps.

O que acontece quando o processador não é rápido o suficiente é que o tráfego diminui. De qualquer maneira, muito tráfego pode ser descartado, pois é assim que o congestionamento é tratado, se feito corretamente. RED (Random Early Detection) é um método usado para descartar pacotes aleatoriamente em filas, a fim de impedi-los de encher e deixar cair pacotes. Isso pode ajudar a impedir a sincronização TCP. Muitas quedas ocorrem nos comutadores, nas quais várias portas de uma velocidade podem precisar ser enviadas para outra porta única da mesma velocidade.


11
Isso confunde as devoluções de entrada com gotas de saída. As devoluções geralmente acontecem quando o buffer de anel da interface Ethernet está sobrecarregado - como acontece quando uma CPU não consegue acompanhar a taxa de chegada de dados. Esse buffer de anel é muito pequeno para que o RED seja implementado.
Vk5tu 17/05/19

@ vk5tu, você perdeu meu argumento de que o tráfego diminui o tempo todo, seja de entrada ou saída. Se alguma parte do sistema não puder lidar com a quantidade de tráfego, parte será descartada e parte descartada de propósito.
Ron Maupin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.