|
摘 要:开发委托代理(Proxy Agent)来解决非SNMP设备的标准化管理,是目前普遍采用的手段。文章针对开发委托代理时遇到的串口通信实时性和系统资源利用不足的问题,提出了一种基于事件驱动和双缓冲区的多任务串口通信的设计思想,结合相关控制算法实现了嵌入式委托代理的设计开发。该方案可用于网络设备上委托代理功能模块或嵌入式委托代理单元的设计实现,配合SNMP管理站可以通过串口实现对非SNMP设备的标准化管理。
关键词:SNMP;委托代理;事件驱动;串口通信;多任务
1 引言
随着网络技术的高速发展与嵌入式系统的广泛应用,灵活高效地为各种通信设备提供管理服务是运营商共同关心的问题。目前,为了将大量的基于串口管理的非SNMP设备纳入到SNMP网管系统中,委托代理是经常采用的方法。通过引入委托代理,可以在不改动现有网路设备的前提下,实现网管功能的升级。在实现上,委托代理可以以嵌入式系统为平台,实现协议转换和相关控制管理功能,并且提供用于上下行通信的以太网接口和串行接口,使SNMP管理站能够管理本来不能管理的网络元素(NE)。
为了解决低速串口通信与系统高实时性要求之间的矛盾,本文提出了一种基于事件驱动和双缓冲区的串口通信设计方案,并在此基础上实现了一个实时多任务委托代理。该设计方案同样适用于CMIP的网络管理系统。
2 委托代理架构
典型的系统架构由七个功能模块组成,工作流程为:
管理站的SNMP报文通过SNMP通信模块被委托代理接收,经过协议映射处理,转换成相应的私有协议服务。然后,由调度控制模块负责处理和调度,通过串口查询和设置NE信息或直接访问MIB库。类似地,应答信息经相同路径原路返回至管理站。另外,调度控制模块还负责主动轮询设备信息以更新MIB库,以及实时响应用户设置等。
如图所示,系统在以太网口与串口间实现协议转换和数据处理,而串口通信相比以太网通信来说属于低速处理机制,这势必会影响系统的实时性能。下文就探讨了如何利用事件驱动机制和数据缓冲技术来解决这个问题。
3 基于事件驱动的串口通信
3.1 事件驱动(Event Driven)机制
事件(Event)是实时系统运行过程中由硬件中断或软件产生的通知消息。事件的分类有三种:(1)由定时产生的时钟接口事件,如定时器事件等;(2)由系统外部接口引起的外部接口事件,如I/O口中断事件等;(3)由系统内部任务间通信或同步时产生的内部接口事件。事件驱动机制是由事件的发生才引起系统做出相应的反应,从而对事件进行处理。这样就显然提高了处理器的使用效率和实时处理能力,尤其在需多任务实时处理的情况下,更有必要采用事件驱动技术。
3.2双缓冲区的串口通信
在该委托代理系统中,串口通信的主要特点有三:(1)要对各种访问信息提供及时响应;(2)针对NE常用的RS485总线连接方式,串口通信一般采用一问一答的主从机制;(3)各种访问信息到达串口的时间和流量具有很大的随机性(例如多管理站请求等)。针对NE的共线连接模式,串口通信一般采用一问一答的主从机制。其处理过程如下:
图二、串口数据处理过程
不难看出,处理串口通信的时间开销由串口请求处理、串口传输和NE响应三部分时间组成。传统单线程的软件结构使这几部分工作无法并行进行,因而限制了系统性能的提高。在单线程模式下,当处于设备响应时间时,委托代理不能做其它事情,只能等待;串口传输时主要由串口总线完成传输任务,cpu只做少量的工作。因此,可以利用空闲的CPU资源做串口请求的分类处理工作,即实现串口通信的多任务处理机制。
在本系统中,需要处理的串口请求有管理站对NE的查询和设置、委托代理对NE的轮询等。由于串口访问的多样性和随机性,系统运行中很有可能出现大流量的串口访问请求。此时,串口就无法满足系统的实时处理要求,甚至会出现丢失串口请求的情况。
而建立串口请求处理缓冲区和串口发送缓冲区(下文简称A区和B区),可以很好地解决这个处理速率匹配问题。A区用于缓存各种串口请求,分类整理后输送至B区,从而形成“稳态”的发送数据流,提高串口的使用效率。
3.3 两者结合的设计思想
串口通信设计注意两点:(1)多任务间同步。为了避免对共享资源的访问冲突,必须考虑任务间的同步问题。用于同步的有信号灯、消息、事件等。本文用事件来表示可以进行串口发送和接收的信号。(2)基于事件驱动和双缓冲区的串口通信设计。发送方建立四个任务:串口请求处理任务、串口发送任务、串口接收任务和内存切换任务。对应定义了四个事件:A区允许处理、B区允许处理、允许串口发送和允许串口接收。
工作原理如下:
① 当A区允许处理事件被触发,在A区内,主程序对各种串口请求进行整理缓存,并打上相应标志; ② 当B区允许处理事件被触发,主程序向B区内导入发送请求;③ 若允许串口发送事件被触发,主程序调用发送任务进行发送处理后返回;④ 在之后的等待时间内,主程序进行任务切换,将CPU时间进行合理分配。⑤ 当监控程序发现串口有数据到来时,允许串口接收事件被触发,程序调用接收任务进行接收处理。任务调用结构如下:
图三、串口通信多任务结构图
事件驱动机制和双缓冲区的使用,成功地解决了串口通信的性能瓶颈问题,实现了串口实时平稳地处理各种访问请求,提高了CPU的使用效率。
4 系统实现
4.1 多任务模型建立
系统多任务模型的建立分为四个步骤:(1)任务划分;(2)任务合并;(3)优先级划分;(4)任务调度。其中,任务间的调度采用循环调度、基于优先级的抢占式调度与事件驱动相结合的方式来实现。即对不同优先级的任务采用抢占式调度,对相同优先级的任务采用循环调度,而对任务间的功能执行顺序的同步采用事件驱动调度。该SNMP委托代理的多任务模型实现如下(由外至内,优先级逐级降低):
图四、委托代理系统多任务模型
4.2相关控制和算法
(1)快速查询模式:在MIB中定义一个查询模式对象GetMode。① 置其为0时,系统向NE发送实时查询报文;② 置其为1时,系统从本地MIB直接给出管理站的相关查询应答。
(2)动态轮询控制:委托代理采取动态轮询机制刷新本地MIB。① 在每次轮询前检查上次执行情况。若上次轮询结果正常,则按较大的轮询间隔来收集数据;否则立即调节轮询间隔为最小值,直到NE恢复正常为止。② 系统根据设备管理信息维护了一个稳态内容轮询表和一个动态内容轮询表。前者包括NE的系统信息等相对稳定的内容,轮询更新的时间间隔大;后者包括NE的告警信息等随时变化的内容,轮询更新的时间间隔小。
(3)对多管理站的智能响应。实现如下:① 数据共享:在一阈值时间内,若系统接收到多条不同管理站下达的同一请求命令,那么将只执行一次操作命令,并将执行结果共享给所有请求管理站。② 合并操作:在一阈值时间内,若系统接收到多条不同管理站下达的不同请求命令,且有一个私有协议命令包括了所有请求想要获知的数据,那么就执行一次这一命令,完成多管理站请求的合并操作。
5 验证实例
在国家级火炬计划项目:中小容量多业务SDH光纤综合接入平台的委托代理设计中,多任务委托代理在Rabbit3000平台上采用Dynamic C语言开发成功,它将应用较为广泛的通信设备的串口(RS232/485/422)网管方式平滑升级到SNMP网管方式
该系统中,基于事件驱动的多任务串口通信机制大大提高了串口的适配性能,轮询采用的动态控制算法又在此基础上将串口平均延时明显缩短。经过验证,当串口速率为19200bit/s、RS485口接有8台支持私有协议的PDH和SDH光传输设备时,串口通信平均延时在1.5s以内。采用动态轮询算法后平均时延又缩短了30%。通过长期的运行测试,系统体现了高效的管理效率与流畅的适配性能。
6 结束语
本文通过对事件驱动技术和多任务串行通信机制的讨论和研究,提出了一种基于事件驱动和双缓冲区的串口通信性能瓶颈解决方案,并在此基础上实现了SNMP嵌入式委托代理的设计开发,解决了低速串口到高速以太网口的适配问题,在“遗留”产品的标准化管理方面有着广泛的应用前景。