(2)突发(Burst)方式上报CPU
交换芯片(采用ASIC)一侧的硬件接收队列和DMA内存空间中的环形队列,一起赋予了交换机一定的缓冲能力(针对上送CPU的数据包)。
利用这个缓冲能力,我们可以把控制周期适当放长,并设定控制的粒度(单位控制周期内CPU收报个数的上限),采用类似于电路中负反馈的机制动态地使能和关闭CPU收包功能。这样就在宏观上实现了对数据包上送CPU速率的控制。另外,如果交换芯片(采用ASIC)支持基于令牌桶算法的CPU端口出方向流量监管或整形功能[2-3],且监管或整形的最小阈值可以满足CPU限速的需要,则可以利用这个功能控制数据包上送CPU的节奏,减小CPU的负载。这样软件的处理就简化了很多。
1.2 CPU端口队列的长度规划
如果仅考虑交换机CPU端口的缓冲能力,CPU端口队列当然是越长越好,但是必须兼顾对其他功能以及性能的影响。针对不同的ASIC芯片,需要具体问题具体分析。
1.3 零拷贝
零拷贝是指在整个数据包的处理过程中,使用指针做参数,不进行整个数据包的拷贝。这样可以大大提高CPU的处理效率。
使用零拷贝后,会一定程度上降低软件处理的灵活性,我们会面临到这样的问题:如果协议栈需要更改一个数据包的内容,会直接在接收缓存(buffer)上修改,但是如果需要在数据包中删除或添加字段(例如添加或删除一层标签(tag)),即数据包的长度需要变化时,应该如何处理。
添加或删除字段,必然会导致数据包头一侧或包尾一侧的位置发生移动,如果包尾一侧移动,问题比较简单,只要数据包总长度不超过buffer边界即可。由于通常此类操作都靠近包头的位置,如果包头一侧移动,效率会比较高,所以协议栈在处理时可能更倾向于在包头一侧移动,这时就需要驱动在分配buffer时做一些处理:
(1)接收数据包时,头指针不能指向buffer边界,需要向后偏移一定裕量,同时单个buffer的大小也必须兼顾到最大传送单元(MTU)和该裕量。
(2)释放数据包时buffer首指针需要作归一化处理(如图2所示)。

1.4 中断/轮询
目前交换机涉及到的外部中断主要由交换芯片产生,交换芯片主要的外部中断包括DMA操作(如收到包、发包结束、新地址消息等等)和一些出错消息。如果中断请求过于频繁,中断服务程序(ISR)和其他进程之间频繁地上下文切换会消耗大量CPU时间。如果有持续大量的中断请求,CPU会始终处于繁忙状态,各种协议得不到足够的调度时间,从而导致协议状态机超时等严重故障。
为了避免事件触发频率不可控的问题,可以使用轮询机制,通常的做法是用CPU定时器触发原先由外部中断触发的ISR,由于定时器触发的间隔是固定的,所以ISR执行的频率得到了控制,避免了上述的问题。
轮询和外部中断相比,只是节奏可控(外部中断的节奏取决于外部事件发生的频率,CPU不可控)。但是,轮询也有其不可避免的缺点——响应慢。不能满足某些实时性要求较高的功能。另外,人们会发现用ping命令检测交换机3层接口大包时,使用轮询方式的交换机比使用中断方式的交换机的时延明显要大。
相关专题
- 三层交换技术专题 (1707篇文章)
- 交换机与路由器密码恢复 (3942篇文章)
- 交换机的选购 (1633篇文章)
- 常用交换机典型配置 (1633篇文章)
- 交换机故障处理手册 (1692篇文章)
- 以太网技术介绍 (782篇文章)
- Cisco交换机专题 (4261篇文章)
- 千兆以太网 (782篇文章)
- 华为交换机 (2432篇文章)
- 思科交换机配置 (4261篇文章)
- Cisco路由器配置语句全攻略 (3次浏览)
- Cisco网络设备IOS常用的五大配置技巧 (0次浏览)
- linux设置成cisco路由器的日志服务器 (0次浏览)
- Cisco路由器WAN配置简单攻略 (0次浏览)
- Cisco和H3C交换设备 ARP病毒快速解决办法 (0次浏览)
- 思科VPN配置十大常见问题及其解决方法 (0次浏览)



