论文部分内容阅读
随着互联网络的高速发展,网络应用也日趋复杂化和多样化。越来越多的网络应用要求在网络端对数据包进行深度处理(如深度包检测等)网络处理器作为网络设备的核心处理单元必须能够满足深度处理类网络应用的需求。深度处理类网络应用不仅需要对数据包包头进行处理,还要对载荷部分进行处理。而在网络处理器中,数据包的载荷部分通常存储在片外存储器中,访问延迟较高。同时,受存储器芯片带宽的限制,每次只能读/写一个数据段(如64字节)。因此在进行深度处理时,处理单元需要频繁访问片外存储器,这将大幅增加系统的处理时延。传统网络处理器采用硬件多线程机制隐藏访存时延,虽然能够提高处理单元利用率,但是并不能真正降低处理时延。而且,过多的线程切换需要大量的中间结果存取操作,致使系统性能降低。本文提出一种改进的存储器访问机制——Push模型。Push模型对数据包数据进行预取并推送至处理单元本地存储器中,使处理单元能够对数据包进行连续处理。理论分析和实验结果表明,相比传统模型,Push模型在进行深度处理操作时,可以获得更高的系统吞吐率和更低的处理时延。新型网络应用不仅要求对数据包进行深度处理,还要求在处理数据包时考虑网络流内数据相关性。Push模型应用于网络流的连续处理时,需要由调度机制为其提供预取和推送操作的先验信息。如果将同一个流的数据被分配至同一个处理单元,即保持流内数据局部性,则可以减少处理中间结果的转移,从而保证处理的连续性。早期的调度算法多是基于数据包的调度,并没有考虑流内数据的相关性;已有的基于网络流的调度算法虽然能够保证流内数据的局部性,但是在负载均衡方面表现欠佳。因此本文提出了一种基于映射表的调度算法PLBF算法,能够兼顾负载均衡和流内数据局部性的要求。另一方面,该调度算法设计采用硬件并行查找技术,有效的降低了算法执行的时间复杂度。Push模型的引入改变了传统网络处理器的内部通信机制,由之前处理单元主动发起的请求-响应式通信转变为处理单元被动接收的通信模式。在这种情况下,为了避免处理单元当前处理数据与通信消息的冲突,本文提出了分离式消息寄存器堆的概念,并且改进了通信消息的管理机制。实验表明,改进的通信机制在系统吞吐率和线程切换次数方面都取得了很大程度的性能提升。