CN109684269B - 一种pcie交换芯片内核及工作方法 - Google Patents
一种pcie交换芯片内核及工作方法 Download PDFInfo
- Publication number
- CN109684269B CN109684269B CN201811600121.4A CN201811600121A CN109684269B CN 109684269 B CN109684269 B CN 109684269B CN 201811600121 A CN201811600121 A CN 201811600121A CN 109684269 B CN109684269 B CN 109684269B
- Authority
- CN
- China
- Prior art keywords
- packet
- queue
- data packet
- oldest
- candidate
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/17—Interprocessor communication using an input/output type connection, e.g. channel, I/O port
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
一种PCIE交换芯片内核,包括,前级处理模块和后级处理模块,所述前级处理模块,从每个端口控制器输入侧读取数据包,得到每个数据包的输出端口;用时戳记录每个数据包进入所述前级处理模块的时间并保存;根据数据包的类型和输出端口对数据包进行区分,构建虚拟输出队列,进行队列管理和调度;将调度成功的数据包及包描述符信息发送到后级处理模块;所述后级处理模块,将来自每个输入端口的数据包分类保存在不同源队列中;根据对应的队列信息和队列拥塞反压信息,对不同源队列进行管理和输出调度;将调度成功的数据包发送到端口控制器输出侧接口。本发明还提供一种PCIE交换芯片内核的工作方法,确保PCIE交换机无阻塞低延迟转发数据包。
Description
技术领域
本发明涉及计算机外围设备高速互连总线(PCIE)技术领域,尤其涉及一种PCIE交换芯片内核及工作方法。
背景技术
PCIE总线基于传统PCI系统,保留了传统PCI总线的一些优秀特性,在软件配置上与PCI总线相兼容。PCIE总线将PCI的并行总线结构改为串行来突破速率瓶颈,同时利用点到点的连接、CRC校验等方式保证数据总线的高实时性和高可靠性,是一个为现在和未来多种多样的计算和通信平台而定义的高性能、通用I/O互连总线。PCIE总线目前广泛应用于工作站、服务器等计算系统领域,也应用于嵌入式计算和通信平台等领域。随着PCIE总线应用越来越广泛,PCIE设备之间的数据通讯应用越来越广泛,现在主流计算机主板上的设备与CPU之间的通讯几乎都应用PCIE总线。由于PCIE设备之间需要进行高速实时通讯,PCIE交换芯片就应运而生。
PCIE交换芯片实现了各PCIE设备之间的快速高带宽通讯。目前常用的PCIE 3.0单通道链路速率已经达到8.0GT/s,未来的PCIE 4.0单通道链路速率将达到16.0GT/s。当前常用的PCIE交换芯片支持几十个PCIE通道、几个或十几个PCIE端口,未来的PCIE芯片支持的通道数和端口数会越来越多,端口之间的数据交换速率要求越来越高。这就要求PCIE交换芯片能实现各个多通道高速PCIE端口之间快速通讯。IPv4/IPv6网络中,交换设备或路由设备对数据包发送的顺序没有任何要求,它们能以任何次序通过这些网络设备。然而PCIE协议将PCIE事务层数据包分成转发(对应英文为Posted,简称为P)、非转发(对应英文为Non-Posted,简称为NP)和完成(对应英文为Completion,简称为CPL)三种类型,它们的转发次序必须遵循生产者和消费者模型,必须满足PCIE协议规定的排序规则,不能乱序。广泛应用于IPv4/IPv6互联网领域的网络设备数据包转发机制如虚拟输出队列、iSLIP调度算法等不能不加修改地应用于PCIE交换机。
虽然市场上有不少PCIE交换芯片,但目前文献上能找到的PCIE交换内核实现机制非常少。
发明内容
为了解决现有技术存在的不足,本发明提供一种PCIE交换芯片内核及工作方法,针对各种PCIE高速链路数据,可以实现无阻塞低延迟转发。
为了实现上述目的,本发明提供的PCIE交换芯片内核,包括,前级处理模块和后级处理模块,其中,
所述前级处理模块,从每个端口控制器输入侧读取数据包,得到每个数据包的输出端口;用时戳记录每个数据包进入所述前级处理模块的时间并保存;根据数据包的类型和输出端口对数据包进行区分,构建虚拟输出队列,进行队列管理和调度;将调度成功的数据包及包描述符信息发送到后级处理模块;
所述后级处理模块,将来自每个不同输入端口的数据包分类保存在不同源队列中;根据对应的队列信息和队列拥塞反压信息,对不同源队列进行管理和输出调度;将调度成功的数据包发送到端口控制器输出侧接口。
进一步地,所述前级处理模块,进一步包括,端口接收处理模块、输入端口缓存管理模块,以及前级调度模块,其中,
所述端口接收处理模块,内置有路由表,从每个端口控制器输入侧读取数据包,根据包头信息查询路由表,得到每个包的输出端口,同时用时戳记录每个数据包进入端口接收处理模块的时间;将接收的数据包、数据包类型、数据包的请求者身份标识编号、数据包的宽松排序属性位、数据包的基于请求者ID排序属性位和完成包的Tag标记、数据包的输出端口编号和数据包时戳发送到输入端口缓存管理模块;
输入端口缓存管理模块,其将每个数据包的时戳、数据包类型、数据包的请求者身份标识ID编号、数据包的宽松排序属性位、数据包的基于请求者ID排序属性位和完成包的Tag标记保存在其对应的数据包描述符中;接收所述前级调度模块发送的调度成功队列的编号,并将调度成功的数据包及其数据包描述符信息发送到所述后级处理模块;
所述前级调度模块,其对数据包进行输入调度,并将调度成功队列的编号发送给所述输入端口缓存管理模块;只有含有完整数据包的队列参与调度。
进一步地,所述输入端口缓存管理模块,根据输出端口和数据包的NP、P和CPL类型对数据包进行区分,并将每个队列的队列信息发送给所述前级调度模块。
进一步地,所述前级调度模块,
接收输入端口缓存管理模块提供的每个队列信息,在某个调度周期,如果没有任何一个队列接收到后级处理模块反馈的拥塞信息,则从NP类型包虚拟输出队列中选择一个时戳最老的NP包、从P类型包虚拟输出队列中选择一个时戳最老的P包、从CPL类型包虚拟输出队列中选择一个时戳最老的CPL包,这些被选中的NP包、P包和CPL包进行时戳比较,选择一个时戳最老到达的数据包发送到后级处理模块;如果有一个或多个队列接收到后级处理模块反馈的拥塞信息,则禁止接收到拥塞信息的队列发包到后级处理模块,接收到拥塞信息的队列被阻塞,并进行如下处理:
(a)如果被阻塞的某类型数据包的一个或多个队列的队首数据包是时戳最老的该类型数据包,按照PCIE协议要求,如果该类型数据包后到的可以超越先到达的包发送,则从所有未被阻塞的该类型包队列中选择一个符合PCIE排序规则要求的能先于被阻塞队列发送的时戳最老数据包,作为候选包;保存该类型包所有队列中时戳最老的数据包的时戳;
(b)如果被阻塞的某类型数据包的一个或多个队列的队首数据包不是该类型数据包中时戳最老数据包,则从该类型所有数据包队列中挑选出时戳最老的数据包,作为候选包;
(c)将所有含有完整数据包的并且被阻塞队列中最老数据包的时戳记为OldestTime。
进一步地,所述前级调度模块,从NP数据包、P数据包和CPL数据包候选包中选择一个时戳最老的数据包,按如下方式再选择一个符合PCIE排序规则的时戳最老数据包:
(a)如果NP包、P包和CPL包都有候选包,并且每个候选包都是其同类型包中时戳最老的包,则只需要从这些候选包中选择一个时戳最老的数据包;
(b)如果NP包、P包和CPL包都有候选包,但由于队列阻塞,并不是每个候选包都是其同类型包中时戳最老的,先从3个候选包中挑选出最老候选包,然后和OldestTime值进行比较;如果挑选出的最老候选包的时戳老于OldestTime值,则调度成功,最老候选包就是此次调度成功的包;如果挑选出的最老候选包的时戳值没有OldestTime值老,则根据PCIE排序规则进行进一步比较,如果挑选出的最老候选包能超越OldestTime值对应的包类型发送,则调度成功,最老候选包就是此次调度成功的包;否则,调度不成功;
(c)如果NP包、P包和CPL包不都有候选包,则从候选包中挑选一个时戳最老的候选包;如果挑选出的最老候选包的时戳老于OldestTime值,则调度成功,最老候选包就是此次调读成功的包;如果挑选出的最老候选包的时戳值没有OldestTime值老,则根据PCIE规则继续进行比较,如果挑选出的最老候选包能超越其它拥有时戳更老但因为阻塞没有候选类型包发送的类型包发送,则调度成功,该候选包就是此次调度成功的包;否则,调度不成功;
(d)如果NP包、P包和CPL包都没有候选包,则调度不成功。
进一步地,所述后级处理模块,进一步包括,端口输出缓存管理模块、后级调度模块,其中,
所述端口输出缓存管理模块,将来自同一输入端口的数据包也分成NP、P和CPL类型,分别保存在其随机存储器NP队列、P队列和CPL队列中,此种队列称为源队列,上述三个同输入端口的队列在端口输出缓存管理模块也共享一个随机存储器,来自不同输入端口的包占据不同的随机存储器;接收所述后级调度模块发送的调度成功数据包的队列编号,并将调度成功数据包发送给端口控制器输出侧接口;
所述后级调度模块,根据所述端口输出缓存管理模块的队列信息和端口控制器输出侧接口的拥塞反压信息,对所述端口输出缓存管理模块的队列进行输出调度,并将调度成功数据包的队列编号发送给所述端口输出缓存管理模块,后者将调度成功的数据包发送到端口控制器输出侧接口;
更进一步地,所述后级调度模块,针对同输入端的NP队列、P队列和CPL队列,挑选出一个时戳最老的数据包;如果端口控制器输出侧没有拥塞,针对同输入端的三个队列NP、P和CPL,挑选出一个时戳最老的数据包;在每个输出端口,最多可以得到n个不同输入源的时戳最老的数据包;如果端口控制器输出侧发生拥塞,端口输出缓存管理模块有一类或两类数据包因为收到端口控制器输出侧接口发送的拥塞反压信号被阻塞,如果被阻塞的某类型数据包是所有三个同源NP队列、P队列和CPL队列中队首包时戳最老的,则从没有被阻塞的队列中选择一个符合PCIE排序规则要求,并且能先于被阻塞的最老时戳报文发送的数据包,作为候选包,可能选择到0个或1个候选包;对于来自n个不同输入端口的队列,最多可以挑选出n个不同源候选包;如果被阻塞的数据包类型的队首数据包不是其同源队列中时戳最老的数据包,就不会影响该同源NP队列、P队列和CPL队列中最老数据包的选择,此时,对于来自n个不同输入端口的队列,最多可以挑选出n个不同源候选包;
针对上述挑选的最多n个不同源候选包,需要根据候选包的描述符信息对n个候选包再进行调度,调度方法包括加权轮转调度、固定轮转调度或最老数据包调度,后级调度模块可选此三种调度方式中的任何一种进行输出调度;后级调度模块将调度成功数据包的队列编号发送给端口输出缓存管理模块,后者将选中的数据包发送到端口控制器输出侧接口;
如果端口控制器输出侧接口给输出缓存管理模块的NP、P和CPL三类数据包都发送拥塞的反压信号,则后级调度模块暂停对端口输出缓存管理模块队列数据的调度,直到一个或一个以上类型数据包队列不再拥塞后,再进行调度。
为了实现上述目的,本发明还提供了一种PCIE交换芯片内核工作方法,包括以下步骤:
1)前级处理模块读取数据包,并将不同类型的数据包分别归入不同队列;
2)根据队列信息和后级处理模块的队列拥塞反压信息,前级处理模块对队列进行输出调度,并将调度成功数据包及数据包的描述符信息发送到后级处理模块,只有含有完整数据包的队列才有资格参与调度;
3)后级处理模块将来自不同输入端口的数据包进行分类并分别保存在不同队列中,并根据对应的队列信息和队列拥塞反压信息,对队列进行输出调度,调度成功的数据包被发送到端口控制器输出侧接口;
进一步地,所述步骤1),进一步包括:
端口接收处理模块从端口控制器输入侧读取数据包,用时戳记录每个数据包进入端口接收处理模块的时间,同时查询路由表,得到数据包的输出端口;
将读取的数据包、提取的数据包类型、数据包的请求者身份标识ID编号、宽松排序属性位、基于请求者ID排序属性位、完成包的Tag标记、数据包的输出端口编号和数据包时戳发送给输入端口缓存管理模块;
根据数据包的类型以及输出端口编号将数据包分别归入对应不同输出端口和包类型的虚拟输出队列;
所述数据包的类型,包括NP数据包、P数据包和CPL数据包;
所述NP数据包、所述P数据包和所述CPL数据包分别归入NP队列、P队列和CPL队列。
进一步地,所述步骤2),进一步包括,在某个调度周期,如果没有任何一个队列接收到拥塞信息,则从NP类型包虚拟输出队列中选择一个时戳最老的NP包、从P类型包虚拟输出队列中选择一个时戳最老的P包、从CPL类型包虚拟输出队列中选择一个时戳最老的CPL包,这些被选中NP包、P包 和CPL包再次进行时戳比较,选择一个时戳最老到达的数据包发送到后级处理模块;如果有一个或多个队列接收到拥塞信息,则禁止收到拥塞信息的队列发包到后级处理模块,收到拥塞信息的队列被阻塞,并进行如下处理:
(a)如果被阻塞的某类型数据包的一个或多个队列的队首数据包是时戳最老的该类型数据包,按照PCIE协议要求,如果该类型数据包后到的可以超越先到达的包发送,则从所有未被阻塞的该类型包中选择一个符合PCIE排序规则要求的能先于被阻塞队列发送的时戳最老数据包,作为候选包;保存该类型包所有队列中时戳最老的数据包的时戳;
(b)如果被阻塞的某类型数据包的一个或多个队列的队首数据包不是该类型数据包中时戳最老数据包,则从该类型所有数据包队列中挑选出时戳最老的数据包,作为候选包;
(c)将所有含有完整数据包的并且被阻塞的所有队列中最老数据包的时戳记为OldestTime。
进一步地,所述步骤2),进一步包括,
从NP数据包、P数据包和CPL数据包候选包中,按如下方式再选择一个符合PCIE排序规则的时戳最老数据包:
(a)如果NP包、P包和CPL包都有候选包,并且每个候选包都是其同类型包中时戳最老的包,则只需要从这些候选包中选择一个时戳最老的数据包;
(b)如果NP包、P包和CPL包都有候选包,但由于队列阻塞,并不是每个候选包都是其同类型包中时戳最老的,先从3个候选包中挑选出最老候选包,然后和OldestTime值进行比较;如果挑选出的最老候选包的时戳老于OldestTime值,则调度成功,最老候选包就是此次调度成功的包;如果挑选出的最老候选包的时戳值没有OldestTime值老,则根据PCIE排序规则进行进一步比较,如果挑选出的最老候选包能超越OldestTime值对应的包类型发送,则调度成功,最老候选包就是此次调度成功的包;否则,调度不成功;
(c)如果NP包、P包和CPL包不都有候选包,则从候选包中挑选一个时戳最老的候选包;如果挑选出的最老候选包的时戳老于OldestTime值,则调度成功,最老候选包就是此次调读成功的包;如果挑选出的最老候选包的时戳值没有OldestTime值老,则根据PCIE规则继续进行比较,如果挑选出的最老候选包能超越其它拥有时戳更老但因为阻塞没有候选类型包发送的类型包发送,则调度成功,该候选包就是此次调度成功的包;否则,调度不成功;
(d)如果NP包、P包和CPL包都没有候选包,则调度不成功。
进一步地,所述步骤3),进一步包括,
由来自同一输入端口的数据包构成的NP队列、P队列和CPL队列互称为同源队列;
根据所述端口输出缓存管理模块的队列信息,如果端口控制器输出侧没有拥塞,针对同输入端的三个同源队列NP、P和CPL,挑选出一个时戳最老的数据包。
进一步地,所述队列信息,包括,每个队列是否存在完整数据包、有完整数据包存在的各队列队首时戳、每个队列队首数据包的请求者身份标识ID编号、宽松排序属性位、基于请求者ID排序属性位和完成包的标记。
更进一步地,所述步骤3),进一步包括,
如果端口控制器输出侧没有拥塞,后级调度模块从来自同一输入端口的三个队列NP、P和CPL中,挑选出一个时戳最老的数据包。在每个输出端口,最多可以得到n个不同输入源的时戳最老的数据包,作为候选数据包;
如果端口控制器输出侧发生拥塞,端口输出缓存管理模块有一类或两类数据包因为收到端口控制器输出侧的拥塞反压信号被阻塞,如果被阻塞的一类或两类型数据包是来自同源NP队列、P队列和CPL队列中队首包时戳最老的,则从没有被阻塞的来自同入端口的队列中选择一个符合PCIE排序规则要求,并且能先于被阻塞的最老时戳报文发送的数据包,作为候选包,可能找到0个或1个,对于来自n个不同输入端口的队列,最多可以挑选出n个不同源候选包;如果被阻塞的数据类型的队首数据包不是同源队列中时戳最老的数据包,就不会影响该同源NP队列、P队列和CPL队列中最老数据包的选择,此时,对于来自n个不同输入端口的队列,最多可以挑选出n个不同源候选包;
针对上述挑选的最多n个不同源候选包,需要根据候选包的包描述符提供的包相关信息对n个候选包再进行调度,调度方法包括加权轮转调度、固定轮转调度或最老数据包调度,后级调度模块可选此三种调度方式中的任何一种进行输出调度;后级调度模块将调度成功数据包的队列编号发送给端口输出缓存管理模块,后者将选中的数据包发送到端口控制器输出侧接口;
如果端口控制器输出侧接口给输出缓存管理模块的NP、P和CPL三类数据包都发送拥塞的反压信号,则后级调度模块暂停对端口输出缓存管理模块队列数据的调度,直到一个或一个以上类型数据包队列不再拥塞后,再进行调度。
本发明提供的PCIE交换芯片内核及工作方法,将虚拟输出队列和PCIE协议规定的排序规则巧妙地结合在一起,对NP、P和CPL队列进行管理。可以确保PCIE交换机无阻塞低延迟转发数据包,能够线速转发PCIE各种链路带宽的数据包。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,并与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为根据本发明的PCIE交换芯片结构示意图;
图2为根据本发明的PCIE交换芯片内核结构示意图;
图3为根据本发明的PCIE交换芯片内核工作方法流程图;
图4为根据本发明的前级调度模块调度过程示意图;
图5为根据本发明的后级调度模块调度过程示意图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
图1为根据本发明的PCIE交换芯片结构示意图,如图1所示,本发明的PCIE交换芯片有n个端口,其中n为不小于三的自然数,每个端口通过其入口侧物理层和端口控制器输入侧从外界PCIE链路接收数据,接收的数据通过PCIE交换芯片内核转发到其它端口的端口控制器输出侧,再通过其出口侧物理层发送到外界PCIE链路。
图2为根据本发明的PCIE交换芯片内核结构示意图,如图2所示,本发明的PCIE交换芯片内核,包括,前级处理模块和后级处理模块,其中,
每个端口的前级处理模块,包括,端口接收处理模块、输入端口缓存管理模块和前级调度模块,每个端口接收处理模块内置有路由表。
对应每个端口的后级处理模块,包括,端口输出缓存管理模块、后级调度模块。
端口接收处理模块,从每个端口控制器输入侧读取数据包,根据包头信息查询路由表,得到每个数据包的输出端口,同时用时戳记录每个数据包进入端口接收处理模块的时间。端口接收处理模块将接收的数据包、数据包类型、数据包的请求者身份标识ID(英文identity的缩写,中文含义为身份标识)编号、数据包的宽松排序属性位、数据包的基于请求者ID排序属性位和完成包的Tag标记、数据包的输出端口编号和数据包时戳发送到输入端口缓存管理模块。
输入端口缓存管理模块,其将每个数据包的时戳、数据包类型、数据包的请求者身份标识ID编号、数据包的宽松排序属性位、数据包的基于请求者ID排序属性位和完成包的Tag标记保存在其对应的数据包描述符中,并将每个队列的队列信息发送给前级接收模块;接收前级调度模块发送的调度成功队列的编号,并将调度成功的数据包及其数据包描述符信息发送到后级处理模块的对应端口输出缓存管理模块的随机存储器中。
输入端口缓存管理模块,其根据数据包的输出端口和数据包的三种类型NP、P和CPL对数据包进行区分,分别将其归于不同的数据包队列进行管理。输入端口缓存管理模块对应每个输出端口构建3个虚拟输出队列,此种队列称为目的队列,它们分别是NP类型包虚拟输出队列、P类型包虚拟输出队列和CPL类型包虚拟输出队列。
按照上述方法,对于有n个输入输出端口的PCIE交换芯片,每个输入端口缓存管理模块构建n个NP类型包虚拟输出队列、n个P类型包虚拟输出队列和n个CPL类型包虚拟输出队列。一个输入端口缓存管理模块的所有3n个队列数据包共享一个随机存储器。n个输入端口缓存管理模块共有n个这类共享随机存储器。
前级调度模块,其对含有完整数据包的队列进行输出调度,并将调度成功队列的编号发送给对应的输入端口缓存管理模块。
图4为根据本发明的前级调度模块调度过程示意图,如图4所示,前级调度模块进行输入调度过程如下:
(1)在某个调度周期,如果没有任何一个队列从后级处理模块的端口输出缓存管理模块接收到拥塞信息,前级调度模块从n个NP类型包虚拟输出队列中选择一个时戳最老的NP包,从n个P类型包虚拟输出队列中选择一个时戳最老的P包,从n个CPL类型包虚拟输出队列中选择一个时戳最老的CPL包。再对上述选取的NP包、P包和CPL进行时戳比较,选择一个时戳最老到达的包及其包描述符信息发送到后级处理模块的端口输出缓存管理模块。
在某个调度周期,如果有一个或多个队列从后级处理模块的端口输出缓存管理模块接收到拥塞信息,禁止接收到拥塞信息的队列发包到后级处理模块,接收到拥塞信息的队列被阻塞,这个时候就要根据下面两种情况分别进行处理:
a、如果被阻塞的某类型(P类型、NP类型或CPL类型)包的某个队列的队首数据包是时戳最老的该类型包,按照PCIE协议要求,如果该类型数据包后到的可以超越先到达的包发送,则从所有未被阻塞的该类型包中选择一个符合PCIE排序规则要求的能先于被阻塞队列发送的时戳最老数据包,作为候选包,可能找到0个或1个。记下该类型包所有队列中被阻塞时戳最老包的时戳,此种情况下,NP类型队列的被阻塞队列最老时戳记到寄存器NP_NoUse_T, P类型队列的被阻塞队列最老时戳记到寄存器P_NoUse_T,CPL类型队列的被阻塞队列最老时戳记到寄存器CPL_NoUse_T。
按照上述方法分别挑选出符合PCIE排序规则的能先于被阻塞队列发送的数据包中时戳最老的NP包、P包和CPL包,可能找到0个或1个,同时记录每个类型的最老时戳。
按照PCIE协议要求,如果该类型数据包后到的不可以超越先到达的包发送,该类型其它所有队列也同样被阻塞,记下被阻塞包类型的时戳最老的包,此种情况下, NP类型队列被阻塞的最老时戳记录在寄存器NP_NoUse_T中, P类型队列被阻塞的最老时戳记录在寄存器P_NoUse_T,CPL类型队列被阻塞的最老时戳记录在寄存器CPL_NoUse_T。
b、如果被阻塞的某类型包的某个队列的队首数据包不是该类型数据包中时戳最老的,就不会影响某类型队列时戳最老数据包的挑选,从该类型所有数据包队列中挑选出时戳最老的。如果NP类型队列中被阻塞队列队首包不是最老的,令NP_NoUse_T=0。如果P类型队列中被阻塞队列队首包不是最老的,令P_NoUse_T=0。如果CPL类型队列中被阻塞队列队首包不是最老的,令CPL_NoUse_T=0。
(2)根据(1)选择的结果,从NP_NoUse_T、P_NoUse_T、CPL_NoUse_T中选择一个时戳最老的,将该值保存在OldestTime寄存器中,再选择一个符合PCIE排序规则的时戳最老数据包,此时需要分四种情况分别进行处理:
a、如果NP包、P包和CPL包都有候选包,并且每个候选包都是其同类型包中时戳最老的包,则只需要从这些候选包中选择一个时戳最老的。
b、如果NP包、P包和CPL包都有候选包,因为有队列阻塞,并不是每个候选包都是其同类型包中时戳最老的包,先从3个候选包中挑选出最老候选包,然后和OldestTime值进行比较,可能有两种情况:
①挑选出的最老候选包的时戳老于OldestTime值,则调度成功,最老候选包就是此次调度成功的包。
②挑选出的最老候选包的时戳值没有OldestTime值老,则需要根据PCIE排序规则进行进一步比较,如果候选包能超越OldestTime值对应的包类型,则调度成功,最老候选包就是此次调度成功的包。否则,调度不成功。
c、如果NP包、P包和CPL包不都有候选包,则仍然从候选包中挑选一个时戳最老的。此时可能有两种情况:
①挑选出的最老候选包的时戳老于OldestTime值,则调度成功,最老候选包就是此次调读成功的包。
②挑选出的最老候选包的时戳值没有OldestTime值老,则需要根据PCIE规则继续进行比较,如果挑选出的最老候选包能超越其它拥有时戳更老但因为阻塞没有候选类型包发送的类型包,则调度成功,该候选包就是此次调度成功的包,否则调度不成功。
d、如果NP包、P包和CPL包都没有候选包,则调度不成功。
(3)如果调度成功,前级调度模块将调度成功队列的编号发送给对应的输入端口缓存管理模块,后者将(2)调度成功的包及其包描述符发送到后级处理模块的对应端口输出缓存管理模块的随机存储器中。
端口输出缓存管理模块,将来自每个输入端口的数据包也分成NP、P和CPL类型,分别保存在对应端口输出缓存管理模块的随机存储器NP队列、P队列和CPL队列中,此种队列称为源队列,上述三个同输入端口的队列在端口输出缓存管理模块也共享一个随机存储器。来自不同输入端口的包占据不同的随机存储器。
后级调度模块,根据对应端口输出缓存管理模块的队列信息和端口控制器输出侧提供的拥塞反压信息,对端口输出缓存管理模块的不同源队列进行输出调度。
图5为根据本发明的后级调度模块调度过程示意图,如图5所示,后级调度模块的输出调度过程如下:
(1)如果端口控制器输出侧没有反馈拥塞信息,针对同输入端的三个队列NP、P和CPL,挑选出一个时戳最老的数据包。在每个输出端口,最多可以得到n个不同输入源的时戳最老的数据包。
如果端口控制器输出侧发生拥塞,端口输出缓存管理模块有一类或两类数据包因为收到端口控制器输出侧的拥塞反压信号被阻塞,这个时候就要分两情况分别进行处理:
(a)如果被阻塞的数据包队列是NP、P和CPL三个队列中队首包时戳最老的,就从没有被阻塞的另外一个或两个同源队列中选择一个符合PCIE排序规则要求,并且能先于被阻塞的最老时戳报文发送的数据包,作为候选包,如果按照PCIE排序规则要求,后来的包可以超越先到的包,就可能找到,否则就找不到。按照上述方法分别挑选出每个输入端口符合PCIE排序规则要求的能先于被阻塞队列发送的时戳最老数据包,可能找到0个或1个。
(b)如果被阻塞的某类型数据的队首数据包不是同源队列中时戳最老的数据包,就不会影响该同源NP队列、P队列和CPL队列中最老数据包的选择。
(2)针对3n个队列在(1)中选择有n个结果,需要对从n个结果中挑选出一个结果。
根据实际情况对n个结果再进行调度时,根据这n个候选包的包描述符提供的包相关信息进行调度,调度方法有加权轮转调度、固定轮转调度或最老数据包调度,后级调度模块可以选择此三种调度方法中的任何一种调度方法进行输出调度。后级调度模块将调度成功数据包的队列编号发送给端口输出缓存管理模块,后者将选中的数据包发送到端口控制器输出侧。
如果端口控制器输出侧给输出缓存管理模块的NP、P和CPL三类数据包都发送拥塞的反压信号,则后级调度模块暂停对端口输出缓存管理模块队列数据的调度,直到一个或一个以上类型数据包队列不再拥塞后,再进行调度。
图3为根据本发明的PCIE交换芯片内核工作方法流程图,下面将参考图3,对本发明的PCIE交换芯片内核工作方法进行详细描述。
首先,在步骤301,通过端口0控制器输入侧接口,端口0接收处理模块从端口0控制器读取NP、P和CPL数据包,用时戳记录每个数据包进入端口接收处理模块的时间,同时查询路由表,得到数据包的输出端口。端口0接收处理模块将读取的数据包、提取的数据包类型、数据包的输出端口编号、数据包描述符发送给输入端口0缓存管理模块,数据包描述符包括:从包头提取的数据包的请求者身份标识ID编号、数据包的宽松排序属性位、数据包的基于请求者ID排序属性位和完成包的Tag标记以及数据包时戳,输入端口0缓存管理模块根据数据包的类型以及输出端口号按照如下方法将数据包分别归入如下虚拟输出队列:
发送到端口0的NP包进入P0_NP队列,发送到端口0的P包进入P0_P队列,发送到端口0的CPL包进入P0_CPL队列。同样发送到端口m的NP包进入Pm_NP队列,发送到端口m的P包进入Pm_P队列,发送到端口m的CPL包进入Pm_CPL队列,其中m为不大于n-1的任意自然数。
同样,通过任意端口m控制器输入侧接口,端口m接收处理模块从端口m控制器读取NP、P和CPL数据包,查询路由表,得到数据包的输出端口。端口m接收处理模块将读取的数据包、提取的数据包类型、数据包的输出端口编号、数据包描述符发送给输入端口m缓存管理模块,输入端口m缓存管理模块根据数据包的类型以及输出端口号按照如下方法将数据包分别归入如下虚拟输出队列:
发送到端口0的NP包进入P0_NP队列,发送到端口0的P包进入P0_P队列,发送到端口0的CPL包进入P0_CPL队列。同样发送到端口m的NP包进入Pm_NP队列,发送到端口n-1的P包进入Pm_P队列,发送到端口n-1的CPL包进入Pm_CPL队列。
在步骤302,输入端口0缓存管理模块将每个队列的队列信息告知前级调度模块0,告知的队列信息包括:每个队列是否存在完整数据包、以及有完整数据包存在的各队列队首时戳、每个队列队首数据包的请求者身份标识ID编号、宽松排序属性位、基于请求者ID排序属性位和完成包的Tag标记等信息。一个队列参与前级模块调度的必要条件之一是该队列有完整数据包。端口0输出缓存管理模块将来自源端口0队列管理模块TM0_0队列NP、队列P和队列CPL存储空间是否快满(AF)情况分别告知前级调度模块0,端口m输出缓存管理模块会将来自源端口0队列管理模块TMm_0队列NP、队列P和队列CPL存储空间是否快满的情况分别告知前级调度模块0,如图2所示。
前级调度模块0根据上述信息,按照图4所示的调度方式对输入端口0缓存管理模块的各个队列进行调度。如果前级调度模块0没有从任意端口m输出缓存管理模块接收到队列快满的反压信号,也就是说反压信号无效,前级调度模块0就从n个NP类型包虚拟输出队列中选择一个时戳最老的NP包,从n个P类型包虚拟输出队列中选择一个时戳最老的P包,从n个CPL类型包虚拟输出队列中选择一个时戳最老的CPL包。再对上述选取的NP包、P包和CPL进行时戳比较,选择一个时戳最老的包,并将选中的队列信息告知输入端口0缓存管理模块,后者将选中队列的队首包及其包描述符发送到相应的端口m输出缓存管理模块。在端口m输出缓存管理模块中,来自同一个输入端口的同源包分成NP队列、P队列和CPL队列分别进行管理,同源数据包按照队列的形式保存在同一个随机存储器中。前级调度模块0将调度成功的队列编号告知输入端口0缓存管理模块,如果前级调度模块0选中的是P0_NP队列, 输入端口0缓存管理模块就将该队首包及其包描述符发送到端口0输出缓存管理模块,后者将该数据包传递给其子模块——源端口0的队列管理模块TM0_0,TM0_0模块按照先来后到的顺序将接收的NP数据包添加在TM0_0模块的NP队列的队尾,保存在随机存储器中。同样地,如果选中的是Pm_NP队列,就将该队首包及其包描述符发送到端口m输出缓存管理模块,后者将该数据包传递给其子模块——源端口0的队列管理模块TMm_0,TMm_0模块按照先来后到的顺序将其添加在TMm_0模块的NP队列的队尾,保存在随机存储器中。输入端口0缓存管理模块对选中的Pm_P和Pm_CPL包的处理过程也类似。
前级调度模块0根据后级任意端口m输出缓存管理模块对其的反压情况进行调度。如果任意端口m输出缓存管理模块的源端口0的队列管理TMm_0模块的队列存储器NP队列、P队列或CPL队列中任意一个队列的存储空间快满,就发送快满反压信号给前级调度模块0。NP队列快满就发送Pm_NP_AF信号,P队列快满就发送Pm_P_AF信号,CPL队列快满就发送Pm_CPL_AF信号。
前级队列调度模块0根据这些反压信息,结合输入端口0缓存管理模块发送过来的各个队列信息,对各个队列进行调度。下面以端口0输出缓存管理模块给前级队列调度模块0的拥塞反压有效为例,分二种情况分别说明处理过程:
(a)假设端口0输出缓存管理模块的源端口0的队列管理TM0_0模块分配给队列NP存储空间快满了,它给前级队列调度模块0发送P0_NP_AF有效信号,则输入端口0缓存管理模块P0_NP队列不能参加调度。如果P0_NP队列存在数据包,并且该队列的队首数据包的时戳是当前调度周期所有含有完整数据包的NP队列中时戳最老的,此最老时戳保存到寄存器NP_NoUse_T中。根据PCIE排序规则,后到达NP类型的包可以先于先到达的NP类型包发送,前级队列调度模块0从所有未收到有效反压信号的NP类型包中选择一个时戳最老的数据包,作为候选包。
假设端口0输出缓存管理模块的源端口0的队列管理TM0_0模块分配给队列P存储空间快满了,它给前级队列调度模块0发送P0_P_AF有效信号,则输入端口0缓存管理模块P0_P队列不能参加调度。如果P0_P队列存在数据包,并且该队列的队首数据包时戳是当前调度周期所有含有完整数据包的P队列中时戳最老的,此最老时戳保存到寄存器P_NoUse_T中。根据PCIE排序规则,只有在两种情况下,后到达的P类型数据包可以先于先到达的P类型数据包发送,这两种情况分别是:①后到达P类型的基于请求者ID排序属性位为1,并且其请求者ID和被阻塞的P0_P队列队首包的请求者ID不一样。②后到达的P类型数据包的宽松排序属性位为1。基于这两种情况,前级队列调度模块0从所有未收到有效反压信号,并且含有完整数据包的P队列的队首数据中选择符合条件的最老时戳数据包,可能找到0个或1个作为候选包。
假设端口0输出缓存管理模块的源端口0的队列管理TM0_0模块分配给队列CPL存储空间快满了,它给前级队列调度模块0发送P0_CPL_AF有效信号,则输入端口0缓存管理模块P0_CPL队列不能参加调度。如果P0_CPL队列存在数据包,并且该队列的队首数据包是所有当前调度周期含有完整数据包的CPL队列中时戳最老的数据包,此最老时戳保存到寄存器CPL_NoUse_T中。根据PCIE排序规则,只有后到达的CPL类型数据包和最老数据包请求者ID和Tag标记都不一样时,后到达的CPL类型数据包可以先于先到达的CPL类型数据包发送。根据这种规则,前级队列调度模块0从所有未收到有效反压信号,并且含有完整数据包的CPL队列的队首数据中选择符合条件的最老时戳数据包,可能找到0个或1个作为候选包。
(b)还是和(a)的假设条件类似,只是,因为阻塞不能参加调度的P0_NP、P0_P、P0_CPL队列的队首数据包分别不是该NP、P、和CPL类型所有数据包中时戳最老的,就不会分别影响NP、P、和CPL类型时戳最老数据包的挑选,只需分别直接从n个NP、P、和CPL类型数据包队列中挑选出时戳最老的。如果NP类型队列中被阻塞队列队首包不是最老的,则令NP_NoUse_T=0。如果P类型队列中被阻塞队列队首包不是最老的,则令P_NoUse_T=0。如果CPL类型队列中被阻塞队列队首包不是最老的,则令CPL_NoUse_T=0。
根据(a)或(b)选择的结果,从NP_NoUse_T、P_NoUse_T、CPL_NoUse_T中选择一个时戳最老的,记该值为OldestTime,再选择一个符合PCIE排序规则的时戳最老的数据包,此时需要分四种情况分别进行处理:
(a)如果NP包、P包和CPL包都有候选包,并且每个候选包都是其同类型包中时戳最老的包,则只需要从这些候选包中选择一个时戳最老的。
(b)如果NP包、P包和CPL包都有候选包,因为有队列阻塞,并不是每个候选包都是其同类型包中时戳最老的包,先从3个候选包中挑选出最老候选包,然后和OldestTime值进行比较,可能有两种情况:
①挑选出的最老候选包的时戳值老于OldestTime值,则调度成功,最老候选包就是此次调度成功的包。
②挑选出的最老候选包的时戳值没有OldestTime值老,则需要根据PCIE排序规则进行进一步比较,如果候选包能超越OldestTime值对应的包类型,则调度成功,最老候选包就是此次调度成功的包。否则,调度不成功。
(c)如果NP包、P包和CPL包不都有候选包,则仍然从候选包中挑选一个时戳最老的。此时可能有两种情况:
①挑选出的最老候选包的时戳值老于OldestTime值,则调度成功,最老候选包就是此次调读成功的包。
②挑选出的最老候选包的时戳值没有OldestTime值老,则需要根据PCIE规则继续进行比较,如果挑选出的最老候选包能超越其它拥有时戳更老但因为阻塞没有候选类型包发送的类型包,则调度成功,该候选包就是此次调度成功的包,否则调度不成功。
(d)如果NP包、P包和CPL包都没有候选包,则调度不成功。
如果调度成功,前级调度模块0将调度成功队列的编号发送给输入端口0缓存管理模块,后者将调度成功的包及其包描述符发送到后级处理模块的对应输出端口m缓存管理模块的源端口0队列管理模块TMm_0的对应数据包队列随机存储器中。如果调度不成功,则不发送。
在步骤303,后级处理模块的任意端口m输出缓存管理模块将自己队列相关信息发送给后级调度模块m,后级调度模块根据这些队列信息以及对应端口m控制器输出侧接口对NP队列、P队列和CPL队列的拥塞反压信号对端口m输出缓存管理模块的队列数据包进行调度,如图2和5所示。
告知后级调度模块m的队列信息包括:每个队列是否存在完整数据包、以及有完整数据包存在的各队列队首时戳、每个队列队首数据包的请求者身份标识ID编号、宽松排序属性位、基于请求者ID排序属性位和完成包的Tag标记。一个队列能参与后级模块调度的必要条件之一是该队列有完整数据包。
任意端口m输出侧接口发送快满反压信号给后级调度模块m。NP数据包快满就发送NP_AF信号,P数据包快满就发送P_AF信号,CPL数据包快满就发送CPL_AF信号。下面以后级调度模块0为例说明调度的具体步骤:
(a)如果端口0控制器输出侧没有至物理层的输出拥塞,它对后级调度模块0的NP、P和CPL队列都没有拥塞反压,则NP_AF、P_AF和CPL_AF信号无效,针对同输入端的三个队列NP、P和CPL,后级调度模块0分别挑选出一个队首时戳最老的数据包。最多可以得到n个不同输入端的时戳最老的数据包队列。
(b)如果端口0控制器输出侧接口发生拥塞,则NP_AF、P_AF和CPL_AF信号中任意一个、二个或所有三个都有效。如果NP_AF、P_AF和CPL_AF三个信号都有效,则后级调度模块0在当前调度周期停止对源端口m队列管理任意TM0_m模块的队列进行输出调度。如果NP_AF、P_AF和CPL_AF信号中只有任意一个或二个有效,这个时候就要分情况分别进行处理,下面以源端口0的队列管理TM0_0模块为例说明。
如果被阻塞源端口0的队列管理TM0_0模块的一种或两种类型报文是其当前调度周期中,具有完整数据包的NP、P和CPL三个队列中队首报文时戳最老的,就从没有被阻塞的另外两个或一个同源队列中选择一个符合PCIE排序规则要求,并且能先于被阻塞的最老时戳报文发送的数据包,作为候选包。如果按照PCIE排序规则要求,后来的包可以超越先到的包,就可能找到,否则就找不到。按照上述方法分别挑选出每个输入端口符合PCIE排序规则要求的能先于被阻塞队列发送的时戳最老数据包,可能找到0个或1个。
如果被阻塞的一种或两种类型队首数据包不是队列管理TM0_0模块管理的三个队列中时戳最老的数据包,就不会影响后级调度模块0对队列管理TM0_0模块NP队列、P队列和CPL队列中最老数据包的选择。
针对3n个队列,如果NP_AF、P_AF和CPL_AF三个信号不是都有效,后级调度模块0按照(a)或(b)的方法,针对不同源的数据队列分别进行选择,会有n个结果,根据这n个候选包的包描述符提供的包相关信息,针对这个n个结果需要再进行输出调度,根据实际情况,调度方法可以选择加权轮转调度、固定轮转调度或最老数据包调度中任何一种,并将调度成功的数据包编号发送到端口0输出缓存管理模块,后者将调度成功的数据包发送到对应的端口0控制器输出侧。
本领域普通技术人员可以理解:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种PCIE交换芯片内核,包括,前级处理模块和后级处理模块,其特征在于,
所述前级处理模块,从每个端口控制器输入侧读取数据包,得到每个数据包的输出端口;用时戳记录每个数据包进入所述前级处理模块的时间并保存;根据数据包的类型和输出端口对数据包进行区分,构建虚拟输出队列,进行队列管理和调度;将调度成功的数据包及包描述符信息发送到后级处理模块;
所述后级处理模块,将来自每个不同输入端口的数据包分类保存在不同源队列中;根据对应的队列信息和队列拥塞反压信息,对不同源队列进行管理和输出调度;将调度成功的数据包发送到端口控制器输出侧接口;
所述前级处理模块,进一步包括前级调度模块,所述前级调度模块,其对数据包进行输入调度,并将调度成功队列的编号发送给输入端口缓存管理模块;只有含有完整数据包的队列参与调度;
接收输入端口缓存管理模块提供的每个队列信息,在某个调度周期,如果没有任何一个队列接收到后级处理模块反馈的拥塞信息,则从NP类型包虚拟输出队列中选择一个时戳最老的NP包、从P类型包虚拟输出队列中选择一个时戳最老的P包、从CPL类型包虚拟输出队列中选择一个时戳最老的CPL包,这些被选中的NP包、P包和CPL包进行时戳比较,选择一个时戳最老到达的数据包发送到后级处理模块;如果有一个或多个队列接收到后级处理模块反馈的拥塞信息,则禁止接收到拥塞信息的队列发包到后级处理模块,接收到拥塞信息的队列被阻塞,并进行如下处理:
(a)如果被阻塞的某类型数据包的一个或多个队列的队首数据包是时戳最老的该类型数据包,按照PCIE协议要求,如果该类型数据包后到的可以超越先到达的包发送,则从所有未被阻塞的该类型包队列中选择一个符合PCIE排序规则要求的能先于被阻塞队列发送的时戳最老数据包,作为候选包;保存该类型包所有队列中时戳最老的数据包的时戳;
(b)如果被阻塞的某类型数据包的一个或多个队列的队首数据包不是该类型数据包中时戳最老数据包,则从该类型所有数据包队列中挑选出时戳最老的数据包,作为候选包;
(c)将所有含有完整数据包的并且被阻塞队列中最老数据包的时戳记为OldestTime。
2.根据权利要求1所述的PCIE交换芯片内核,其特征在于,所述前级处理模块,进一步还包括,端口接收处理模块和所述输入端口缓存管理模块,其中,
所述端口接收处理模块,内置有路由表,从每个端口控制器输入侧读取数据包,根据包头信息查询路由表,得到每个包的输出端口,同时用时戳记录每个数据包进入端口接收处理模块的时间;将接收的数据包、数据包类型、数据包的请求者身份标识ID编号、数据包的宽松排序属性位、数据包的基于请求者ID排序属性位和完成包的Tag标记、数据包的输出端口编号和数据包时戳发送到所述输入端口缓存管理模块;
所述输入端口缓存管理模块,其将每个数据包的时戳、数据包类型、数据包的请求者身份标识ID编号、数据包的宽松排序属性位、数据包的基于请求者ID排序属性位和完成包的Tag标记保存在其对应的数据包描述符中;接收所述前级调度模块发送的调度成功队列的编号,并将调度成功的数据包及其数据包描述符信息发送到所述后级处理模块。
3.根据权利要求2所述的PCIE交换芯片内核,其特征在于,所述输入端口缓存管理模块,根据输出端口和数据包的NP、P和CPL类型对数据包进行区分,并将每个队列的队列信息发送给所述前级调度模块。
4.根据权利要求1所述的PCIE交换芯片内核,其特征在于,所述前级调度模块,从NP数据包、P数据包和CPL数据包候选包中选择一个时戳最老的数据包,按如下方式再选择一个符合PCIE排序规则的时戳最老数据包:
(a)如果NP包、P包和CPL包都有候选包,并且每个候选包都是其同类型包中时戳最老的包,则只需要从这些候选包中选择一个时戳最老的数据包;
(b)如果NP包、P包和CPL包都有候选包,但由于队列阻塞,并不是每个候选包都是其同类型包中时戳最老的,先从3个候选包中挑选出最老候选包,然后和OldestTime值进行比较;如果挑选出的最老候选包的时戳老于OldestTime值,则调度成功,最老候选包就是此次调度成功的包;如果挑选出的最老候选包的时戳值没有OldestTime值老,则根据PCIE排序规则进行进一步比较,如果挑选出的最老候选包能超越OldestTime值对应的包类型发送,则调度成功,最老候选包就是此次调度成功的包;否则,调度不成功;
(c)如果NP包、P包和CPL包不都有候选包,则从候选包中挑选一个时戳最老的候选包;如果挑选出的最老候选包的时戳老于OldestTime值,则调度成功,最老候选包就是此次调读成功的包;如果挑选出的最老候选包的时戳值没有OldestTime值老,则根据PCIE规则继续进行比较,如果挑选出的最老候选包能超越其它拥有时戳更老但因为阻塞没有候选类型包发送的类型包发送,则调度成功,该候选包就是此次调度成功的包;否则,调度不成功;
(d)如果NP包、P包和CPL包都没有候选包,则调度不成功。
5.根据权利要求2所述的PCIE交换芯片内核,其特征在于,所述后级处理模块,进一步包括,端口输出缓存管理模块和后级调度模块,其中,
所述端口输出缓存管理模块,将来自同一输入端口的数据包也分成NP、P和CPL类型,分别保存在其随机存储器NP队列、P队列和CPL队列中,此种队列称为源队列,上述三个同输入端口的队列在端口输出缓存管理模块也共享一个随机存储器,来自不同输入端口的包占据不同的随机存储器;接收所述后级调度模块发送的调度成功数据包的队列编号,并将调度成功数据包发送给端口控制器输出侧接口;
所述后级调度模块,根据所述端口输出缓存管理模块的队列信息和端口控制器输出侧接口的拥塞反压信息,对所述端口输出缓存管理模块的队列进行输出调度,并将调度成功数据包的队列编号发送给所述端口输出缓存管理模块,后者将调度成功的数据包发送到端口控制器输出侧接口。
6.根据权利要求5所述的PCIE交换芯片内核,其特征在于,所述后级调度模块,针对同输入端的NP队列、P队列和CPL队列,挑选出一个时戳最老的数据包;如果端口控制器输出侧没有拥塞,针对同输入端的三个队列NP、P和CPL,挑选出一个时戳最老的数据包;在每个输出端口,最多可以得到n个不同输入源的时戳最老的数据包;如果端口控制器输出侧发生拥塞,端口输出缓存管理模块有一类或两类数据包因为收到端口控制器输出侧接口发送的拥塞反压信号被阻塞,如果被阻塞的某类型数据包是所有三个同源NP队列、P队列和CPL队列中队首包时戳最老的,则从没有被阻塞的队列中选择一个符合PCIE排序规则要求,并且能先于被阻塞的最老时戳报文发送的数据包,作为候选包,可能选择到0个或1个候选包;对于来自n个不同输入端口的队列,最多可以挑选出n个不同源候选包;如果被阻塞的数据包类型的队首数据包不是其同源队列中时戳最老的数据包,就不会影响该同源NP队列、P队列和CPL队列中最老数据包的选择,此时,对于来自n个不同输入端口的队列,最多可以挑选出n个不同源候选包;
针对上述挑选的最多n个不同源候选包,需要根据候选包的描述符信息对n个候选包再进行调度,调度方法包括加权轮转调度、固定轮转调度或最老数据包调度,后级调度模块可选此三种调度方法中的任何一种进行输出调度;后级调度模块将调度成功数据包的队列编号发送给端口输出缓存管理模块,后者将选中的数据包发送到端口控制器输出侧接口;
如果端口控制器输出侧接口给输出缓存管理模块的NP、P和CPL三类数据包都发送拥塞的反压信号,则后级调度模块暂停对端口输出缓存管理模块队列数据的调度,直到一个或一个以上类型数据包队列不再拥塞后,再进行调度。
7.一种PCIE交换芯片内核工作方法,采用权利要求1-6所述的PCIE交换芯片内核,其特征在于,包括以下步骤:
1)前级处理模块读取数据包,并将不同类型的数据包分别归入不同队列;
2)根据队列信息和后级处理模块的队列拥塞反压信息,前级处理模块对队列进行输出调度,并将调度成功数据包及数据包的描述符信息发送到后级处理模块,只有含有完整数据包的队列才有资格参与调度;
3)后级处理模块将来自不同输入端口的数据包进行分类并分别保存在不同队列中,并根据对应的队列信息和队列拥塞反压信息,对队列进行输出调度,调度成功的数据包被发送到端口控制器输出侧接口。
8.根据权利要求7所述的PCIE交换芯片内核工作方法,其特征在于,所述步骤1),进一步包括:
端口接收处理模块从端口控制器输入侧读取数据包,用时戳记录每个数据包进入端口接收处理模块的时间,同时查询路由表,得到数据包的输出端口;
将读取的数据包、提取的数据包类型、数据包的请求者身份标识ID编号、宽松排序属性位、基于请求者ID排序属性位、完成包的Tag标记、数据包的输出端口编号和数据包时戳发送给输入端口缓存管理模块;
根据数据包的类型以及输出端口编号将数据包分别归入对应不同输出端口和包类型的虚拟输出队列;
所述数据包的类型,包括NP数据包、P数据包和CPL数据包;
所述NP数据包、所述P数据包和所述CPL数据包分别归入NP队列、P队列和CPL队列。
9.根据权利要求7所述的PCIE交换芯片内核工作方法,其特征在于,所述步骤2),进一步包括,
在某个调度周期,如果没有任何一个队列接收到拥塞信息,则从NP类型包虚拟输出队列中选择一个时戳最老的NP包、从P类型包虚拟输出队列中选择一个时戳最老的P包、从CPL类型包虚拟输出队列中选择一个时戳最老的CPL包,这些被选中NP包、P包 和CPL包再次进行时戳比较,选择一个时戳最老到达的数据包发送到后级处理模块;如果有一个或多个队列接收到拥塞信息,则禁止收到拥塞信息的队列发包到后级处理模块,收到拥塞信息的队列被阻塞,并进行如下处理:
(a)如果被阻塞的某类型数据包的一个或多个队列的队首数据包是时戳最老的该类型数据包,按照PCIE协议要求,如果该类型数据包后到的可以超越先到达的包发送,则从所有未被阻塞的该类型包中选择一个符合PCIE排序规则要求的能先于被阻塞队列发送的时戳最老数据包,作为候选包;保存该类型包所有队列中时戳最老的数据包的时戳;
(b)如果被阻塞的某类型数据包的一个或多个队列的队首数据包不是该类型数据包中时戳最老数据包,则从该类型所有数据包队列中挑选出时戳最老的数据包,作为候选包;
(c)将所有含有完整数据包的并且被阻塞的所有队列中最老数据包的时戳记为OldestTime。
10.根据权利要求7所述的PCIE交换芯片内核工作方法,其特征在于,所述步骤2),进一步包括,
从NP数据包、P数据包和CPL数据包候选包中,按如下方式再选择一个符合PCIE排序规则的时戳最老数据包:
(a)如果NP包、P包和CPL包都有候选包,并且每个候选包都是其同类型包中时戳最老的包,则只需要从这些候选包中选择一个时戳最老的数据包;
(b)如果NP包、P包和CPL包都有候选包,但由于队列阻塞,并不是每个候选包都是其同类型包中时戳最老的,先从3个候选包中挑选出最老候选包,然后和OldestTime值进行比较;如果挑选出的最老候选包的时戳老于OldestTime值,则调度成功,最老候选包就是此次调度成功的包;如果挑选出的最老候选包的时戳值没有OldestTime值老,则根据PCIE排序规则进行进一步比较,如果挑选出的最老候选包能超越OldestTime值对应的包类型发送,则调度成功,最老候选包就是此次调度成功的包;否则,调度不成功;
(c)如果NP包、P包和CPL包不都有候选包,则从候选包中挑选一个时戳最老的候选包;如果挑选出的最老候选包的时戳老于OldestTime值,则调度成功,最老候选包就是此次调读成功的包;如果挑选出的最老候选包的时戳值没有OldestTime值老,则根据PCIE规则继续进行比较,如果挑选出的最老候选包能超越其它拥有时戳更老但因为阻塞没有候选类型包发送的类型包发送,则调度成功,该候选包就是此次调度成功的包;否则,调度不成功;
(d)如果NP包、P包和CPL包都没有候选包,则调度不成功。
11.根据权利要求7所述的PCIE交换芯片内核工作方法,其特征在于,所述步骤3),进一步包括,
由来自同一输入端口的数据包构成的NP队列、P队列和CPL队列互称为同源队列;
根据端口输出缓存管理模块的队列信息,如果端口控制器输出侧没有拥塞,针对同输入端的三个同源队列NP、P和CPL,挑选出一个时戳最老的数据包。
12.根据权利要求11所述的PCIE交换芯片内核工作方法,其特征在于,所述队列信息,包括,每个队列是否存在完整数据包、有完整数据包存在的各队列队首时戳、每个队列队首数据包的请求者身份标识ID编号、宽松排序属性位、基于请求者ID排序属性位和完成包的标记。
13.根据权利要求7所述的PCIE交换芯片内核工作方法,其特征在于,所述步骤3),进一步包括,
如果端口控制器输出侧没有拥塞,后级调度模块从来自同一输入端口的三个队列NP、P和CPL中,挑选出一个时戳最老的数据包;
在每个输出端口,最多可以得到n个不同输入源的时戳最老的数据包,作为候选数据包;
如果端口控制器输出侧发生拥塞,端口输出缓存管理模块有一类或两类数据包因为收到端口控制器输出侧的拥塞反压信号被阻塞,如果被阻塞的一类或两类型数据包是来自同源NP队列、P队列和CPL队列中队首包时戳最老的,则从没有被阻塞的来自同入端口的队列中选择一个符合PCIE排序规则要求,并且能先于被阻塞的最老时戳报文发送的数据包,作为候选包,可能找到0个或1个,对于来自n个不同输入端口的队列,最多可以挑选出n个不同源候选包;如果被阻塞的数据类型的队首数据包不是同源队列中时戳最老的数据包,就不会影响该同源NP队列、P队列和CPL队列中最老数据包的选择,此时,对于来自n个不同输入端口的队列,最多可以挑选出n个不同源候选包;
针对上述挑选的最多n个不同源候选包,需要根据候选包的包描述符提供的包相关信息对n个候选包再进行调度,调度方法包括加权轮转调度、固定轮转调度或最老数据包调度,后级调度模块可选此三种调度方法中的任何一种进行输出调度;后级调度模块将调度成功数据包的队列编号发送给端口输出缓存管理模块,后者将选中的数据包发送到端口控制器输出侧接口;
如果端口控制器输出侧接口给输出缓存管理模块的NP、P和CPL三类数据包都发送拥塞的反压信号,则后级调度模块暂停对端口输出缓存管理模块队列数据的调度,直到一个或一个以上类型数据包队列不再拥塞后,再进行调度。
14.一种PCIE交换芯片,其特征在于,所述PCIE交换芯片,包括权利要求1-6任一项所述的PCIE交换芯片内核。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811600121.4A CN109684269B (zh) | 2018-12-26 | 2018-12-26 | 一种pcie交换芯片内核及工作方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811600121.4A CN109684269B (zh) | 2018-12-26 | 2018-12-26 | 一种pcie交换芯片内核及工作方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109684269A CN109684269A (zh) | 2019-04-26 |
CN109684269B true CN109684269B (zh) | 2020-06-02 |
Family
ID=66188560
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811600121.4A Active CN109684269B (zh) | 2018-12-26 | 2018-12-26 | 一种pcie交换芯片内核及工作方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109684269B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112073325B (zh) * | 2019-06-10 | 2023-05-12 | 阿里巴巴集团控股有限公司 | 数据拥塞控制及带宽预估方法 |
CN110688332B (zh) * | 2019-09-12 | 2021-01-15 | 无锡江南计算技术研究所 | 一种面向高速消息传输的pcie数据传输系统及计算机 |
CN111092829B (zh) * | 2019-12-09 | 2022-04-01 | 昆高新芯微电子(江苏)有限公司 | 一种基于交换架构的多核交换芯片及其数据传输方法 |
CN111092830B (zh) * | 2019-12-11 | 2022-01-11 | 成都华大九天科技有限公司 | 一种pcie交换芯片端口配置系统和方法 |
CN111526097B (zh) * | 2020-07-03 | 2020-10-30 | 新华三半导体技术有限公司 | 一种报文调度方法、装置及网络芯片 |
CN113157510B (zh) * | 2021-04-25 | 2023-02-28 | 海光信息技术股份有限公司 | 高速串行计算机扩展总线事务排序规则测试方法及装置 |
CN116055422A (zh) * | 2022-06-29 | 2023-05-02 | 海光信息技术股份有限公司 | 一种控制数据包发送顺序的装置以及方法 |
CN117692535B (zh) * | 2024-02-04 | 2024-04-23 | 北京数渡信息科技有限公司 | 一种PCIe协议报文保序装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103098428A (zh) * | 2012-10-27 | 2013-05-08 | 华为技术有限公司 | 一种实现pcie交换网络的报文传输方法、设备、系统和存储介质 |
CN108833299A (zh) * | 2017-12-27 | 2018-11-16 | 北京时代民芯科技有限公司 | 一种基于可重构交换芯片架构的大规模网络数据处理方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100420241C (zh) * | 2006-05-08 | 2008-09-17 | 国家数字交换系统工程技术研究中心 | 实现信息交换的系统及方法和调度算法 |
CN102480426B (zh) * | 2010-11-25 | 2014-07-09 | 迈普通信技术股份有限公司 | 基于pcie交换总线的通信方法及一种pcie交换系统 |
US9727521B2 (en) * | 2012-09-14 | 2017-08-08 | Nvidia Corporation | Efficient CPU mailbox read access to GPU memory |
CN103532807B (zh) * | 2013-10-12 | 2017-10-03 | 丁贤根 | 一种用于pcie数据服务质量管理的方法 |
US10223314B2 (en) * | 2015-08-17 | 2019-03-05 | Avago Technologies International Sales Pte. Limited | PCI express connected network switch |
CN107766270B (zh) * | 2017-10-20 | 2020-05-26 | 深圳市风云实业有限公司 | 用于PCIe设备的数据读取管理方法及装置 |
-
2018
- 2018-12-26 CN CN201811600121.4A patent/CN109684269B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103098428A (zh) * | 2012-10-27 | 2013-05-08 | 华为技术有限公司 | 一种实现pcie交换网络的报文传输方法、设备、系统和存储介质 |
CN108833299A (zh) * | 2017-12-27 | 2018-11-16 | 北京时代民芯科技有限公司 | 一种基于可重构交换芯片架构的大规模网络数据处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109684269A (zh) | 2019-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109684269B (zh) | 一种pcie交换芯片内核及工作方法 | |
US9485200B2 (en) | Network switch with external buffering via looparound path | |
US7346001B1 (en) | Systems and methods for limiting low priority traffic from blocking high priority traffic | |
US7042891B2 (en) | Dynamic selection of lowest latency path in a network switch | |
US8761204B2 (en) | Packet assembly module for multi-core, multi-thread network processors | |
US7227841B2 (en) | Packet input thresholding for resource distribution in a network switch | |
US8472457B2 (en) | Method and apparatus for queuing variable size data packets in a communication system | |
US20020118692A1 (en) | Ensuring proper packet ordering in a cut-through and early-forwarding network switch | |
US20170286157A1 (en) | Work Conserving, Load Balancing, and Scheduling | |
US7406041B2 (en) | System and method for late-dropping packets in a network switch | |
US9864633B2 (en) | Network processor having multicasting protocol | |
US6754222B1 (en) | Packet switching apparatus and method in data network | |
US9300597B2 (en) | Statistics module for network processors in virtual local area networks | |
US8873550B2 (en) | Task queuing in a multi-flow network processor architecture | |
EP2613479A1 (en) | Relay device | |
JPH08265270A (ja) | 転送路割り当てシステム | |
US20030179759A1 (en) | Method and apparatus for switching data using parallel switching elements | |
US9374303B1 (en) | Method and apparatus for processing multicast packets | |
CN107483405B (zh) | 一种支持变长信元的调度方法和调度系统 | |
US20110194450A1 (en) | Cell copy count hazard detection | |
CN117749726A (zh) | Tsn交换机输出端口优先级队列混合调度方法和装置 | |
US8976802B2 (en) | Prediction-based switch allocator | |
US7990987B2 (en) | Network processor having bypass capability | |
US20030118020A1 (en) | Method and apparatus for classification of packet data prior to storage in processor buffer memory | |
KR100787225B1 (ko) | 입력버퍼장치 및 입력버퍼장치의 제어방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: 610200 Chengdu City, Sichuan Province, Chengdu City, the Galactic Road, No. 596 scientific research complex 13 floor Patentee after: Chengdu Huada Jiutian Technology Co., Ltd Address before: 610200 Chengdu City, Sichuan Province, Chengdu City, the Galactic Road, No. 596 scientific research complex 13 floor Patentee before: CHENGDU JIUXIN MICRO TECHNOLOGY Co.,Ltd. |
|
CP01 | Change in the name or title of a patent holder |