为什么硬件路由器比具有更好规格(RAM和CPU)的Linux路由器性能更好?


44

我有一个最低限度的CentOS 6.3、64位充当带有4个NIC(1 Gbps)的网关,每个都绑定在一起以进行公共通信,而另一个则绑定用于私有,以执行NATing。它具有6 GB RAM和4个逻辑内核。在过去的两年中,我们一直在使用它,没有任何问题。

我对硬件路由器没有任何经验,但是我听说它们的RAM和CPU较少,并且使用闪存盘。与具有更多RAM和CPU的计算机相比,具有低硬件配置的设备如何表现更好(例如,处理更多的并发连接)?

除了使用不同方法来处理此问题的IOS之外,还有哪些限制因素?


5
对于相同的解决方案,硬件的实现要比软件的实现快,而固件的实现要快于软件。
mdpc

3
您提到的“更好的规格”与手头的工作无关。实际上还有其他属性。
ndim

好的,所以...根据您的撰写,我是否应该假设您的Centos是虚拟机?除了在虚拟机管理程序和来宾端对虚拟机进行特殊的网络优化之外,众所周知,虚拟机在这种角色中也不是很好。...用作路由器/防火墙,始终建议使用裸机!
砸死

您是否按照配置建议实际路由1Gbps流量?您可能正在使用自卸卡车移动充满沙子的铲子。路由器绝对不会碰到6GB的RAM和4个内核,通过使用小型Intel Atom机器来完成这项工作,您可以节省电力和机架空间。
Bert 2014年

Answers:


64

专用集成电路

无需使用通用CPU和特定于任务的软件,您可以跳过该软件,仅使芯片直接处理任务。

高性能网络硬件使用ASIC而不是软件来完成计算量大(但在逻辑上相对简单)的任务,例如将IP地址与巨大的Internet路由表进行比较,检查CAM表以进行切换决策或根据ACL检查数据包。这对那些对时间敏感的操作的速度产生了巨大的差异,与通用CPU相比具有明显的优势。


1
虽然我同意shane的意见,但我会选择每天在设备上的通用服务器上运行的iptables。在我的公司中,在fedora上运行的iptables与cisco asa相比,更快,更灵活,更易于配置,对CPU和内存的负担更少,启动更快并且更便宜。
2013年

@rvh:用于防火墙还是仅用于路由?
mveroone 2014年

2
总体而言,“速度”在这里是一个非常宽松的术语。我确信在许多情况下,PC仍然可以像硬件一样“快”地完成一项操作,或者可能需要比硬件更长的持续时间。但是,确实确实要归结为稳定性,并且“物有所值”-您仍在使用设备购买更少的RAM / CPU,但是它可以从中获得更多收益,并且只需满足需要,即可获得稳定性
Colin Godsey

遗漏这个答案是错误的。只是大声喊叫“ ASIC”也有点天真,因为大多数进行NAT的路由器都使用通用CPU,除非我们要达到极限性能。实际上,硬件NAT路由器对并发连接数也有更严格的限制。OP遇到的是配置错误和使用不适合该任务的操作系统。
2016年

@dualed most routers that do NAT use general purpose CPUs是的,这是一个正确的声明,但是却不知道许多这样的设备将特定的操作转移到专用芯片上的事实(如我上面的完整回答所示)。不要以为NAT和连接跟踪(我同意,现代设备的ASIC中不会发生这种情况),而应该考虑路由表和交换分流。
Shane Madden

12

高端专用路由器可以在CPU和RAM方面更快的情况下胜过PC,因为它可以在硬件中完成更多的路由选择。

同样的原因是价格为60美元的千兆以太网交换机可以胜过价格为2,000美元的PC,后者具有4个两端口GigE卡作为以太网交换机。交换机从头开始构建成为交换机。


3
而且由于专用路由器在闪存盘上运行,因此在不适当的时间发生故障的活动部件就更少了。
cpt_fink 2013年

3
我不确定自己是否正确。我已经为我基于netmap(info.iet.unipi.it/~luigi/netmap)工作的公司创建了非常基本的反DDOS保护,即使在普通硬件(真正的全1Gb / s或11M的速度)下,它也表现出色数据包/秒)。该站点上还有一个用于netmap的openswitch版本,可以在“普通”硬件上每秒转发3M数据包,我不知道有任何便宜的(500 $)交换机可以做到,但是我可能是错的。
XzKto

2
@XzKto一个典型的便宜(60美元)5端口GigE交换机可以全线速在所有端口组合之间转发数据包。它们通常使用完整的,无阻塞的交叉开关。
David Schwartz 2013年

@XzKto David的意思是,与PC可以处理“高达其自身接口的吞吐量”速度不同,PC可以对端口到端口的每个组合进行操作。您可以让host1与host2通信,并与3至4通信,并且每个连接都以全双工和最大吞吐量进行。你无法击败。(以更多的钱,更多的端口,甚至更容易理解为什么它更快)。对于路由器,这有点类似:硬件将比软件能够更快地重新路由,因为只要有足够的信息,它就可以重新路由(您的linux路由器将在每个层上进行路由,但是到达那里已经很慢了)
Olivier Dulac

11

“除了IOS”?

iOS几乎发挥了所有作用。CentOS是通用操作系统。它旨在使用多种不同的硬件配置,在各种情况下都具有足够的性能。另一方面,IOS进行了非常精细的调整,可以使用您在Cisco设备中发现的非常特殊的硬件类型,仅处理您希望从网络设备中获得的那种工作负载。

知道究竟是什么硬件的作品,你要编程的会带你在性能与兼容性方面很长的路要走。


3
+1。此外,思科拥有工程资源和专有技术,可以在需要时用硬件代替软件。这意味着,如果特定操作的速度比软件中所需的速度慢,则他们可以投入精力进行ASIC工程设计,向现有处理单元添加指令,或者构建硬件模块以加快速度。当您既可以控制软件又可以控制硬件时,这些表会以绝对的优势支持性能。
贾斯汀·

它也可以双向工作。硬件也不需要处理罕见的复杂情况。它只是把那些扔给软件。路由循环?不要试图在硬件中弄清楚如何处理这些问题。
MSalters 2013年

4

软件和硬件都有话要说。我对通用服务器硬件上的英特尔和TP-Link NIC(其核心使用Realtek芯片)以及路由中的专用和通用软件进行了比较。

在硬件方面,如果板上的ASIC可以处理IP流量,则处理器负载可以更低,从而更快。我注意到两个板载的Intel NIC芯片直接通过DMA通信,绕过主CPU处理数据包转发。同时,Realtek芯片会在数据包到达时中断。

在软件方面,如果将软件设计为用于路由,则可以使其效率更高。我同时使用了pfSense + PF(一种经过修改的FreeBSD,旨在用作路由器)和通用的Ubuntu 12.04 + iptables作为路由软件,并且第一个显然可以更快地切换流量。(由于Linux 3.13内核中新增了nftable,Ubuntu 14.04现在几乎快了。)

但是,专用路由器确实有一个主要缺点:除了交换流量外,它不能执行任何其他操作,并且不能进行虚拟化。我当前的边缘路由器是运行Ubuntu 14.04的ESXi群集中的虚拟机,它还充当入侵检测系统和负载平衡器。


3

AFAIK,这是通用操作系统的开销;无论您的连接速度有多快,都在内核上下文中逐个数据包地处理数据包,从而增加了延迟并增加了系统负担。我相信在其他答案中已经比我能做的更好。

话虽这么说,但在这方面以及其他方面,有希望的新的“ ish”技术越来越受欢迎,并且具有更大的可行性,这些技术可能会在Linux系统中形成更强大的竞争对手。即InfiniBand

查看有关StackOverflow的以下问答: 如何实现TCP内核旁路

进一步阅读:


2

通常是由于linux中缺少现成的网络堆栈/设备配置。在几乎90%的情况下,CPU0处理您的网络流量,而其他闲置。如果您能解决此问题,那么与硬件路由器的区别将不会像您想象的那样激烈。您应该至少设置RSS或RPS(CPU之间基于驱动程序/堆栈的数据包处理分布)。

如果您真的在意linux路由器的性能并且有足够的时间,我建议您阅读packagecloud博客中的这篇文章(也有关于传输数据包的文章)。

如果您需要查看发行版并且认为观看while sleep 1; do cat $some_file_in_procfs; done,CPU掩码评估和手动smp_affinity编写很无聊,那么您可能会发现我的宠物项目netutils-linux非常有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.