Por que um roteador de hardware funciona melhor que um roteador Linux com melhores especificações (RAM e CPU)?

44

Eu tenho um mínimo de CentOS 6.3, 64 bits, atuando como gateway com 4 NIC (1 Gbps), cada um vinculado um para tráfego público e outro para privado, que executa NAT. Possui 6 GB de RAM e 4 núcleos lógicos. Temos usado isso nos últimos dois anos sem problemas.

Não tenho experiência com roteadores de hardware, mas ouvi dizer que eles têm menos RAM e CPU e usam discos flash. Como uma caixa com baixa configuração de hardware tem um desempenho melhor (como em lidar com mais conexões simultâneas) do que uma máquina com mais RAM e CPU?

Quais são os fatores limitantes, exceto o IOS, usando métodos diferentes para lidar com isso?

Blue Gene
fonte
5
As implementações no hardware são mais rápidas que o firmware é mais rápido que o software para a mesma solução.
Mdpc # 28/13
3
As "melhores especificações" mencionadas são irrelevantes para o trabalho em questão. Existem outras propriedades que realmente importam.
Ndim 29/03
Ok, então ... pelo que você escreveu, devo assumir que o seu Centos é uma máquina virtual? Além de otimizações de rede especiais para máquinas virtuais, tanto no hipervisor quanto no convidado, geralmente as máquinas virtuais não são boas nesse tipo de função ... para uso como roteador / firewall, o bare metal é sempre recomendado!
apedrejado
Você está realmente direcionando 1 Gbps de tráfego, conforme sugerido pela sua configuração? Você pode estar usando um caminhão basculante para mover uma pá cheia de areia. 6 GB de RAM e 4 núcleos basicamente nunca serão tocados em um roteador; você pode economizar eletricidade e espaço em rack usando uma pequena máquina Intel Atom para fazer esse trabalho.
23414 Bert

Respostas:

64

ASICs .

Em vez de usar uma CPU de uso geral e software específico para tarefas, você pode pular o software e fazer com que o silício lide diretamente com a tarefa.

O hardware de rede de alto desempenho usa ASICs em vez de software para tarefas computacionalmente pesadas (mas relativamente logicamente simples) de algo como comparar um endereço IP a uma enorme tabela de roteamento da Internet, verificar uma tabela da CAM para uma decisão de alternância ou verificar um pacote contra uma ACL . Isso faz uma enorme diferença na velocidade dessas operações sensíveis ao tempo, fornecendo uma vantagem significativa sobre uma CPU de uso geral.

Shane Madden
fonte
1
Embora eu concorde com o shane, eu escolheria o iptables em execução em um servidor genérico em vez de um dispositivo a qualquer dia. na minha empresa, o iptables rodando no fedora é mais rápido, mais flexível, mais simples de configurar, menos tributário na CPU e na memória, mais rápido de inicializar e muito mais barato que o Cisco ASA.
HVD
@rvh: para firewall ou apenas roteamento?
mveroone
2
e no geral, 'velocidade' é um termo bastante solto aqui. Tenho certeza de que há muitas situações em que um PC ainda pode executar uma operação 'tão rápido' quanto uma HW, ou talvez tenha uma duração constante mais longa do que a HW. Mas isso realmente se resume à estabilidade e ao `` estrondo '' - você ainda está comprando menos RAM / CPU com um dispositivo, mas obtém mais proveito disso e faz apenas o necessário para obter estabilidade
Colin Godsey
Esta resposta está errada por omissão. Apenas gritar "ASICs" também é um pouco ingênuo, pois a maioria dos roteadores que usam NAT usam CPUs de uso geral, a menos que tenhamos desempenho extremo. Também, na verdade, os roteadores NAT de hardware têm limites mais fortes no número de conexões simultâneas. O que o OP experimenta é a configuração incorreta e o uso de um sistema operacional que não se adequa à tarefa.
dualed
@dualed most routers that do NAT use general purpose CPUsSim, isso é uma afirmação verdadeira, mas ignorando o fato de que muitos desses dispositivos transferem operações específicas para chips dedicados (como uma leitura da minha resposta completa acima deixa claro). Não pense que o NAT e o rastreamento de conexão (que, eu concordo, não acontecem nos ASICs nos dispositivos modernos), pense na tabela de roteamento e desligue o descarregamento.
Shane Madden
12

Um roteador dedicado e de alta qualidade pode superar o desempenho de um PC com uma CPU mais rápida e mais RAM, pois pode fazer mais do roteamento em hardware.

É o mesmo motivo pelo qual um switch Ethernet de US $ 60 Gigabit pode superar um PC de US $ 2.000 com quatro placas GigE de duas portas atuando como um switch Ethernet. O switch é construído desde o início para ser um switch.

David Schwartz
fonte
3
E como o roteador dedicado está sendo executado em um disco flash, há menos partes móveis a falhar em momentos inoportunos.
Ct_fink 28/03
3
Não tenho certeza se você está certo. Eu criei uma proteção anti-DDOS muito básica para uma empresa em que trabalhei com base no netmap ( info.iet.unipi.it/~luigi/netmap ) e teve um desempenho muito bom mesmo em hardware normal (1Gb / s ou 11M realmente completo pacotes / s). Existe também uma versão do openswitch para netmap nesse site que pode encaminhar pacotes de 3 milhões / s em hardware "normal"; não conheço nenhum switch barato (500 $) que possa fazê-lo, mas posso estar errado.
XzKto 28/03
2
@XzKto Um switch GigE típico de 5 portas e barato (US $ 60) pode encaminhar pacotes entre todas as combinações de portas na velocidade máxima do fio. Eles geralmente usam uma barra cruzada completa e sem bloqueio.
David Schwartz
@XzKto O que David quis dizer é que, diferentemente do PC que administra a velocidade "até sua própria interface", o switch faz isso para todas as combinações de porta a porta. Você pode ter o host1 conversando com o host2 e 3 a 4, e cada conexão em full duplex e taxa de transferência máxima . Você não pode vencer isso. (e por mais dinheiro, mais portas, ainda mais fácil de entender por que é mais rápido). E para o roteador, é semelhante: o hardware poderá redirecionar mais rápido que o software, pois pode redirecionar assim que tiver informações suficientes (seu roteador linux fará isso em cada camada, mas chegar lá já será mais lento)
Olivier Dulac 28/03
11

"Além do IOS"?

O IOS faz quase toda a diferença. O CentOS é um sistema operacional de uso geral. Ele foi projetado para ter um bom desempenho em uma ampla variedade de cenários, usando uma vasta gama de configurações de hardware diferentes. Por outro lado, o IOS é extremamente bem ajustado para lidar apenas com o tipo de carga de trabalho que você esperaria de um equipamento de rede, usando os tipos muito específicos de hardware que você encontraria nos equipamentos Cisco.

Saber exatamente para quais peças de hardware você está programando o levará muito longe em termos de desempenho versus compatibilidade.

Ryan Ries
fonte
3
+1. Acrescente a isso o fato de a Cisco possuir os recursos e o know-how de engenharia para substituir o software pelo hardware, quando necessário. Ou seja, se uma operação específica for mais lenta do que gostaria no software, eles podem se esforçar para criar um ASIC, adicionar instruções às unidades de processamento existentes ou criar um módulo de hardware para ajudá-lo a acelerar. As tabelas são predominantemente favoráveis ​​ao desempenho quando você tem o luxo de controlar o software e o hardware.
Justin ᚅᚔᚈᚄᚒᚔ
Também funciona nos dois sentidos. O hardware também não precisa lidar com casos raros e complexos. Ele apenas os lança para o software. Loops de roteamento? Não tente descobrir no hardware como lidar com isso.
MSalters
4

Tanto o software quanto o hardware têm algo a dizer. Eu tenho a comparação da Intel e da TP-Link NIC (que usa um chip Realtek no coração) em hardware de servidor genérico, bem como em softwares de propósito genérico e de propósito genérico no roteamento.

No lado do hardware, se o ASIC a bordo puder manipular o tráfego IP, a carga do processador poderá ser menor e, portanto, mais rápida. Notei os dois chips INtel NIC internos se comunicando diretamente pelo DMA, ignorando a CPU principal no processamento do encaminhamento de pacotes; enquanto isso, o chip Realtek interrompe sempre que um pacote chega.

No lado do software, se o software for projetado para ser usado no roteamento, poderá ser mais eficiente. Eu usei o pfSense + PF (um FreeBSD modificado destinado a ser usado como roteador) e o Ubuntu 12.04 + iptables de uso genérico como software de roteamento e o primeiro muda claramente o tráfego muito mais rápido. (O Ubuntu 14.04 agora é quase tão rápido, graças aos novos nftables no kernel do Linux 3.13.)

No entanto, o roteador dedicado tem uma grande desvantagem: ele não pode executar muito além de mudar o tráfego e não pode ser virtualizado. Meu roteador de borda atual é uma máquina virtual dentro do meu cluster ESXi executando o Ubuntu 14.04 e também atua como um sistema de detecção de intrusões e balanceador de carga.


fonte
3

AFAIK, é a sobrecarga de um sistema operacional de uso geral; independentemente da rapidez com que suas conexões, os pacotes são tratados pacote a pacote no contexto do kernel, aumentando a latência e a tensão no sistema. Acredito que já foi explicado nas outras respostas melhor do que eu poderia fazer.

Dito isto, existem novas e promissoras tecnologias "ish" aumentando em popularidade e viabilidade que podem criar um concorrente mais formidável dos sistemas Linux neste e em outros aspectos; ou seja, InfiniBand

Veja as seguintes perguntas e respostas no StackOverflow: Como o TCP Kernel-bypass é implementado

Leitura adicional:

ILMostro_7
fonte
2

Geralmente, é devido à falta de configuração de pilha / dispositivos de rede prontos para uso no linux. Em quase 90% dos casos, o tráfego de rede é processado pela CPU0 enquanto outros estão ociosos. Se você resolver esse problema, a diferença com os roteadores de hardware não será tão drástica quanto você possa imaginar. Você deve configurar pelo menos RSS ou RPS (distribuição de processamento de pacotes baseada em driver / pilha entre as CPUs).

Se você realmente se importa com o desempenho do seu roteador Linux e tem tempo suficiente, recomendo que você leia este artigo no blog packagecloud (também há artigo sobre a transmissão de pacotes).

Se você precisa dar uma olhada na distribuição e acha que assistir a while sleep 1; do cat $some_file_in_procfs; doneavaliação da máscara da CPU e a smp_affinityescrita manual é chato, provavelmente você achou meu netutils-linux de projeto para animais de estimação extremamente útil.

strizhechenko
fonte