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?
linux
router
packetloss
Blue Gene
fonte
fonte
Respostas:
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.
fonte
most routers that do NAT use general purpose CPUs
Sim, 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.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.
fonte
"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.
fonte
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
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:
fonte
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; done
avaliação da máscara da CPU e asmp_affinity
escrita manual é chato, provavelmente você achou meu netutils-linux de projeto para animais de estimação extremamente útil.fonte