摘要:三层以太网交换机发展迅速,一方面网络设备的带宽及交换容量大幅提升,另一方面设备所支持的协议种类也随着用户的需求不断增加。如何在大业务量的网络环境下确保各设备之间协议包的正常交互,是以太网交换机设计面临的重要问题。文章以基于ASIC的三层以太网交换机为例,从CPU负载、软硬件队列配置、CPU和交换芯片的通信机制等方面入手,讨论并分析在多进程环境中与CPU收发包功能相关的一些典型问题,得到解决办法。解决方法对于网络处理器(NP)同样适用。
关键词:三层以太网交换机 CPU 中断 轮询 直接存储器存取 队列调度
在当前的三层以太网交换设备中,报文的二层交换和三层路由主要由交换芯片和网络处理器完成,CPU基本上不参与交换和路由过程,主要完成管理和控制交换芯片的功能[1]。
在这种情况下,CPU的负载主要来自以下几个方面:协议的定时驱动、用户的配置驱动、外部事件的驱动。其中,外部事件的驱动最为随机,无法预料。典型的外部事件包括端口的连接/断开(Up/Down),媒体访问控制(MAC)地址消息的上报(包括学习、老化、迁移等),CPU通过直接存储器存取(DMA)收到包,CPU通过DMA发包等。
在以上所列的外部事件中,又以CPU通过DMA收到包之后的处理最为复杂。因为数据包由低层上送到上层软件时,各协议的处理动作千差万别,可能会涉及到发包、端口操作、批量的表操作等。所以,只有处理好CPU的收发包的相关问题,才能使相关的上层协议正常交互,从而使交换机稳定、高效地运行。
1 可能涉及到的问题
以下就CPU收发包可能涉及的各个方面分别说明。
下面的分析都基于典型的CPU收发包机制:CPU端口分队列,通过DMA接收,采用环形队列等。
1.1 CPU的负载与收包节奏控制
根据交换机处理数据包的能力,决定单位时间上送到CPU的包的个数;决定了单位时间上送多少个包给CPU后,再考虑上送数据包的节奏。
假设通过评估,确定了单位时间上送CPU数据包的上限,例如每秒x个数据包。
图1给出了两种典型的处理手段:匀