网络处理器设计的复杂性

网络处理器设计的复杂性

李华伟

网络处理器(Network Processor,简称NP )是面向网络应用领域的专用指令处理器(Application Specific Instruction Processor ),是面向数据分组处理的、具有特定电路的软件可编程器件。它将RISC (Reduced Instruction Set Computer-精简指令集)处理器的低成本、灵活性与ASIC (Application-Specific Integrated Circuits-专用集成电路)专用网络处理芯片的高性能、可扩展性很好地结合在一起,提供了适应网络发展(新协议、新应用)的能力。NP 的出现,标志着设备对数据分组的处理能力从低层粗放式处理过渡到高层细化处理。基于NP 开发的网络系统可以缩短进入市场时间(time-to-market ),而且由于其可编程性使其具有较长的市场寿命。本文将重点围绕网络处理器设计的复杂性、设计中所需要权衡的各种因素进行分析。

1. 网络处理器的功能

网络处理器的功能是由它所需要实施的操作以及它在目标网络系统中的任务决定的。一方面,NP 需要有足够的分组处理能力。另一方面,NP 确切的功能依赖于使用它的系统的体系结构。或者换句话说,目标系统中NP 与其他组成部分之间的分工方式决定了NP 的功能。

工业界对于协议栈中各层次协议功能及其特殊需求的实现已经相当有经验了。然而,NP 不是为某个特定的协议而设计的,它的指令集并不需要包含处理某个协议所需的所有指令。NP 的目标是具有足够的功能来处理“任何”协议,也就是具有网络协议处理的通用性。NP 的协议处理通用性不是通过设计的全面性来保障的。尽管设计人员可以针对需要处理的协议的每个特征,穷尽所需要的指令,但毫无疑问这种方式将产生笨拙的设计并带来芯片面积的浪费。反过来,抽取最小化的功能集能够使设计精简并高效。为此,设计者必须分析不同协议的特征,识别它们的共性,推导出可以高效处理所有特征的最小指令集。因此,确定“最小化”的功能集就成为NP 设计的一大挑战。

1.1 分组处理功能

设计一个通用的网络处理器的第一步是识别多数协议所需要的功能。一般来说,完成分组处理任务包括下面一些功能:检错和纠错、流量测量和策略、帧和协议的分解、地址查找和包转发、分段和重组、包分类、流量整形、定时和调度、排队、安全(认证和私有)。尽管这些功能都可以在一个传统的通用指令集CPU 上完成,但增加特定的指令可以提高完成这些功能的性能。例如就排队来说,NP 只需要关心包的队列,而不是其他任意的队列,因此NP 可以针对包队列进行优化,设计专用指令。类似的,由于大多数协议都需要CRC (Cyclic Redundancy Check ,循环冗余校验)或校验和进行差错检测,NP 可以包含相关的专用指令以提高运算速度。

NP 设计者需要考虑下列一些问题:1)上述功能是否足以涵盖所有协议处理?2)哪一项功能的优化最重要?3)如何将上述功能映射到一个典型网络系统的硬件单元?4)一个典型网络系统的哪些硬件单元可以用一个NP 来替代?5)实现上述功能的最小完备指令集是什么?所有这些问题都不容易回答,它们构成了研究网络处理器设计的基础问题。

1.2 入口和出口处理

为了降低设计的复杂性,可以将一个复杂问题分解成几个小的子问题一一加以解决。这种分而治之(divide-and-conquer )的方法在很多领域都受到欢迎,NP 设计也不例外。最常用的一种方式是将分组处理任务分成入口和出口处理两部分。入口处理关注包的到达过程,出口处理关注包的离开过程。

包到达

包离开

入口处理: 差错检测和安全验证 分类或协议分解 流量测量和策略 地址查找和包转发 包头修改和传输层处理 重组或流终止 转发、排队和调度 出口处理:

差错检测码插入

地址查找和包转发

分段或分片

流量整形

定时、调度、排队和缓冲

包头修改

输出安全处理

图1是典型网络系统中入口和出口处理的示意图。典型情况是包通过且仅通过交换矩阵一次,因此交换矩阵成为入口和出口处理自然的分水岭。入口方面,数据包到达一个输入端口后,首先需要进行差错检测,然后通过协议分解或分类来确定系统需要对包实施何种操作。系统有时候需要维护一些状态信息,例如历史流量的记录、数据片段的收集重组等。入口处理还需要包含对排队、调度、转发的支持。为了使包通过交换矩阵,有时需要将数据包分成固定大小的数据块传送。最后,入口处理还包括包头的修改、传输层的一些处理等。出口方面,从交换矩阵获得包,有时需要对数据片断进行收集。出口处理包括:确定输出端口、根据输出端口信息对数据包进行分段、进行流量整形及相关的排队调度操作、进行包头修改、差错检测、进行加密等输出安全处理。

2. 网络处理器与网络系统

2.1 并行和分布式结构

如果采用集中式设计,让一个网络处理器在快速数据通路上完成所有分组处理任务,将系统收到的每一个包转发到输出端口上,这样所得到的NP 与传统的处理器一样,可扩展性较差。即使这个NP 中包含针对协议处理的优化硬件设计,NP 本身的时钟频率将成为限制吞吐量的关键因素。为了避免性能瓶颈,可以采用三种通用的技术提高可扩展性。首先,一个典型的NP 可以包含各种硬件单元,对每个硬件单元进行专门设计来完成一个特定的功能;第二,为了提高总的处理速度,在NP 上复制多个可以独立工作的关键的硬件单元,使NP 可以并行或以流水线的方式实施多个操作;第三,将NP 设计成分布式结构。这样,当 图1 典型网络系统中入口和出口处理的示意图

多个NP 连接起来时,它们可以共同工作以获得更高的总的吞吐量。总的来说,对可扩展性的要求给NP 的设计带来了很大的困难,设计者必须考虑设计或选择处理专门任务的硬件单元、能够并行操作的可重复的硬件单元、以及支持分布式执行的硬件。

2.2 网络处理器在系统中的角色

在网络系统的总体结构中,NP 并不固定地处于单一的位置上,相反,它可以承担系统中多种角色任务,这使得NP 的设计进一步复杂化。NP 可以设计成替代网络系统中的功能单元,或者作为附加功能单元对某项功能进行强化。一般来说,NP 在网络系统的总体结构中可以作为下述角色:

⏹ 替代一个传统的CPU :为此,NP 必须具有传统的CPU 指令;为了与传统的CPU 区别开来,NP 需要增加专用的指令以实现优化的分组处理功能。

⏹ 附加在一个传统的CPU 上:由传统的CPU 完成大多数分组处理任务。由NP 完成特殊的任务。这种附加可以用预处理或协处理两种方式实现。预处理一般在入口处理阶段实施,例如对来自硬件端口的包进行分类,再交给传统的CPU 进行处理。协处理方式则功能更强大,任何可能通过专门硬件加速的分组处理功能都可以设计协处理器完成。使用附加在一个传统的CPU 上的NP ,主要好处是降低了设计的复杂性。设计者可以专注于分组处理功能而不需要考虑传统的指令;其难点在于需要额外的硬件处理CPU 与NP 的接口问题,为CPU 调用NP 提供有效机制。

⏹ 在网络接口卡的输入通路上,承担入口分组处理任务:NP 的可编程性提供灵活的、可改变的入口处理。

⏹ 在网络接口卡与交换矩阵之间作为网络接口卡和交换矩阵的中介:NP 与交换矩阵的控制器进行交互,以建立通路、传输数据和释放通路。

⏹ 在交换矩阵和输出接口之间控制输出端口的访问:某些交换矩阵采用分布式控制机制,由每个输出端口控制对它自己的访问。当一个输入端口需要使用交换矩阵时,它需要使用一种独立的机制(例如独立的总线)通知相应的输出端口;输出端口对需求进行调度,通知潜在的发送者发送数据。这些功能可以设计NP 来完成。

⏹ 在网络接口卡的输出通路上承担出口分组处理任务:NP 从交换矩阵接受包、管理队列、实现流量整形、发送分组到输出端口。

⏹ 像其它端口一样连接在交换矩阵上作为一个中间站:数据包可以从输入端口通过交换矩阵到达NP ,再从NP 通过交换矩阵到达输出端口。由于交换矩阵允许扩展,因此作为中间站的NP 集合也很容易扩展。这样,为了获得最大程度的并行,系统可以将到达的包分布在整个NP 集合中进行处理。我们可以设想一种宏观的数据流水线,流水线的每个阶段用一个NP 来实现,这些NP 通过交换矩阵连接起来:NP i 实现第i 个阶段的功能,把处理后的包通过交换矩阵传输到实现第i+1个阶段功能的处理器NP i+1。 由于NP 可在系统中胜任多种角色,如今它已不再局限于作为核心交换和路由设备中ASIC 的取代品而向更广泛的应用领域扩展。2003年,多服务接入网和企业网是网络处理器的主要应用领域。来自消费电子市场的需求将会延伸网络处理器的内涵,为其带来新的活力。面向接入层的各种媒体网关,包括用于家庭的接入媒体网关将会是网络处理器最重要的应用之一。其它存在商机的领域包括无线基础设备、IP 服务交换机、存储区域网等。网络处理器在安全方面也有着广泛应用,如VPN (Virtual Private Network—虚拟专网)、防火墙和入侵侦测业务等。在电信方面,多服务宽带接入领域,如第三代无线网络控制器(RNC- Radio

Network Controller)、媒体网关、光纤环网的宽带接入等都将是网络处理器的重要应用领域。

2.3 平台NP 和专用NP

我们可以从NP 在系统中的角色看到设计NP 的两种思路和目前市场上NP 的两种产品类型。一种是实现一个通用的网络处理器,试图解决所有分组处理任务,由此产生了平台NP 产品。另一种则针对分组处理功能中某一具体操作进行优化,由此产生了各种专用NP 产品。

平台NP 应该能够实现所有的分组处理功能而不是对某种具体处理功能优化。今天,所有的NP 厂商几乎都在围绕着性价比,以及应用功能的广泛性进行竞争。

未来将要求所有的平台NP 厂商都必须能够提供真正意义的“平台”。顾名思义,平台NP 应该能够容纳所有分组交换处理功能部件,安置第三方提供给网络设备制造商的一切软件和硬件,并成为它们运行的基础。为此,平台NP 应该为网络设备制造商和第三方的开发人员提供编写应用软件开发环境。此外,平台NP 还应该成为连接和控制有关硬件如外围用NP 、专用协处理器、存储器电路、PHY (Physical layer)层的芯片、交换矩阵等等的枢纽。

专用NP 则是针对分组处理功能中某一具体操作进行了优化的NP ,它的作用仅仅限制于该项操作。例如,用于加密或压缩的专用处理器。加密和压缩操作要用到相当特殊的算法。这些操作最好由经过优化的专门适合于处理此项操作的集成电路来执行。再如查表/分类操作。如果这类操作运用比较频繁,就有必要采用一个单独的专用NP 来处理,以便平台NP 能集中精力处理其它的分组处理操作。此外,还有一些专用NP 是优化后用在第二层协议上,处理语法分析/帧形成操作。例如,以太网MAC (Media Access Control)帧,HDLC (High Level Data Link Control Protocol)帧,或ATM (Asynchronous Transmission Mode)单元。

有时又把专用NP 称为外围NP 。所谓“外围”的意义在于它需要和负责处理总体分组交换处理任务的主要处理器相配合。可以担任主要处理器的器件有RISC 、CPU 、ASIC 或者平台NP 。外围NP 厂商所提供的开发工具只针对此外围NP 所担负功能有关的操作。为外围NP 编写的程序必须通过API (Application Program Interface)与担负总体分组处理的处理器进行通信。例如,设计用来加速查表/分类操作的外围NP 必须将其处理结果通知平台NP ,平台NP 再根据此结果执行一定的动作。

3. 网络处理器的硬件体系结构

网络处理器的硬件体系结构一般具有如下一些特征:

⏹ 采用多内核并行处理器结构:片内处理器按任务分为控制平面处理器和数据分组协处理器。控制平面处理器通常负责非实时的管理任务;数据分组处理器进行实时、线速数据分组处理。

⏹ 优化指令集,设计专用硬件加速处理单元:通常采用RISC 技术,结合多级流水线技术,大部分指令在一个时钟周期完成。并针对网络协议处理特点,设置专用硬件加速处理单元,提供专用指令如压缩指令、哈希查找、状态判断、数据读写指令。

⏹ 优化内存管理和分级存储器组织:NP 需要进行大量的数据分组的接收、存储、复制、转发,内存操作成为系统开销的一大瓶颈。为了解决这个问题,通常采用块数据移动技术和特殊的优化存储接口。同时对数据进行分类存储:SRAM 用于存放需要快速查找的各种表结构;SDRAM 用于存放数据分组信息。

⏹ 支持硬件多线程:为了提高NP 资源利用率,每个数据分组处理器还支持多个硬件线程。每个线程都有一套专门的硬件来存放上下文(Context ),以获得线程切换的零开销。 ⏹ 多个高速I/O接口:包括物理链路接口、交换接口、存储器接口、PCI 总线接口。 ⏹ 可扩展性:多个NP 之间可以互连,构成网络处理器簇,以支持更为大型高速的网络处理。

由于一个NP 上包括许多处理器共同工作,处理器层次是NP 最重要的硬件特征。NP 一般有如下处理器层次:1)一个或多个嵌入式RISC 处理器,通常工作在控制平面提供总的控制,处理高层协议,可编程; 2)多个I/O处理器(又称为包引擎、微引擎),工作在数据平面,实施入口和出口线速处理,可编程;3)一个或多个专用协处理器,优化设计完成特定的分组处理功能,通常被I/O处理器调用,不可编程;4)一个或多个交换矩阵接口,不可编程;5)一个或多个数据传输单元,处理I/O设备和存储器之间的数据移动,不可编程。

一个网络系统中完全的处理层次还应包括:6)传统的通用CPU ,工作在控制平面,处理管理任务,包括监视系统性能、运行路由协议、给系统管理员提供配置界面等,可编程;

7)成帧器和物理传输器件,实现低层次I/O处理,有时也在NP 中实现,不可编程。 4. 网络处理器的软件体系结构

许多NP 厂商为他们的NP 提供参考应用系统,帮助用户了解如何设计NP 的软件。用户通常不需要从头设计软件,只需在厂商提供的参考软件基础上进行修改。因此,NP 设计者可以影响NP 的软件体系结构。大多数软件体系结构遵循下面某种模式:

⏹ 主程序把协处理器当作子例程调用。

⏹ 主程序与可编程I/O处理器上运行的代码互相作用。

⏹ 使用通信线程。

⏹ 使用事件驱动程序。

⏹ 使用流水线。

⏹ 使用远程过程调用风格(程序组件分布在不同处理器上)。

⏹ 使用上述模式的组合。

很显然,有些软件体系结构是与底层的硬件相匹配的。例如,NP 芯片上如果存在用于异步事件的硬件分派单元,那么很自然地就有事件驱动的软件体系结构。相应的,NP 提供的对线程的支持和数据传输机制为通信线程体系结构奠定了基础。

流水线体系结构则并不一定要求底层硬件使用流水线。例如,通过不同线程实现分组处理的不同阶段,可以构建分组处理的流水线,数据包在不同线程中的相继处理体现了它在流水线不同阶段之间的移动。线程可以在一组并行处理器上执行,这些并行处理器本身不需要配置成一条流水线,甚至完全可以在单个处理器上通过创建多个线程来实现软件流水线。

远程过程调用风格的体系结构不是创建互相独立的程序,而是建立单个程序,使其不同组件运行在多个处理器上。例如,使程序的主要组件运行在一个嵌入式RISC 处理器上,处理复杂计算;而它的子组件则运行在多个I/O处理器上,处理入口和出口操作。

NP 的软件体系结构必须与NP 在处理器层次上很好地匹配。为了获得高性能,分配给每个处理器的任务需要和它的处理能力相匹配。数据平面任务的描述非常简明,协议简单、传输速率高,因此需要的代码较少,但是处理能力较强。而控制平面处理的协议较为复杂,所以任务的描述也较为复杂,不需要很强处理能力,但需要执行更多的代码。

处理层次越低往往操作速度越高。例如,物理传输层次决定了系统的线速度,即数据进入和离开整个系统的最大速率。为了尽可能避免瓶颈存在,数据传输、交换矩阵接口、协处理器硬件都需要设计成以线速操作,从而保证包全速流入I/O处理器。I/O处理器上运行的指令操作的层次低于嵌入式处理器,因此前者的时钟频率常常高于后者。为了使性能最佳化,任务应该尽可能在I/O处理器上完成。在嵌入式处理器与外部通用处理器之间的任务分配同样应该使任务尽可能在嵌入式处理器上完成。总的来说,为了获得最优的性能,分组处理任务应该尽可能被分配到能够完成该任务的最低层次处理器上。

5. 网络处理器设计与软件仿真

设计一个通用的网络处理器是相当复杂的。为了控制复杂性,NP 设计通常需要依赖于软件仿真。在硬件设计开始之前,设计者花大量时间来建立软件仿真器,用来验证设计的功能和评估性能。为此,需要有运行在目标芯片上针对各种应用的基准程序,把这些程序编译后使用软件仿真器来测量可获得的性能。

然而,与传统的处理器不同,NP 的评估不能使用传统的处理器基准程序。这是因为NP 的设计涉及许多低层次的硬件细节,不同NP 的内在体系结构是不同的,应用程序和基准程序无法在不同NP 之间简单地共享。因此,针对每一特定NP, 必须重新设计软件以匹配目标体系结构。而且,当软件从一种体系结构移植到另一种体系结构时,有时甚至需要完全重组代码,这给性能的比较带来困难。

这里,设计者还面临类似于“鸡生蛋”还是“蛋生鸡”的问题。一旦创建了一个硬件体系结构,程序设计人员可以设计软件来针对这个结构,编写优化的程序;反过来,一旦有了软件,硬件设计人员可以选择一个更好的体系结构来匹配软件设计。在设计NP 时,设计者面临多种可能的体系结构方案,软硬件设计必须紧密集成在一起,互相依赖。NP 上运行的软件必须和硬件一起进行设计,这进一步增加了设计的复杂性和工作量。

6. 网络处理器设计需要权衡的各种因素

由于网络处理器是个复杂的器件,可能用于多种目的,因此设计NP 需要权衡的因素相当多。作为本文的总结,这里分析其中一些重要因素,特别是我们在NP 设计中遇到的一些难点。

⏹ 可编程性和处理速度:可编程性所提供的灵活性和高度适应性在高速发展的网络领域尤其重要。另一方面,专用的硬件提供了更高的处理速度。若干年以前,可编程性和处理速度的权衡体现在选择传统的通用指令集CPU 还是选择专用芯片上,前者用在低速系统中,后者用在高速系统中。现在这种选择成为NP 设计者需要考虑的重要因素,它与NP 的体系结构和指令集设计息息相关。设计者需对应用目标有准确的把握,才能在体系结构的设计中对可编程性与处理速度做出恰当的考虑。

⏹ 速度和功能:为了高速处理网络领域特定的任务,需要对NP 的指令集进行优化。随着任务的扩展,需要增加更多的指令,这样NP 的功能就增强了。但是,不同的指令

可能需要不同的执行时间,处理器必须包含复杂的调度和同步机制,反过来增加了时间开销和设计复杂性。因此,速度和功能之间必须有很好的折衷。

⏹ 性能--数据速率、包速率和包的突发性的综合考虑:在NP 的系统设计阶段,性能的评估是必不可少的。通常有两种衡量性能的指标:最大的数据速率和最大的包速率。最大的数据速率是数据能够到达和离开一个网络系统的最大速率,它限制了系统能够匹配的网络端口的容量,一般使用的计量单位是Mbps 或Gbps 。如果系统能在所有网络端口满负荷的情况下无阻塞地完成分组处理和转发,我们称系统能够进行线速处理,并以端口容量描述线速处理的性能。另一方面,由于许多协议处理操作是以包为单位进行的,尽管每个数据包的大小是不一样的,但对每个包的处理需要的CPU 时间是固定的,因此,包速率通常比数据速率更重要。然而,精确的性能评估非常困难。首先,由于NP 应用的范围很广,不存在可特征化NP 操作的小任务集合,于是需要在大量的任务模式下测量NP 的性能,而基准程序在不同NP 之间不可重用(见本文第5部分)进一步给测量带来了困难。第二,NP 的测量需要在流通负载下进行,而包的突发性使得流量特征很难刻画。稳定的包流与现实网络的情况是不一致的,精确的评估需要采用突发分布。不幸的是尽管这方面的研究很多,人们从来没有对流量特征达成一致意见。网络流量模型一直是困扰网络领域的一大问题。于是用于性能测试的流量负载选择的困难性就可想而知了。

⏹ 协处理器设计:协处理器硬件有两种工作方式--旁路调用与数据通路。以旁路调用方式工作的协处理器类似于过程调用,由主处理器根据需要调用。而数据通路上的协处理器则以流水线方式处理数据,在数据通过它时对数据进行修改。后者有两个问题。首先,为了避免成为瓶颈,数据通路上的协处理器必须以线速度工作;第二,由于这些协处理器更紧密地集成在设计中,很难进行改变。以旁路调用方式工作的协处理器有着模块化的优势,可以根据需要扩展,增加新的协处理器,不需要对体系结构作太大改动。但是,旁路调用时主处理器与协处理器之间大量数据传输产生的开销将影响性能。

⏹ 流水线--均衡与同步:在一个均衡的流水线上,功能单元处理包的时间是相同的,从而减少了数据缓冲和同步开销。但是,对分组处理功能的分解很难做到完全均衡,强制的均衡结果是快速阶段必须等待慢速阶段。可是如果流水线设计成不均衡的,最慢的阶段会成为流水线的瓶颈。

⏹ 并行--吞吐量与包的乱序:并行体系结构通常都要有维护包的顺序的同步机制。但另一方面,如果放宽对包序的要求,可以简化复杂的同步操作,减少硬件需求,减少处理器的停滞和输出端口的等待,从而提高系统总的吞吐量。

⏹ 并行--速度与状态信息共享:并行工作的处理器为了避免干扰,必须同步访问共享的状态信息。由于在任何特定时刻只有一个特定处理器可以修改共享的信息,这必然导致并行速度降低。网络系统中状态的频繁更新,使得状态信息共享对速度的影响变得更严重。包的分类是一个典型的例子。静态的包分类(即包头的值只需要与常数进行比较)能够获得并行带来的N 倍速度;而动态的包分类(即由一组数据流来决定类别)由于要保留状态信息,性能必然要下降。

⏹ 存储器--速度与可编程性:存储器通常被划分成几个存储体,允许同时访问不同的存储体。在多数情况下,为了获得最大的访存速度,必须刻意地把数据放到存储体中以避免访存冲突。这自然会影响可编程性:程序员需要了解存储体,给编程带来困难。 ⏹ 编程语言设计的权衡:对NP 的编程语言来说,必须在易编程性、功能与代码速度之

间找到平衡点。如果以高速为目的,需要在易编程性与功能之间进行折衷。包含为特定任务裁减的高级构件的集合的编程语言虽然容易使用,但对任意任务的适应性差。而具有足够的特征面向多种任务的编程语言可用性差(因为程序员处理每个任务都面临多种选择)。因此,NP 设计者必须选择既容易编程又提供足够功能的编程语言。如果想获得强大的功能,就需要在易编程性与速度之间进行折衷。高级语言虽然容易使用,但映射到底层硬件结构时效率较低。因此,使用高级语言产生的代码往往不如使用低级语言产生的代码更有效。这也是为什么许多NP 要求程序员使用汇编语言来获得最大的吞吐量。如果强调易编程性,则需要在速度与功能之间进行折衷。如果将一种语言限制在某个特定应用上,编译器能够产生高度优化的代码。随着一种语言功能的扩展,其所产生的代码优化也越来越困难。因此,语言设计者需要在功能与代码的优化之间作出权衡。

⏹ 多线程--吞吐量与可编程性:为了获得较高的吞吐量NP 必须支持多线程。通过允许程序员指定多个计算,使得即使在一个线程阻塞、等待协处理器或I/O处理的情形下,处理器仍然可以继续执行其它线程。多线程的主要缺点是程序员必须协助线程的活动,从而增加了编程的复杂性。即使在硬件能够自动处理线程的抢占和切换时,程序员也许还是需要确保线程与共享资源使用之间的协调。因此,在高吞吐量和可编程性之间需要作出权衡。

⏹ 流量管理与设计成本:对网络服务收费的ISP 和其他组织需要网络系统能够管理流量,通过按优先级给流量提供服务以获得最高的利益。从体系结构的角度来看,这意味着流量管理、速度与成本的折衷。嵌入式RISC 处理器能够在较低的速度实施流量管理。如果需要高速的流量管理,就必须由专门的硬件来完成,这将会增加总的设计成本。 ⏹ 体系结构的通用性与专用性:本文第2部分介绍了NP 在网络系统中可能承担的各种角色,介绍了平台NP 和专用NP 。也就是说,设计者需要决定是设计可以在任何系统中使用的单个通用的NP ,还是设计一组专用的NP ,每个NP 完成某种特定的功能。此外,NP 所支持的协议类型也影响着NP 的硬件复杂性。例如, MPLS (Multiprotocol Label Switching--多协议标签交换)与传统的IP 或Ethernet 相比,需要更多的硬件支持。设计者需要确定是需要设计特定协议的处理器,还是只设计一个通用的体系结构。 ⏹ 存储器类型--专用与通用:NP 通常使用通用的存储器--SRAM 和DRAM 的组合。它们在访存时间、接口硬件和成本上各有优缺点。另一方面,专用的存储器技术提供了更好的性能特征。其中最特殊的一种存储器是CAM (Content Addressable Memory--内容可寻址存储器)。一个简单的CAM 查找可以替代多个SRAM/DRAM访存。单个CAM 存储器可以替代多个SRAM/DRAM存储器。CAM 还能够免去设计查找协处理器的需要。但是,CAM 非常昂贵,并且带来了更高的功耗。

⏹ 并行与流水:许多设计人员认为设计NP 只存在两种基本的方法:并行方法或者流水线方法。实际上,很少有人排他的使用上述之一来设计NP 。几乎所有NP 的结构都是二者的混合体。当不同阶段的处理任务量不均衡时,可以采用并行技术来加速某个任务量较大的阶段。NP 设计者需要在并行和流水之间进行权衡。由于设计者并不能准确了解芯片的使用方式,只能大致的估计不同阶段的任务量,因此这种权衡是非常困难的。

总的来说,NP 设计者需要在更丰富的功能、更高的性能和更低的成本之间进行权衡。针对应用多样化和OEM 对成本越来越敏感的态势,网络处理器技术将向以下几个方向发展:

1) 集成度更高,将硬件部件与功能强大的其它微引擎集成以处理更高线速的数据;2)软件

能重复使用,使OEM 能快速地提供多种服务;3)具备一整套工具、开发环境和模拟环境以加速用户开发周期和提高质量。

作者介绍:

李华伟: 博士,中国科学院计算技术研究所信息网络研究室副研究员,硕士生导师。2001年在中国科学院计算技术研究所获博士学位。担任IEEE 第4届WRTLT 程序主席,IEEE 第12届亚洲测试会议程序委员。担任中国计算机学会容错专业委员会委员,第3届全国测试会议程序主席。主要研究领域包括集成电路设计、验证与测试、网络处理器设计等。在国内外刊物和学术会议上发表论文30余篇,获得1项发明专利正式授权,此外正在申请并已受理的发明专利有3项。

网络处理器设计的复杂性

李华伟

网络处理器(Network Processor,简称NP )是面向网络应用领域的专用指令处理器(Application Specific Instruction Processor ),是面向数据分组处理的、具有特定电路的软件可编程器件。它将RISC (Reduced Instruction Set Computer-精简指令集)处理器的低成本、灵活性与ASIC (Application-Specific Integrated Circuits-专用集成电路)专用网络处理芯片的高性能、可扩展性很好地结合在一起,提供了适应网络发展(新协议、新应用)的能力。NP 的出现,标志着设备对数据分组的处理能力从低层粗放式处理过渡到高层细化处理。基于NP 开发的网络系统可以缩短进入市场时间(time-to-market ),而且由于其可编程性使其具有较长的市场寿命。本文将重点围绕网络处理器设计的复杂性、设计中所需要权衡的各种因素进行分析。

1. 网络处理器的功能

网络处理器的功能是由它所需要实施的操作以及它在目标网络系统中的任务决定的。一方面,NP 需要有足够的分组处理能力。另一方面,NP 确切的功能依赖于使用它的系统的体系结构。或者换句话说,目标系统中NP 与其他组成部分之间的分工方式决定了NP 的功能。

工业界对于协议栈中各层次协议功能及其特殊需求的实现已经相当有经验了。然而,NP 不是为某个特定的协议而设计的,它的指令集并不需要包含处理某个协议所需的所有指令。NP 的目标是具有足够的功能来处理“任何”协议,也就是具有网络协议处理的通用性。NP 的协议处理通用性不是通过设计的全面性来保障的。尽管设计人员可以针对需要处理的协议的每个特征,穷尽所需要的指令,但毫无疑问这种方式将产生笨拙的设计并带来芯片面积的浪费。反过来,抽取最小化的功能集能够使设计精简并高效。为此,设计者必须分析不同协议的特征,识别它们的共性,推导出可以高效处理所有特征的最小指令集。因此,确定“最小化”的功能集就成为NP 设计的一大挑战。

1.1 分组处理功能

设计一个通用的网络处理器的第一步是识别多数协议所需要的功能。一般来说,完成分组处理任务包括下面一些功能:检错和纠错、流量测量和策略、帧和协议的分解、地址查找和包转发、分段和重组、包分类、流量整形、定时和调度、排队、安全(认证和私有)。尽管这些功能都可以在一个传统的通用指令集CPU 上完成,但增加特定的指令可以提高完成这些功能的性能。例如就排队来说,NP 只需要关心包的队列,而不是其他任意的队列,因此NP 可以针对包队列进行优化,设计专用指令。类似的,由于大多数协议都需要CRC (Cyclic Redundancy Check ,循环冗余校验)或校验和进行差错检测,NP 可以包含相关的专用指令以提高运算速度。

NP 设计者需要考虑下列一些问题:1)上述功能是否足以涵盖所有协议处理?2)哪一项功能的优化最重要?3)如何将上述功能映射到一个典型网络系统的硬件单元?4)一个典型网络系统的哪些硬件单元可以用一个NP 来替代?5)实现上述功能的最小完备指令集是什么?所有这些问题都不容易回答,它们构成了研究网络处理器设计的基础问题。

1.2 入口和出口处理

为了降低设计的复杂性,可以将一个复杂问题分解成几个小的子问题一一加以解决。这种分而治之(divide-and-conquer )的方法在很多领域都受到欢迎,NP 设计也不例外。最常用的一种方式是将分组处理任务分成入口和出口处理两部分。入口处理关注包的到达过程,出口处理关注包的离开过程。

包到达

包离开

入口处理: 差错检测和安全验证 分类或协议分解 流量测量和策略 地址查找和包转发 包头修改和传输层处理 重组或流终止 转发、排队和调度 出口处理:

差错检测码插入

地址查找和包转发

分段或分片

流量整形

定时、调度、排队和缓冲

包头修改

输出安全处理

图1是典型网络系统中入口和出口处理的示意图。典型情况是包通过且仅通过交换矩阵一次,因此交换矩阵成为入口和出口处理自然的分水岭。入口方面,数据包到达一个输入端口后,首先需要进行差错检测,然后通过协议分解或分类来确定系统需要对包实施何种操作。系统有时候需要维护一些状态信息,例如历史流量的记录、数据片段的收集重组等。入口处理还需要包含对排队、调度、转发的支持。为了使包通过交换矩阵,有时需要将数据包分成固定大小的数据块传送。最后,入口处理还包括包头的修改、传输层的一些处理等。出口方面,从交换矩阵获得包,有时需要对数据片断进行收集。出口处理包括:确定输出端口、根据输出端口信息对数据包进行分段、进行流量整形及相关的排队调度操作、进行包头修改、差错检测、进行加密等输出安全处理。

2. 网络处理器与网络系统

2.1 并行和分布式结构

如果采用集中式设计,让一个网络处理器在快速数据通路上完成所有分组处理任务,将系统收到的每一个包转发到输出端口上,这样所得到的NP 与传统的处理器一样,可扩展性较差。即使这个NP 中包含针对协议处理的优化硬件设计,NP 本身的时钟频率将成为限制吞吐量的关键因素。为了避免性能瓶颈,可以采用三种通用的技术提高可扩展性。首先,一个典型的NP 可以包含各种硬件单元,对每个硬件单元进行专门设计来完成一个特定的功能;第二,为了提高总的处理速度,在NP 上复制多个可以独立工作的关键的硬件单元,使NP 可以并行或以流水线的方式实施多个操作;第三,将NP 设计成分布式结构。这样,当 图1 典型网络系统中入口和出口处理的示意图

多个NP 连接起来时,它们可以共同工作以获得更高的总的吞吐量。总的来说,对可扩展性的要求给NP 的设计带来了很大的困难,设计者必须考虑设计或选择处理专门任务的硬件单元、能够并行操作的可重复的硬件单元、以及支持分布式执行的硬件。

2.2 网络处理器在系统中的角色

在网络系统的总体结构中,NP 并不固定地处于单一的位置上,相反,它可以承担系统中多种角色任务,这使得NP 的设计进一步复杂化。NP 可以设计成替代网络系统中的功能单元,或者作为附加功能单元对某项功能进行强化。一般来说,NP 在网络系统的总体结构中可以作为下述角色:

⏹ 替代一个传统的CPU :为此,NP 必须具有传统的CPU 指令;为了与传统的CPU 区别开来,NP 需要增加专用的指令以实现优化的分组处理功能。

⏹ 附加在一个传统的CPU 上:由传统的CPU 完成大多数分组处理任务。由NP 完成特殊的任务。这种附加可以用预处理或协处理两种方式实现。预处理一般在入口处理阶段实施,例如对来自硬件端口的包进行分类,再交给传统的CPU 进行处理。协处理方式则功能更强大,任何可能通过专门硬件加速的分组处理功能都可以设计协处理器完成。使用附加在一个传统的CPU 上的NP ,主要好处是降低了设计的复杂性。设计者可以专注于分组处理功能而不需要考虑传统的指令;其难点在于需要额外的硬件处理CPU 与NP 的接口问题,为CPU 调用NP 提供有效机制。

⏹ 在网络接口卡的输入通路上,承担入口分组处理任务:NP 的可编程性提供灵活的、可改变的入口处理。

⏹ 在网络接口卡与交换矩阵之间作为网络接口卡和交换矩阵的中介:NP 与交换矩阵的控制器进行交互,以建立通路、传输数据和释放通路。

⏹ 在交换矩阵和输出接口之间控制输出端口的访问:某些交换矩阵采用分布式控制机制,由每个输出端口控制对它自己的访问。当一个输入端口需要使用交换矩阵时,它需要使用一种独立的机制(例如独立的总线)通知相应的输出端口;输出端口对需求进行调度,通知潜在的发送者发送数据。这些功能可以设计NP 来完成。

⏹ 在网络接口卡的输出通路上承担出口分组处理任务:NP 从交换矩阵接受包、管理队列、实现流量整形、发送分组到输出端口。

⏹ 像其它端口一样连接在交换矩阵上作为一个中间站:数据包可以从输入端口通过交换矩阵到达NP ,再从NP 通过交换矩阵到达输出端口。由于交换矩阵允许扩展,因此作为中间站的NP 集合也很容易扩展。这样,为了获得最大程度的并行,系统可以将到达的包分布在整个NP 集合中进行处理。我们可以设想一种宏观的数据流水线,流水线的每个阶段用一个NP 来实现,这些NP 通过交换矩阵连接起来:NP i 实现第i 个阶段的功能,把处理后的包通过交换矩阵传输到实现第i+1个阶段功能的处理器NP i+1。 由于NP 可在系统中胜任多种角色,如今它已不再局限于作为核心交换和路由设备中ASIC 的取代品而向更广泛的应用领域扩展。2003年,多服务接入网和企业网是网络处理器的主要应用领域。来自消费电子市场的需求将会延伸网络处理器的内涵,为其带来新的活力。面向接入层的各种媒体网关,包括用于家庭的接入媒体网关将会是网络处理器最重要的应用之一。其它存在商机的领域包括无线基础设备、IP 服务交换机、存储区域网等。网络处理器在安全方面也有着广泛应用,如VPN (Virtual Private Network—虚拟专网)、防火墙和入侵侦测业务等。在电信方面,多服务宽带接入领域,如第三代无线网络控制器(RNC- Radio

Network Controller)、媒体网关、光纤环网的宽带接入等都将是网络处理器的重要应用领域。

2.3 平台NP 和专用NP

我们可以从NP 在系统中的角色看到设计NP 的两种思路和目前市场上NP 的两种产品类型。一种是实现一个通用的网络处理器,试图解决所有分组处理任务,由此产生了平台NP 产品。另一种则针对分组处理功能中某一具体操作进行优化,由此产生了各种专用NP 产品。

平台NP 应该能够实现所有的分组处理功能而不是对某种具体处理功能优化。今天,所有的NP 厂商几乎都在围绕着性价比,以及应用功能的广泛性进行竞争。

未来将要求所有的平台NP 厂商都必须能够提供真正意义的“平台”。顾名思义,平台NP 应该能够容纳所有分组交换处理功能部件,安置第三方提供给网络设备制造商的一切软件和硬件,并成为它们运行的基础。为此,平台NP 应该为网络设备制造商和第三方的开发人员提供编写应用软件开发环境。此外,平台NP 还应该成为连接和控制有关硬件如外围用NP 、专用协处理器、存储器电路、PHY (Physical layer)层的芯片、交换矩阵等等的枢纽。

专用NP 则是针对分组处理功能中某一具体操作进行了优化的NP ,它的作用仅仅限制于该项操作。例如,用于加密或压缩的专用处理器。加密和压缩操作要用到相当特殊的算法。这些操作最好由经过优化的专门适合于处理此项操作的集成电路来执行。再如查表/分类操作。如果这类操作运用比较频繁,就有必要采用一个单独的专用NP 来处理,以便平台NP 能集中精力处理其它的分组处理操作。此外,还有一些专用NP 是优化后用在第二层协议上,处理语法分析/帧形成操作。例如,以太网MAC (Media Access Control)帧,HDLC (High Level Data Link Control Protocol)帧,或ATM (Asynchronous Transmission Mode)单元。

有时又把专用NP 称为外围NP 。所谓“外围”的意义在于它需要和负责处理总体分组交换处理任务的主要处理器相配合。可以担任主要处理器的器件有RISC 、CPU 、ASIC 或者平台NP 。外围NP 厂商所提供的开发工具只针对此外围NP 所担负功能有关的操作。为外围NP 编写的程序必须通过API (Application Program Interface)与担负总体分组处理的处理器进行通信。例如,设计用来加速查表/分类操作的外围NP 必须将其处理结果通知平台NP ,平台NP 再根据此结果执行一定的动作。

3. 网络处理器的硬件体系结构

网络处理器的硬件体系结构一般具有如下一些特征:

⏹ 采用多内核并行处理器结构:片内处理器按任务分为控制平面处理器和数据分组协处理器。控制平面处理器通常负责非实时的管理任务;数据分组处理器进行实时、线速数据分组处理。

⏹ 优化指令集,设计专用硬件加速处理单元:通常采用RISC 技术,结合多级流水线技术,大部分指令在一个时钟周期完成。并针对网络协议处理特点,设置专用硬件加速处理单元,提供专用指令如压缩指令、哈希查找、状态判断、数据读写指令。

⏹ 优化内存管理和分级存储器组织:NP 需要进行大量的数据分组的接收、存储、复制、转发,内存操作成为系统开销的一大瓶颈。为了解决这个问题,通常采用块数据移动技术和特殊的优化存储接口。同时对数据进行分类存储:SRAM 用于存放需要快速查找的各种表结构;SDRAM 用于存放数据分组信息。

⏹ 支持硬件多线程:为了提高NP 资源利用率,每个数据分组处理器还支持多个硬件线程。每个线程都有一套专门的硬件来存放上下文(Context ),以获得线程切换的零开销。 ⏹ 多个高速I/O接口:包括物理链路接口、交换接口、存储器接口、PCI 总线接口。 ⏹ 可扩展性:多个NP 之间可以互连,构成网络处理器簇,以支持更为大型高速的网络处理。

由于一个NP 上包括许多处理器共同工作,处理器层次是NP 最重要的硬件特征。NP 一般有如下处理器层次:1)一个或多个嵌入式RISC 处理器,通常工作在控制平面提供总的控制,处理高层协议,可编程; 2)多个I/O处理器(又称为包引擎、微引擎),工作在数据平面,实施入口和出口线速处理,可编程;3)一个或多个专用协处理器,优化设计完成特定的分组处理功能,通常被I/O处理器调用,不可编程;4)一个或多个交换矩阵接口,不可编程;5)一个或多个数据传输单元,处理I/O设备和存储器之间的数据移动,不可编程。

一个网络系统中完全的处理层次还应包括:6)传统的通用CPU ,工作在控制平面,处理管理任务,包括监视系统性能、运行路由协议、给系统管理员提供配置界面等,可编程;

7)成帧器和物理传输器件,实现低层次I/O处理,有时也在NP 中实现,不可编程。 4. 网络处理器的软件体系结构

许多NP 厂商为他们的NP 提供参考应用系统,帮助用户了解如何设计NP 的软件。用户通常不需要从头设计软件,只需在厂商提供的参考软件基础上进行修改。因此,NP 设计者可以影响NP 的软件体系结构。大多数软件体系结构遵循下面某种模式:

⏹ 主程序把协处理器当作子例程调用。

⏹ 主程序与可编程I/O处理器上运行的代码互相作用。

⏹ 使用通信线程。

⏹ 使用事件驱动程序。

⏹ 使用流水线。

⏹ 使用远程过程调用风格(程序组件分布在不同处理器上)。

⏹ 使用上述模式的组合。

很显然,有些软件体系结构是与底层的硬件相匹配的。例如,NP 芯片上如果存在用于异步事件的硬件分派单元,那么很自然地就有事件驱动的软件体系结构。相应的,NP 提供的对线程的支持和数据传输机制为通信线程体系结构奠定了基础。

流水线体系结构则并不一定要求底层硬件使用流水线。例如,通过不同线程实现分组处理的不同阶段,可以构建分组处理的流水线,数据包在不同线程中的相继处理体现了它在流水线不同阶段之间的移动。线程可以在一组并行处理器上执行,这些并行处理器本身不需要配置成一条流水线,甚至完全可以在单个处理器上通过创建多个线程来实现软件流水线。

远程过程调用风格的体系结构不是创建互相独立的程序,而是建立单个程序,使其不同组件运行在多个处理器上。例如,使程序的主要组件运行在一个嵌入式RISC 处理器上,处理复杂计算;而它的子组件则运行在多个I/O处理器上,处理入口和出口操作。

NP 的软件体系结构必须与NP 在处理器层次上很好地匹配。为了获得高性能,分配给每个处理器的任务需要和它的处理能力相匹配。数据平面任务的描述非常简明,协议简单、传输速率高,因此需要的代码较少,但是处理能力较强。而控制平面处理的协议较为复杂,所以任务的描述也较为复杂,不需要很强处理能力,但需要执行更多的代码。

处理层次越低往往操作速度越高。例如,物理传输层次决定了系统的线速度,即数据进入和离开整个系统的最大速率。为了尽可能避免瓶颈存在,数据传输、交换矩阵接口、协处理器硬件都需要设计成以线速操作,从而保证包全速流入I/O处理器。I/O处理器上运行的指令操作的层次低于嵌入式处理器,因此前者的时钟频率常常高于后者。为了使性能最佳化,任务应该尽可能在I/O处理器上完成。在嵌入式处理器与外部通用处理器之间的任务分配同样应该使任务尽可能在嵌入式处理器上完成。总的来说,为了获得最优的性能,分组处理任务应该尽可能被分配到能够完成该任务的最低层次处理器上。

5. 网络处理器设计与软件仿真

设计一个通用的网络处理器是相当复杂的。为了控制复杂性,NP 设计通常需要依赖于软件仿真。在硬件设计开始之前,设计者花大量时间来建立软件仿真器,用来验证设计的功能和评估性能。为此,需要有运行在目标芯片上针对各种应用的基准程序,把这些程序编译后使用软件仿真器来测量可获得的性能。

然而,与传统的处理器不同,NP 的评估不能使用传统的处理器基准程序。这是因为NP 的设计涉及许多低层次的硬件细节,不同NP 的内在体系结构是不同的,应用程序和基准程序无法在不同NP 之间简单地共享。因此,针对每一特定NP, 必须重新设计软件以匹配目标体系结构。而且,当软件从一种体系结构移植到另一种体系结构时,有时甚至需要完全重组代码,这给性能的比较带来困难。

这里,设计者还面临类似于“鸡生蛋”还是“蛋生鸡”的问题。一旦创建了一个硬件体系结构,程序设计人员可以设计软件来针对这个结构,编写优化的程序;反过来,一旦有了软件,硬件设计人员可以选择一个更好的体系结构来匹配软件设计。在设计NP 时,设计者面临多种可能的体系结构方案,软硬件设计必须紧密集成在一起,互相依赖。NP 上运行的软件必须和硬件一起进行设计,这进一步增加了设计的复杂性和工作量。

6. 网络处理器设计需要权衡的各种因素

由于网络处理器是个复杂的器件,可能用于多种目的,因此设计NP 需要权衡的因素相当多。作为本文的总结,这里分析其中一些重要因素,特别是我们在NP 设计中遇到的一些难点。

⏹ 可编程性和处理速度:可编程性所提供的灵活性和高度适应性在高速发展的网络领域尤其重要。另一方面,专用的硬件提供了更高的处理速度。若干年以前,可编程性和处理速度的权衡体现在选择传统的通用指令集CPU 还是选择专用芯片上,前者用在低速系统中,后者用在高速系统中。现在这种选择成为NP 设计者需要考虑的重要因素,它与NP 的体系结构和指令集设计息息相关。设计者需对应用目标有准确的把握,才能在体系结构的设计中对可编程性与处理速度做出恰当的考虑。

⏹ 速度和功能:为了高速处理网络领域特定的任务,需要对NP 的指令集进行优化。随着任务的扩展,需要增加更多的指令,这样NP 的功能就增强了。但是,不同的指令

可能需要不同的执行时间,处理器必须包含复杂的调度和同步机制,反过来增加了时间开销和设计复杂性。因此,速度和功能之间必须有很好的折衷。

⏹ 性能--数据速率、包速率和包的突发性的综合考虑:在NP 的系统设计阶段,性能的评估是必不可少的。通常有两种衡量性能的指标:最大的数据速率和最大的包速率。最大的数据速率是数据能够到达和离开一个网络系统的最大速率,它限制了系统能够匹配的网络端口的容量,一般使用的计量单位是Mbps 或Gbps 。如果系统能在所有网络端口满负荷的情况下无阻塞地完成分组处理和转发,我们称系统能够进行线速处理,并以端口容量描述线速处理的性能。另一方面,由于许多协议处理操作是以包为单位进行的,尽管每个数据包的大小是不一样的,但对每个包的处理需要的CPU 时间是固定的,因此,包速率通常比数据速率更重要。然而,精确的性能评估非常困难。首先,由于NP 应用的范围很广,不存在可特征化NP 操作的小任务集合,于是需要在大量的任务模式下测量NP 的性能,而基准程序在不同NP 之间不可重用(见本文第5部分)进一步给测量带来了困难。第二,NP 的测量需要在流通负载下进行,而包的突发性使得流量特征很难刻画。稳定的包流与现实网络的情况是不一致的,精确的评估需要采用突发分布。不幸的是尽管这方面的研究很多,人们从来没有对流量特征达成一致意见。网络流量模型一直是困扰网络领域的一大问题。于是用于性能测试的流量负载选择的困难性就可想而知了。

⏹ 协处理器设计:协处理器硬件有两种工作方式--旁路调用与数据通路。以旁路调用方式工作的协处理器类似于过程调用,由主处理器根据需要调用。而数据通路上的协处理器则以流水线方式处理数据,在数据通过它时对数据进行修改。后者有两个问题。首先,为了避免成为瓶颈,数据通路上的协处理器必须以线速度工作;第二,由于这些协处理器更紧密地集成在设计中,很难进行改变。以旁路调用方式工作的协处理器有着模块化的优势,可以根据需要扩展,增加新的协处理器,不需要对体系结构作太大改动。但是,旁路调用时主处理器与协处理器之间大量数据传输产生的开销将影响性能。

⏹ 流水线--均衡与同步:在一个均衡的流水线上,功能单元处理包的时间是相同的,从而减少了数据缓冲和同步开销。但是,对分组处理功能的分解很难做到完全均衡,强制的均衡结果是快速阶段必须等待慢速阶段。可是如果流水线设计成不均衡的,最慢的阶段会成为流水线的瓶颈。

⏹ 并行--吞吐量与包的乱序:并行体系结构通常都要有维护包的顺序的同步机制。但另一方面,如果放宽对包序的要求,可以简化复杂的同步操作,减少硬件需求,减少处理器的停滞和输出端口的等待,从而提高系统总的吞吐量。

⏹ 并行--速度与状态信息共享:并行工作的处理器为了避免干扰,必须同步访问共享的状态信息。由于在任何特定时刻只有一个特定处理器可以修改共享的信息,这必然导致并行速度降低。网络系统中状态的频繁更新,使得状态信息共享对速度的影响变得更严重。包的分类是一个典型的例子。静态的包分类(即包头的值只需要与常数进行比较)能够获得并行带来的N 倍速度;而动态的包分类(即由一组数据流来决定类别)由于要保留状态信息,性能必然要下降。

⏹ 存储器--速度与可编程性:存储器通常被划分成几个存储体,允许同时访问不同的存储体。在多数情况下,为了获得最大的访存速度,必须刻意地把数据放到存储体中以避免访存冲突。这自然会影响可编程性:程序员需要了解存储体,给编程带来困难。 ⏹ 编程语言设计的权衡:对NP 的编程语言来说,必须在易编程性、功能与代码速度之

间找到平衡点。如果以高速为目的,需要在易编程性与功能之间进行折衷。包含为特定任务裁减的高级构件的集合的编程语言虽然容易使用,但对任意任务的适应性差。而具有足够的特征面向多种任务的编程语言可用性差(因为程序员处理每个任务都面临多种选择)。因此,NP 设计者必须选择既容易编程又提供足够功能的编程语言。如果想获得强大的功能,就需要在易编程性与速度之间进行折衷。高级语言虽然容易使用,但映射到底层硬件结构时效率较低。因此,使用高级语言产生的代码往往不如使用低级语言产生的代码更有效。这也是为什么许多NP 要求程序员使用汇编语言来获得最大的吞吐量。如果强调易编程性,则需要在速度与功能之间进行折衷。如果将一种语言限制在某个特定应用上,编译器能够产生高度优化的代码。随着一种语言功能的扩展,其所产生的代码优化也越来越困难。因此,语言设计者需要在功能与代码的优化之间作出权衡。

⏹ 多线程--吞吐量与可编程性:为了获得较高的吞吐量NP 必须支持多线程。通过允许程序员指定多个计算,使得即使在一个线程阻塞、等待协处理器或I/O处理的情形下,处理器仍然可以继续执行其它线程。多线程的主要缺点是程序员必须协助线程的活动,从而增加了编程的复杂性。即使在硬件能够自动处理线程的抢占和切换时,程序员也许还是需要确保线程与共享资源使用之间的协调。因此,在高吞吐量和可编程性之间需要作出权衡。

⏹ 流量管理与设计成本:对网络服务收费的ISP 和其他组织需要网络系统能够管理流量,通过按优先级给流量提供服务以获得最高的利益。从体系结构的角度来看,这意味着流量管理、速度与成本的折衷。嵌入式RISC 处理器能够在较低的速度实施流量管理。如果需要高速的流量管理,就必须由专门的硬件来完成,这将会增加总的设计成本。 ⏹ 体系结构的通用性与专用性:本文第2部分介绍了NP 在网络系统中可能承担的各种角色,介绍了平台NP 和专用NP 。也就是说,设计者需要决定是设计可以在任何系统中使用的单个通用的NP ,还是设计一组专用的NP ,每个NP 完成某种特定的功能。此外,NP 所支持的协议类型也影响着NP 的硬件复杂性。例如, MPLS (Multiprotocol Label Switching--多协议标签交换)与传统的IP 或Ethernet 相比,需要更多的硬件支持。设计者需要确定是需要设计特定协议的处理器,还是只设计一个通用的体系结构。 ⏹ 存储器类型--专用与通用:NP 通常使用通用的存储器--SRAM 和DRAM 的组合。它们在访存时间、接口硬件和成本上各有优缺点。另一方面,专用的存储器技术提供了更好的性能特征。其中最特殊的一种存储器是CAM (Content Addressable Memory--内容可寻址存储器)。一个简单的CAM 查找可以替代多个SRAM/DRAM访存。单个CAM 存储器可以替代多个SRAM/DRAM存储器。CAM 还能够免去设计查找协处理器的需要。但是,CAM 非常昂贵,并且带来了更高的功耗。

⏹ 并行与流水:许多设计人员认为设计NP 只存在两种基本的方法:并行方法或者流水线方法。实际上,很少有人排他的使用上述之一来设计NP 。几乎所有NP 的结构都是二者的混合体。当不同阶段的处理任务量不均衡时,可以采用并行技术来加速某个任务量较大的阶段。NP 设计者需要在并行和流水之间进行权衡。由于设计者并不能准确了解芯片的使用方式,只能大致的估计不同阶段的任务量,因此这种权衡是非常困难的。

总的来说,NP 设计者需要在更丰富的功能、更高的性能和更低的成本之间进行权衡。针对应用多样化和OEM 对成本越来越敏感的态势,网络处理器技术将向以下几个方向发展:

1) 集成度更高,将硬件部件与功能强大的其它微引擎集成以处理更高线速的数据;2)软件

能重复使用,使OEM 能快速地提供多种服务;3)具备一整套工具、开发环境和模拟环境以加速用户开发周期和提高质量。

作者介绍:

李华伟: 博士,中国科学院计算技术研究所信息网络研究室副研究员,硕士生导师。2001年在中国科学院计算技术研究所获博士学位。担任IEEE 第4届WRTLT 程序主席,IEEE 第12届亚洲测试会议程序委员。担任中国计算机学会容错专业委员会委员,第3届全国测试会议程序主席。主要研究领域包括集成电路设计、验证与测试、网络处理器设计等。在国内外刊物和学术会议上发表论文30余篇,获得1项发明专利正式授权,此外正在申请并已受理的发明专利有3项。


相关文章

  • 东北大学信息学院导师
  • 单位名称电力系统与电力传动研 究所电力系统与电力传动研 究所电力系统与电力传动研 究所电气自动化研究所电气自动化研究所电气自动化研究所电气自动化研究所电气自动化研究所电气自动化研究所电气自动化研究所电子科学与技术研究所电子科学与技术研究所 ...查看


  • 复杂网络环境下的品牌危机处理策略
  • 第25卷第5期2008年9月 Journal of 深圳大学学报(人文社会科学版) ShenzhenUniversity(Humanities&SocialScienees) V01.25No.5Sept.2008 复杂网络环境下的 ...查看


  • [安全系统整体解决方案设计]
  • 成都信息工程学院 网络工程系 <安全系统整体解决方案设计> 课程设计报告 姓名: 学号: 班级: 熊怀刚 2004033031 信安(1)班 第一章 企业网络的现状描述 ............................. ...查看


  • 人工智能在机械方面的的实际应用
  • 人工智能在机械方面的的实际应用 人工智能(Artificial Intelligence,简称AI)是一门研究如何构造智能机器或智能系统,使它能模拟.延伸.扩展人类智能的学科.智能技术是当前新技术.新产品.新产业的重要发展方向.开发策略和显 ...查看


  • 基于嵌入式的视频监控系统设计
  • 嵌入式系统设计课程作业 题目:基于嵌入式的视频监控系统设计 姓名: 班级: 学号: 成绩: 2015年06月17日 基于嵌入式的视频监控系统设计 摘要: 该文介绍了一种基于WiFi 无线网络的嵌入式视频监控系统的设计.该设计的服务器端以AR ...查看


  • 计算思维案例及平时成绩讨论题
  • 1.5本章计算思维的典型案例 案例1: 计算作为人类文明的开端,从最远古的手指计数到中国古代的算盘计算到近代西方的纳皮尔算筹及帕斯卡机械式计算机,至当前的电子计算机的高速度计算,不管是计算方法还是计算工具都有了变革性的创新,计算也作为一种思 ...查看


  • 系统总体设计原则(信息化项目)
  • 目录 1.1 系统总体设计原则 .............................................................................................. 2 1.2 业务应 ...查看


  • 硬件环境对数字校园的应用支撑
  • IBM 硬件环境对数字校园的应用支撑 业务现状和面临的问题 数字校园(Digital Campus)的建设始自1990年,在欧美已成为成熟的信息化产业,能够实现支持学校业务管理,支撑校内数字化教学.科研.生活.服务的目标.2000年前后,随 ...查看


  • 万维网服务描述和业务流程
  • 万维网服务描述和业务流程 定义语言 关键词:万维网服务 描述语言 流程执行语言 编排描述语言 在单机时代,编程的最终目实现这项基于网络的计算任标是指挥一台计算机独立完成特务,可以看作是开发一个分布式定工作,处理保存在本机上的数系统,为建立这 ...查看


热门内容