基于VxWorks网络数据报存储转发的应用研究

时间:2009-11-06

  摘 要: 通信过程对时延敏感,通信数据需要实时的处理。VxWorks可靠的强实时性极好地满足了需求。本文在对 VxWorks操作系统的网络接口实现方式深入解析、对硬件相关部分进行抽象分层的基础上,研究了高速存储转发系统的应用,提出一种优化存储转发效率的方法,对通信过程中的数据报存储、路由查表、数据报转发等技术作了全面的优化设计,并通过模拟测试对效率进行了定量分析,为嵌入式系统在高速存储转发的应用提供了一个可实现的方案。

  1 引言

  网络数据包报的存储转发是网络路由中的关键一环,其运行的效率决定着网络服务的优劣。高度集成的嵌入式系统在处理存储转发这种高密度、高时效的数据时有着巨大的优势。本文基于高性能的嵌入式操作系统 Vxworks提出设计了一种成果显著且易于实现的网络数据报转发优化算法。

  2 VxWorks网络处理流程

  Vxworks系统为了向网络高层协议层提供一个统一的、规范的、方便协议移植的网络接口,在高层 IP层之下添加了一个 MUX层,由 MUX层负责与网络底层驱动的交互。这样做的好处是,使用户在设计协议中不必关心网络底层的数据传递,而在设计网络驱动程序时不必关心协议栈的结构,大大方便了开发。

  在不同网络设备上,用户所要做的是网络驱动程序的移植。内容主要是与 MUX层的交互以及网络设备的中断处理,可以参照 Wind River System公司发布的 VxWorks开发手册中的步骤完成与 MUX层的回调函数的设置。对于中断处理,为了保证实时性,需要尽可能使处理时间短,因此 VxWorks操作系统建议用户在任务级处理中进行具体的数据报的过程工作。我们可以使用 netJobAdd函数将数据报传递给任务级进程继续处理,从而缩短中断处理时间,加快数据的交换速率。

  3 系统优化

  3.1 VxWorks优化 限度的优化VxWorks。由于 VxWorks的可减裁性,用户可以通过裁减不必要的操作系统组件以节约存储空间、处理机处理时间等紧缺型资源。并且可以通过调整 VxWorks中的网络任务处理进程的优先级来达到使网络任务更容易抢占到处理机的目的。这可以通过调用系统API: taskPrioritySet()来实现。这一部分的技术手段是根据硬件资源使用率的调整来实现的。

  3.2 数据报存储优化

  在数据报存储方面,尽量减少数据拷贝次数甚至做到数据零拷贝。在物理层接收到数据报,通过中断机制通知驱动程序后,驱动程序立即进行简单的目的 IP地址首部判决,如果是发给本节点的数据报,则提交给高层协议择机处理;如果是需要转发的数据报,则立即将数据报地址首指针以及目的 IP地址一起作为参数传给网络任务处理进程。网络任务处理进程则将转发的数据报地址指针在转发缓存中排队,同时网络转发任务不断进行转发缓存数据报取出、查找路由转发表,数据报转发等工作。所有的数据转存都是对地址进行操作而不是对实际数据内容进行操作。

  这一过程旨在减少数据拷贝次数,技术上易于实现,因此网络转发主要瓶颈在于路由转发表的构建与查找。在网络规模较小的情况下,查表时延还不明显,但当网络规模很大时,查表性能就会恶化,甚至可能造成查表时间加上传输时延后的总时延大于高层协议允许的时延,造成数据报的重发。类似的,当路由转发表的构建不是时,会造成数据报的转发浪费,同样耗费网络资源。

  4 数据报路由转发算法

  4.1 构造路由转发表

  优化构造路由转发表参考 OSPF内部网关协议 [2][3]。根据网络内链路状态信息进行Dijkstra短路径算法 [4],得出一张在一段时间内化的路由转发表 [5]。设计在使用OSPF的同时,辅以使用双缓冲的技术,即存储空间中存在 A、B两张路由表,转发过程永远使用其中的一张。当使用表 A查表转发时,表 B作为 OSPF表进行计算。当计算完成,交换表 A和表 B地址,表 A自动成为等待计算的 OSPF表。这样的“影子路由表”设计,保证 OSPF协议所涉及到耗时长的计算不影响当时的路由转发效率。

  影子路由转发表工作原理见图 1。

  4.2 路由转发表查找优化

  因为受到数据报分片、分组传送算法的影响,网络在一段时间内相同转发地址的数据报抵达的概率比较大。在正常网络中,通过网络数据报分析实验得到Δt 时间内相同转发IP 地址数据报的抵达数量图见图2。


  从图中可见,当网络空闲时,相同转发地址数据报的在Δt 时间内到达的数量比较平均,但也有相当一部分先后转发的数据报转发地址相同。当网络繁忙时,则产生了数据报骤发现象,在骤发产生到达峰值时,相同转发地址的数据报数量是相当巨大的,造成了刚成功查表转发完一个数据报后,又必须重复的查找上相同的路由。

  系统设计使用一个缓存来存放历史成功转发的路由信息。此缓存长度小于总路由表长度,每次将刚成功转发的数据报路由新增加入缓存头,如果此时缓存数目超过缓存长度,则自动将缓存尾的路由数据删除。在查找路由转发信息时,首先对缓存进行线性查找,找不到则在总路由表中继续查找。

  而在缓存路由表中使用与历史相关的简单排序算法。原理如下:

  假设IPn 的路由在缓存路由表中第m 项,记为Rm,那么每成功转发目的地址为IPn的数据报,就将Rm 提升为R1 项,而原来的R1,R2……Rm-1 向后移动成为R2,R3……Rm。

  缓存浮动排序原理图见图3。

  4.3路由表查找计算与模拟结果

  4.3.1 定量比较

  假设有 m个数据报需要转发,总路由表*有 n个路由项,缓存路由表*有 L项。对路由缓存表进行非排序与浮动排序的比较比较结果见表 1。



  虽然从比较来看是非排序胜出,但在数据报地址历史相关的情况下,由于一定时间内缓存路由表的命中率相当大,因此更能体现出缓存浮动排序后查找的优势。

  4.3.2 模拟结果

  模拟测试方法采用面向数据流的方法测试[6]。 测试数据,利用网络数据报分析工具将收集到的网络转发数据报作为

  测试数据来源。 模拟测试对相同数据流分三类进行。

  1. 不使用缓存,在路由表中直接线性查找。

  2. 使用不排序的缓存,缓存长度为 16项,总路由表项为 1024项。

  3. 使用排序的缓存查找,缓存长度为 16项,总路由表项为 1024项。 测试输出:分别在查找转发中计算路由查找、比较、排序总次数。按每 10000个转发数

  据报进行统计输出。 测试结果见图4。

  结果简述:从图中看出,线性查找所耗费的查找次数远远大于缓存及缓存排序次数。缓存查找比线性查找提高近 68%的查找效率,而缓存排序查找性能则比线性查找提高近 72%,比单使用缓存查找提高近12%,并且随着时间的推移、转发数据报数量的增多,性能差距会越来越大。同时我们通过调整缓存长度,可以使缓存命中率得以大大提高。实验显示:当缓存长度为 16项时,缓存命中率达到了 67%,而当缓存长度为 128项时,缓存命中率达到了 86%。在此基础上缓存查找的性能比起线性查找提升将近有 85%。

  实验结果证明了以上系统优化方案的可行性。

  5.结论

  本文结合实时操作系统VxWorks,介绍了 VxWorks系统网络的开发以及其下存储转发的应用,文中对存储转发优化的方案,可作为 VxWorks网络应用的借鉴。

  本文作者创新点:利用网络数据报时间相关的特点,设计了一套原理简单、可操作强、实际效果显著的能迅速提升网络性能的路由存储转发机制。


  
上一篇:基于GPRS网络的嵌入式系统的研究
下一篇:LinuxBIOS在嵌入式x86系统中的配置

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料