CN1286277C - 网络处理器中核心处理器与微引擎之间的通信方法 - Google Patents
网络处理器中核心处理器与微引擎之间的通信方法 Download PDFInfo
- Publication number
- CN1286277C CN1286277C CN 200310107057 CN200310107057A CN1286277C CN 1286277 C CN1286277 C CN 1286277C CN 200310107057 CN200310107057 CN 200310107057 CN 200310107057 A CN200310107057 A CN 200310107057A CN 1286277 C CN1286277 C CN 1286277C
- Authority
- CN
- China
- Prior art keywords
- micro engine
- message
- core processor
- formation
- bag
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Mobile Radio Communication Systems (AREA)
Abstract
一种网络处理器中核心处理器与微引擎间的通信方法,通过在微引擎与核心处理器之间设置环形队列及共享内存,并且将微引擎与核心处理器之间传递的报文直接放到发送、接收环形队列中,包括微引擎将报文发送给核心处理器,并进行处理的流程和核心处理器将报文发送给微引擎,并进行处理的流程,与现有的技术相比,本发明中微引擎与ARM通信时使用环形队列,可以使ARM通信任务操作队列避免采用锁定机制,从而避免了由于ARM的高优先级阻塞或抢占线程资源而导致微引擎处理性能下降的问题。同时,可以极大地提高网络处理器的处理性能,使其应用在无线移动通信系统中时能实现限速地完成数据的处理和转发,对于提高系统的吞吐量和处理速度有很大的作用。
Description
技术领域
本发明涉及无线通信领域,尤其是涉及该领域网络处理器中的核心处理器与微引擎之间的通信方法。
背景技术
目前,随着无线通信技术的快速发展,无线通信系统中需要处理的数据流量越来越大,对数据处理速度的要求也越来越高,采用通用处理器实现的单板,已经无法完成数据报文的快速处理和转发。因此,无线通讯领域中,选择专用的网络处理器替代通用处理器。
因特尔公司的IXP1200网络处理器是第一个将多个微引擎与嵌入式微处理器结合起来的网络处理器,这种高集成处理器不仅提供了灵活的可编程性以满足技术快速变化的需求,同时,也具备了极高的数据通信性能。IXP1200网路处理器采用多中央处理器机制,包括一个用于控制面处理的核心处理器(ARM)和若干个用于数据面处理的微引擎或微引擎引擎(UE)。通过编程在核心处理器上实现各种网络协议的处理,使若干个微引擎对数据面报文进行实时并行处理,从而能够将数据面的报文以其到达的速度(线速)送到下一个功能实体。但由于ARM与微引擎处理机制及编程语言不同,因此核心处理器和微引擎之间不能直接通信,需要通过共享内存和消息队列实现二者之间的通信。
目前通常采用的实现ARM与微引擎间通信的方法如图1所示,其中,微引擎与ARM之间通过链表队列和共享内存实现通信,具体包括:首先将微引擎发送给ARM的报文放到链表队列UA_Tque(微引擎发送队列)中;然后调用一个线程从UA_Tque(通信发送线程)取得相应报文后,放到微引擎与ARM共享的链表队列UA_TXQ(通信发送队列)中;ARM通信任务轮询UA队列,如果发现队列有报文,则锁定队列取出报文,根据报文类型送不同的应用进程处理;应用进程有报文发送时,调用向微引擎发送报文的函数,将报文发送到链表队列UA_RXQ(通信接收队列)中,同时通知微引擎通信接收线程;微引擎通信接收线程收到消息后从UA_RXQ队列取出报文,根据报文类型送到目标队列。
这种方法的缺点是由于采用链表队列导致微引擎与ARM操作队列时需采用互锁机制,而ARM抢占队列的优先级高于微引擎,最终导致微引擎处理性能大大降低。
发明内容
本发明的目的是提供一种网络处理器中核心处理器与微引擎间的通信方法,以克服当前的网络处理器中ARM与微引擎通信时由于ARM高优先级抢占或阻塞微引擎线程资源而导致网络处理器性能下降的缺点,从而提高网络处理器的性能,同时本通信方法也适用于因特尔公司其它型号的网络处理器。
本发明提供的一种网络处理器中核心处理器与微引擎间的通信方法,在微引擎与核心处理器之间,设置环形队列及共享内存,并且将微引擎与ARM之间传递的报文直接放到发送、接收环形队列中,该方法包括以下步骤:
微引擎将报文发送给核心处理器,并进行处理:
当微引擎确定有报文送给核心处理器进行处理时,锁定微引擎发送队列;
检查所述微引擎发送队列是否已满;
如果是,则丢弃该当前报文;
否则,将该当前报文加入到微引擎发送队列,然后解锁微引擎发送队列;
核心处理器的通信任务循环检查所述微引擎发送队列,将队列中被检查到的报文包的包类型发送给核心处理器中不同的进程进行处理;
核心处理器将报文发送给微引擎,并进行处理:
当核心处理器中有报文包向微引擎发送时,调用向微引擎发送报文包的函数;
在向微引擎发包的函数中,检查通信接收队列的状态;
如果为满状态,则丢弃所述报文包,并且释放包描述符
否则,将当前要发送的报文加入到通信接收队列;
微引擎通信接收线程收到核心处理器发来的内部通知信号,从通信接
收队列取出报文后根据报文包的类型送到目标队列。
本发明与现有的技术相比,本发明中微引擎与ARM通信时使用环形队列,可以避免现有技术中ARM通信任务操作队列所采用锁定机制,从而避免了由于ARM的高优先级阻塞或抢占线程资源而导致微引擎处理性能下降的问题。同时,可以极大地提高网络处理器的处理性能,使其应用在无线移动通信系统中时能实现限速地完成数据的处理和转发,对于提高系统的吞吐量和处理速度有很大的作用。
下面将结合实施例及参照附图对该发明的技术方案进行详细说明。
附图说明
图1为当前技术中所采用的技术方案的结构示意图。
图2为本发明的逻辑单元结构示意图;
图3为本发明的微引擎向核心处理器发送报文的操作流程图;
图4为本发明的对微引擎向核心处理器发送的报文并进行处理的操作流程图;
图5为本发明的核心处理器向微引擎发送报文的操作流程图;
图6为本发明的对核心处理器向微引擎发送的报文进行处理的操作流程图。
具体实施方式
如图2所示,是本发明为实现上述目的而采取的逻辑单元结构,微引擎与核心处理器之间通过环形队列及共享内存完成通信,在二者之间传递的报文被直接加入到环形队列UA_TxQ、UA_RxQ中,无需互锁机制,其中:
通信任务,用于负责核心处理器ARM接收UA_TxQ队列中的数据报文,拷贝数据并封装进程消息,发送到指定的处理进程;另外,它可以定时检测通信接收队列204,如果队列有报文,通知微引擎通信接收线程202接收核心处理器ARM发送给微引擎UE的报文;
微引擎通信接收线程(UA_RxThrd)202,用于从通信接收队列204队列摘取报文,并根据包描述符中的包类型分发到指定的微引擎模块的处理队列206。
通信发送队列(UA_TxQ)203为微引擎与ARM共享的通信队列,采用环队列结构,当微引擎线程207将报文发送到该队列的尾部,通信任务201从该队列头摘取报文,在此操作过程中,由于通信任务201不使用任何互斥变量,因此,可以防止ARM与微引擎线程竞争互斥量,并且避免了微引擎线程的阻塞。
通信接收队列(UA_RxQ)204也是微引擎与ARM共享的通信队列,采用环形队列结构,应用进程205利用通信任务提供的接口函数将需要发送给微引擎模块的数据报文发送到该队列尾部,微引擎通信接收线程202从该队列头摘取该报文,并且将包描述符中的包类型参数分发到指定的微引擎模块的处理队列206。
如图3所示,为微引擎向核心处理器发送报文的操作流程,该流程包括以下步骤:
首先,微引擎根据通信发送队列索引值确定该报文是否需要送给ARM处理;步骤301;如果队列索引值等于UA_TXQ的队列号,则该报文送给核心处理器进行处理,锁定当前的通信发送队列,步骤302;否则入队到微引擎其他处理队列;步骤302中锁定UA_TXQ队列的目的是为了防止其他微引擎线程操作这个队列;检查UA_TXQ队列是否已满,步骤303;如果UA_TXQ队列已经满了,则该报文无法入队到UA_TXQ队列,需解锁UA_TXQ队列,以便其他微引擎线程有机会操作这个队列,步骤304;并且将当前要加入队列的报文丢弃,步骤305;如果UA_TXQ队列没有满,则将该报文放到队列中,步骤305;同时解锁UA_TXQ队列,以便其他微引擎线程有机会操作这个队列,步骤306,由此,即完成了微引擎向核心处理器发送报文的操作。
如图4所示,为对微引擎向核心处理器发送的报文并进行处理的操作,该流程包括以下步骤:
ARM中的通信任务循环检查UA_TXQ队列,步骤401,检查通信发送队列中是否有包,步骤402;如果队列没有包,则继续检查,返回步骤401;如果UA_TXQ队列有包,则根据队列描述符读出包描述符,步骤403;及根据包描述符中的包类型确定送给不同的进程处理,步骤404
针对上述流程举例如下:在用网络处理器实现无线移动通信系统CDMA2000中的分组控制功能PCF的过程中,利用微引擎0的4个线程分别从4个外部FE端口接收BSC或PDSN发来的报文,这4个线程运行完全相同的代引擎,每个线程对应一个端口。假设线程0从端口0接收报文,分析该报文,如果是数据报文,则送给处理数据报文的微引擎进行处理,如果是PDSN来的A11信令报文或BSC来的A9报文,需要送给ARM中信令处理进程处理,于是线程0锁定UA_TXQ队列,获得UA_TXQ队列的头指针和尾指针,如果队列头指针与尾指针不同,说明队列没有满,将该信令报文放到队列中,更新队列描述符同时解锁队列,如果队列头指针与尾指针相同,说明队列已经满,则丢弃该信令报文,同时解锁队列。由于ARM中通信任务时时轮训UA_TXQ,当发现队列有包时,则将这个信令报文取出,根据包描述中的信息确定处理该信令报文的进程号,然后以消息方式发送给队应进程进行处理。
如图5所示,为核心处理器向微引擎发送报文的操作,该流程包括以下步骤:
首先,判断ARM中的应用进程是否有报文需要发送,步骤501;如果ARM中应用进程有报文要向微引擎发送,则调用向微引擎发送报文的函数,步骤502。
如图6所示,为对核心处理器向微引擎发送的报文进行处理的操作,该流程包括以下步骤:
微引擎通信接收线程等待ARM发送的内部通知信号,步骤601,微引擎通信接收进程是否获得内部通知信号,步骤602;如果没有等到信号,则继续等待,如果等到信号,则检查UA_RXQ队列中是否有报文包,步骤603;如有,则从该队列中取出关于此报文包的包描述符,并且根据该包描述符中的报文包类型参数确定目的微引擎队列步骤604;向微引擎发包的函数中检查目的UA_RXQ队列是否为满状态,步骤605;如果UA_RXQ队列已满,则丢弃该报文包,并且释放有关该报文包的包描述符,步骤606;如果UA_RXQ队列没有满,则把报文包加入到目的队列(即UA_RXQ队列)中,步骤607;,同时检查UA_RXQ队列中报文数;如果UA_RXQ队列中报文数大于一个规定的值,则直接发内部通知信号通知微引擎UA_RXQ队列有包,释放信号量,允许其他应用进程调用该函数向UA_RXQ队列放包,否则等待信号量超时。
上述流程,其中步骤601还包括当ARM中的通信任务循环检查UA_RXQ队列时,如果队列有报文包,则直接发内部通知信号通知微引擎UA_RXQ队列有报文包;同时,通过向微引擎发报文包的函数,ARM的应用进程获得互斥信号量,防止与其他应用进程同时操作UA_RXQ队列。
其中步骤603还包括如果UA_RXQ队列中的报文包已被摘取完,则跳出循环等待新的内部通知信号。
下面通过一实例具体说明上述图5和图6所示的两个操作流程,假设信令处理进程需要向PDSN发送建立A10链路请求或给BSC回送A8建链应答消息,信令处理进程把要发送的消息发送给协议栈进程完成UDP、IP、以太网头的封装,然后协议栈进程调用向微引擎发报文包的函数。该函数中获得一个互斥信号量,防止其他应用进程操作队列,同时检查队列UA_RXQ是否满,如果队列满,丢弃这个信令报文,否则把报文包入到UA_RXQ队列,同时检查UA_RXQ队列中报文数。如果UA_RXQ队列中报文数大于一个规定的值,比如说是50个,则直接发信号通知微引擎UA_RXQ队列有报文包,释放信号量,允许其他应用进程调用该函数向UA_RXQ队列放报文包,不需要等待定时器到时。ARM中通信任务也轮询UA_RXQ,一旦发现队列有报文包,就发内部通知信号通知微引擎通信接收线程。
微引擎通信接收线程收到内部通知信号后,检查UA_RXQ队列,如果队列空则进行等待内部通知信号,否则从队列中取出包描述符,根据包描述符中的端口号和qos确定入到那个发送优先级队列,比如入队到优先级队列0,外部发送线程检查到优先级队列有报文时,就把这个信令报文发送给PDSN或BSC。
综上所述,采用环形队列,从而能够防止由于核心处理器与微引擎通信线程的竞争互斥而导致的微引擎线程阻塞问题,提高了网络处理器的处理性能,使其应用在无线移动通讯领域时能够完成数据报文的限速转发。
以上内容仅为本发明的实施例,其目的并非用于对本发明所提出的系统及方法的限制,本发明的保护范围以权利要求为准。在不脱离本发明的精神和范围的情况下,本领域技术人员在不偏离本发明的范围和精神的情况下,对其进行的关于形式和细节的种种显而易见的修改或变化均应落在本发明的保护范围之内。
Claims (4)
1.一种网络处理器中核心处理器与微引擎间的通信方法,通过在微引擎与核心处理器之间设置环形队列及共享内存,并且将微引擎与核心处理器之间传递的报文直接放到发送、接收环形队列中,该方法包括以下步骤:
微引擎将报文发送给核心处理器,并进行处理:
当微引擎确定有报文送给核心处理器进行处理时,锁定微引擎发送队列;
检查所述微引擎发送队列是否已满;
如果是,则丢弃该当前报文;
否则,将该当前报文加入到微引擎发送队列,然后解锁微引擎发送队列;
核心处理器的通信任务循环检查所述微引擎发送队列,将队列中被检查到的报文包的包类型发送给核心处理器中不同的进程进行处理;
核心处理器将报文发送给微引擎,并进行处理:
当核心处理器中有报文包向微引擎发送时,调用向微引擎发送报文包的函数;
在向微引擎发包的函数中,检查通信接收队列的状态;
如果为满状态,则丢弃所述报文包,并且释放包描述符;
否则,将当前要发送的报文加入到通信接收队列;
微引擎通信接收线程收到核心处理器发来的内部通知信号,从通信接收队列取出报文后根据报文包的类型送到目的队列;
所述通信接收队列中的报文包如果被摘取完,则跳出当前程序循环,等待新的内部通知信号。
2.如权利要求1所述的网络处理器中核心处理器与微引擎间的通信方法,其特征在于,所述核心处理器的通信任务循环检查所述微引擎发送队列,将队列中被检查到的报文包的包类型发送给核心处理器中不同的进程进行处理的步骤,还包括:
核心处理器中的通信任务循环检查通信接收队列;
如果队列有报文包,则直接发内部通知信号通知微引擎通信接收队列有报文包;
核心处理器的应用进程从向微引擎发送报文包的函数中获得互斥信号量。
3.如权利要求1所述的网络处理器中核心处理器与微引擎间的通信方法,其特征在于,所述检查通信接收队列的状态的步骤中,如果所述通信接收队列中的报文数大于规定值,直接发内部通知信号通知微引擎通信接收队列有包,释放信号量,允许其他应用进程调用该函数向该队列放报文包,否则等待信号量超时。
4.如权利要求3所述的网络处理器中核心处理器与微引擎间的通信方法,其特征在于,所述规定值是由操作者根据情况而具体设定的数值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200310107057 CN1286277C (zh) | 2003-11-20 | 2003-11-20 | 网络处理器中核心处理器与微引擎之间的通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200310107057 CN1286277C (zh) | 2003-11-20 | 2003-11-20 | 网络处理器中核心处理器与微引擎之间的通信方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1545216A CN1545216A (zh) | 2004-11-10 |
CN1286277C true CN1286277C (zh) | 2006-11-22 |
Family
ID=34334320
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200310107057 Expired - Fee Related CN1286277C (zh) | 2003-11-20 | 2003-11-20 | 网络处理器中核心处理器与微引擎之间的通信方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1286277C (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100414930C (zh) * | 2005-03-31 | 2008-08-27 | 华为技术有限公司 | 内核间报文描述消息的传递方法 |
CN101140549B (zh) * | 2006-09-07 | 2010-05-12 | 中兴通讯股份有限公司 | 核心处理器与微引擎的上报、下发及内存控制通信方法 |
ES2334190B1 (es) * | 2007-08-09 | 2011-01-17 | Diseño De Sistemas En Silicio S.A. | Procedimiento para aumentar las prestaciones de un sistema de comunicaciones sobre un medio formado por multiples conductores. |
CN107005418B (zh) * | 2015-11-26 | 2020-07-07 | 华为技术有限公司 | 一种红包数据处理方法及终端 |
CN106161110B (zh) * | 2016-08-31 | 2019-05-17 | 东软集团股份有限公司 | 一种网络设备中的数据处理方法及系统 |
CN109257280B (zh) * | 2017-07-14 | 2022-05-27 | 深圳市中兴微电子技术有限公司 | 一种微引擎及其处理报文的方法 |
CN107949017A (zh) * | 2018-01-28 | 2018-04-20 | 厦门四信通信科技有限公司 | 一种提高LoRa基站数据包转发率的方法 |
CN109729024B (zh) * | 2018-12-29 | 2023-05-12 | 中盈优创资讯科技有限公司 | 数据包处理系统及方法 |
CN113364705B (zh) * | 2020-03-06 | 2022-06-17 | 烽火通信科技股份有限公司 | 一种协议报文的处理方法及系统 |
-
2003
- 2003-11-20 CN CN 200310107057 patent/CN1286277C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1545216A (zh) | 2004-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230239368A1 (en) | Accelerated network packet processing | |
CN1219384C (zh) | 多播传输的方法及设备 | |
RU2491737C2 (ru) | Управление памятью для высокоскоростного управления доступом к среде | |
US8817784B2 (en) | Method and apparatus for multicast packet reception | |
CN1182737C (zh) | 用于把两个数据流复用在无线通信信道上的方法和相应的发射机 | |
EP2353017B1 (en) | Packet aggregation and fragmentation at layer-2 over a managed network | |
CN1146192C (zh) | 以太网交换芯片输出队列管理调度方法和装置 | |
US6226680B1 (en) | Intelligent network interface system method for protocol processing | |
CN1286277C (zh) | 网络处理器中核心处理器与微引擎之间的通信方法 | |
US7984180B2 (en) | Hashing algorithm for network receive filtering | |
US6760304B2 (en) | Apparatus and method for receive transport protocol termination | |
CN1801775A (zh) | 流分配 | |
JP2002538733A (ja) | 高性能ネットワークインターフェース | |
CN1276629C (zh) | 基于Netfilter架构的流媒体集群服务内容调度方法 | |
CN1317640C (zh) | 实时操作系统环境下多任务应用软件模块的管理方法 | |
CN1909487A (zh) | 对路由器进行整机测试的方法和系统 | |
CN1777148A (zh) | 一种路由表下一跳ip地址到mac地址解析方法 | |
CN1450767A (zh) | 一种数据包转发控制装置和方法 | |
CN1129281C (zh) | 利用缓存技术提高ip报文转发速度的方法 | |
Dumazet | Busy polling: Past, present, future | |
CN1941733A (zh) | 一种集群通信中的报文群发方法 | |
CN1955990A (zh) | 综合电信平台中的流程执行方法及系统 | |
CN1300992C (zh) | 实现多播转发的方法 | |
CN1722641A (zh) | 防止无线链路控制层的发送缓存器溢出的方法 | |
EP1548591A2 (en) | Accelerator for object-oriented communications and method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20061122 Termination date: 20171120 |