路由器性能的每一次跃升,都是「把转发从软件搬到硬件」的一次推进。 软件转发与 ASIC 转发差几百倍——这个差距解释了「为什么老路由器会排队」。
上一节看年表,这一节看「性能为什么能涨」。 这一节要算:软件转发的极限,以及它在今天还剩什么位置。
一、三步走
第一步:纯软件转发(1980 年代)。CPU 逐包处理,每秒几千到几万包。 第二步:快路径+慢路径(1990 年代)。 常见包走硬件快路径,特殊包(需要选项处理、需要 ARP)走 CPU 慢路径。 第三步:全硬件转发(1998 之后)。所有包都走 ASIC,CPU 只管协议。
「快慢路径」这个设计今天还在用:正常转发走芯片, 而 TTL 超时、需要分片、需要 NAT 的包会被送到 CPU——这就是「CPU 高说明有异常包」的原因。
二、软件转发还剩什么位置
它没有消失,它换了位置:
云上的虚拟路由器(vRouter)全是软件转发。 它们靠「不用跑满线速」活着——云里东西向流量走虚拟交换机,虚拟路由器只处理南北向那一小部分。 软件定义网络(SDN)的网关也常常是软件转发,因为要灵活。
判断标准只有一条:「要不要跑满线速」。要跑满就得上硬件,不要就可以用软件。
三、动手 Demo:软件转发与 ASIC 转发差多少倍
这段按「每包 2000 条指令」估软件转发能力,三个档位的 CPU 各算一遍, 再与千兆线速的 1.488 Mpps 对比。
for name, mips in ((u"1990 年的路由器 CPU", 50), (u"今天的通用 CPU", 50000)):
pps = mips * 1e6 / 2000
bw = pps * 84 * 8 / 1e6
T([name, u"%s M" % format(mips, u","), u"2000",
u"%s" % format(int(pps), u","), u"%.0f Mbps" % bw], [0, 0, 0, 0, 0])
实跑输出:
--------------------------------------------------------------------
软件转发与硬件转发,差了多少倍
--------------------------------------------------------------------
**「路由器慢」这个印象来自软件转发时代。**这一节把两个时代的转发能力摆一起。
**先算软件转发的极限**:一个包要经历拆头、查表、改 TTL、重算校验、重封装,
每一步都是几条到几十条指令。**乐观估计每个包 2000 条指令。**
CPU 每秒指令 每包指令 能转多少 pps 折合带宽(64 字节)
------------------------------------------------------------------------------------------
1990 年的路由器 CPU 50 M 2000 25,000 17 Mbps
2000 年的 1,000 M 2000 500,000 336 Mbps
今天的通用 CPU 50,000 M 2000 25,000,000 16800 Mbps
**硬件转发(ASIC)的千兆口是 1,488,095 pps,折合 1000 Mbps。**
**拿今天的通用 CPU 跟 ASIC 比**:软件 25,000,000 pps,硬件 1,488,095 pps,差 0 倍。
**再算一个更直观的**:万兆口线速要 14.88 Mpps。
**软件转发要跑到这个数,得每秒执行 300 亿条指令**——**这已经超过单核 CPU 的能力了。**
**所以「软件路由」并没有消失,它换了位置**:vRouter、云上的虚拟路由器都是软件转发,
**它们靠「不用跑满线速」活着**——云里的东西向流量走的是虚拟交换机,
**虚拟路由器只处理南北向那一小部分。**
1990 年的 CPU 只能转 2.5 万 pps,折合 17 Mbps——连一个 10 Mbps 口都跑不满线速。 这就是当年路由器必须排队的原因。
今天的通用 CPU 能转 2500 万 pps,看起来够了。 但那是「全部核心都用来转发」的乐观估计——而实际虚拟路由器还要跑操作系统、还要处理中断,能到十分之一就不错。
万兆线速要 14.88 Mpps,软件转发要每秒执行 300 亿条指令——超过单核 CPU 的能力,得靠多核并行。 这就是为什么 DPDK 这类「绕过内核、绑核轮询」的技术会出现。
30 秒实验
- 看一台路由器的「转发性能」参数,单位是 pps 还是 Gbps。
- 查 CPU 利用率,判断有没有包被送到慢路径。
- 想一想你的业务里有没有「必须跑满线速」的场景。
常见误区
- 以为软件转发已经消失。云上全是。
- 以为 CPU 强就能线速转发。中断与内核开销很大。
- 以为快慢路径是过时设计。今天还在用。
自测三问(点开对答案)
1. 路由器性能演进的三步是什么? —— 纯软件、快慢路径、全硬件转发。 2. 哪些包会被送到 CPU 慢路径? —— 需要选项处理、TTL 超时、需要分片或 NAT 的包。 3. 判断用软件还是硬件的标准是什么? —— 要不要跑满线速。下一节:性能讲完,开始按「卖什么」分类,先看设备形态。
- ☐ (本节完,下一节 03.03.01 路由器设备)