天下网吧 >> 网吧方案 >> 方案分析 >> 正文

三层以太网交换机CPU收发包问题的分析

速上报CPU、突发(Burst)方式上报CPU,下面分别分析一下这两种方式的优劣:

(1)匀速上报CPU

数据包匀速上报CPU时,对CPU队列的冲击较小,而且对CPU队列的缓冲能力要求不高,CPU队列不必做得很大。

[1] [2] [3] 下一页

(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所示)。

本文来源:天下网吧 作者:网吧方案

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系Email:support@txwb.com,系统开号,技术支持,服务联系QQ:1175525021本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下