位置:51电子网 » 技术资料 » 通信网络

三层交换机处理器收发包相关问题分析

发布时间:2008/5/29 0:00:00 访问次数:523

在当前的三层以太网交换设备中,报文的二层交换和三层路由主要由交换芯片和网络处理器完成,cpu基本上不参与交换和路由过程,主要完成管理和控制交换芯片的功能[1]。

  在这种情况下,cpu的负载主要来自以下几个方面:协议的定时驱动、用户的配置驱动、外部事件的驱动。其中,外部事件的驱动最为随机,无法预料。典型的外部事件包括端口的连接/断开(up/down),媒体访问控制(mac)地址消息的上报(包括学习、老化、迁移等),cpu通过直接存储器存取(dma)收到包,cpu通过dma发包等。

  在以上所列的外部事件中,又以cpu通过dma收到包之后的处理最为复杂。因为数据包由低层上送到上层软件时,各协议的处理动作千差万别,可能会涉及到发包、端口操作、批量的表操作等。所以,只有处理好cpu的收发包的相关问题,才能使相关的上层协议正常交互,从而使交换机稳定、高效地运行。

  1 可能涉及到的问题

  以下就cpu收发包可能涉及的各个方面分别说明。

  下面的分析都基于典型的cpu收发包机制:cpu端口分队列,通过dma接收,采用环形队列等。

  1.1cpu的负载与收包节奏控制

  根据交换机处理数据包的能力,决定单位时间上送到cpu的包的个数;决定了单位时间上送多少个包给cpu后,再考虑上送数据包的节奏。

  假设通过评估,确定了单位时间上送cpu数据包的上限,例如每秒x个数据包。

  图1给出了两种典型的处理手段:匀速上报cpu、突发(burst)方式上报cpu,下面分别分析一下这两种方式的优劣:

  (1)匀速上报cpu

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

  (2)突发(burst)方式上报cpu

  交换芯片(采用asic)一侧的硬件接收队列和dma内存空间中的环形队列,一起赋予了交换机一定的缓冲能力(针对上送cpu的数据包)。利用这个缓冲能力,我们可以把控制周期适当放长,并设定控制的粒度(单位控制周期内cpu收报个数的上限),采用类似于电路中负反馈的机制动态地使能和关闭cpu收包功能。这样就在宏观上实现了对数据包上送cpu速率的控制。另外,如果交换芯片(采用asic)支持基于令牌桶算法的cpu端口出方向流量监管或整形功能[2-3],且监管或整形的最小阈值可以满足cpu限速的需要,则可以利用这个功能控制数据包上送cpu的节奏,减小cpu的负载。这样软件的处理就简化了很多。

  1.2cpu端口队列的长度规划

  如果仅考虑交换机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基本上不参与交换和路由过程,主要完成管理和控制交换芯片的功能[1]。

  在这种情况下,cpu的负载主要来自以下几个方面:协议的定时驱动、用户的配置驱动、外部事件的驱动。其中,外部事件的驱动最为随机,无法预料。典型的外部事件包括端口的连接/断开(up/down),媒体访问控制(mac)地址消息的上报(包括学习、老化、迁移等),cpu通过直接存储器存取(dma)收到包,cpu通过dma发包等。

  在以上所列的外部事件中,又以cpu通过dma收到包之后的处理最为复杂。因为数据包由低层上送到上层软件时,各协议的处理动作千差万别,可能会涉及到发包、端口操作、批量的表操作等。所以,只有处理好cpu的收发包的相关问题,才能使相关的上层协议正常交互,从而使交换机稳定、高效地运行。

  1 可能涉及到的问题

  以下就cpu收发包可能涉及的各个方面分别说明。

  下面的分析都基于典型的cpu收发包机制:cpu端口分队列,通过dma接收,采用环形队列等。

  1.1cpu的负载与收包节奏控制

  根据交换机处理数据包的能力,决定单位时间上送到cpu的包的个数;决定了单位时间上送多少个包给cpu后,再考虑上送数据包的节奏。

  假设通过评估,确定了单位时间上送cpu数据包的上限,例如每秒x个数据包。

  图1给出了两种典型的处理手段:匀速上报cpu、突发(burst)方式上报cpu,下面分别分析一下这两种方式的优劣:

  (1)匀速上报cpu

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

  (2)突发(burst)方式上报cpu

  交换芯片(采用asic)一侧的硬件接收队列和dma内存空间中的环形队列,一起赋予了交换机一定的缓冲能力(针对上送cpu的数据包)。利用这个缓冲能力,我们可以把控制周期适当放长,并设定控制的粒度(单位控制周期内cpu收报个数的上限),采用类似于电路中负反馈的机制动态地使能和关闭cpu收包功能。这样就在宏观上实现了对数据包上送cpu速率的控制。另外,如果交换芯片(采用asic)支持基于令牌桶算法的cpu端口出方向流量监管或整形功能[2-3],且监管或整形的最小阈值可以满足cpu限速的需要,则可以利用这个功能控制数据包上送cpu的节奏,减小cpu的负载。这样软件的处理就简化了很多。

  1.2cpu端口队列的长度规划

  如果仅考虑交换机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执行的频率得到了控

相关IC型号

热门点击

 

推荐技术资料

耳机的焊接
    整机电路简单,用洞洞板搭线比较方便。EM8621实际采... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!