所了解到的网络设备设计情况,网络设备CPU很弱,只用来完成如DHCP、ARP路由更新等较轻工作,主要的路由转发直接有ASIC专用芯片。ASIC芯片类似于一段固定程序由硬件来实现,处理速度和能效相比CPU要高出一两个数量级,而且可以由很多物理核心并行完成;这好比GPU要比CPU在专用计算上的差距。思科最新的路由设备号称一台就能实现中国所有人一起视频的能力。
一直挺好奇SOHO路由器如果不使用专用芯片,如何靠那么低配小CPU完成工作的,同时使用无线两台设备直接数据传输为啥就会那么慢。
做个简单测试,先准备材料:
TP-Link TL-WR841ND v7 路由一只(标称300M路由,3年前买的)
固件版本:DD-WRT v24-sp2 (11/21/10) std - build 15778
CPU:Atheros AR7241 rev 1.1 (0x0101) / 400M
内存:32M
测试场景:两台设备A、B连到路由器,A向B 发送20字节TCP 包,B回复A 10 字节TCP 包
1. A 连接无线,B连接有线
测试结果如下:
CPU: 0.0% usr 0.0% sys 0.0% nic 40.1% idle 0.0% io 1.3% irq 58.4% sirq
19时07分38秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
19时07分39秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19时07分39秒 eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19时07分39秒 wlan0 2056.00 2110.00 142.33 255.83 0.00 0.00 0.00可以看到网络转发能力在4k/s左右,再也上不去了;CPU 60%占用,虽然没有跑满,但显然已经成为瓶颈。CPU 都是被linux系统的软中断消耗了。
从这看无线传输的瓶颈在于路由器的CPU。
A、B都连无线的场景应该差不多,就不测试了,目测速度在2000/s,无线局域网速度就是个悲剧。。
2. A 、B 都连有线
CPU: 0.0% usr 0.0% sys 0.0% nic 99.0% idle 0.0% io 0.0% irq 0.9% sirq
19时02分38秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
19时02分39秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19时02分39秒 eth0 49602.00 50085.00 3631.25 5381.04 0.00 0.00 0.00
19时02分39秒 wlan0 0.00 0.00 0.00 0.00 0.00 0.00 0.00可以看到,路由器CPU 占用几乎为0,但平均处理10W/s次TCP包转发.
实际情况下不可能都是这么小包,有线网到达300M速度还是没问题的。
从这可以看出,这个路由器的转发还是用的ASIC芯片,CPU完全不参与转发逻辑。
如果用目前最新CPU处理器处理,单核心差不多也就能达到这个速度了。
总结
有线转发由硬件处理,非常快。无线传输靠CPU计算,系统软中断成为瓶颈。两者快差两个数量级了。
至于无线转发要CPU参与,不懂硬件,不知道啊。。