CN116615899A - 确定性流传输方法及装置 - Google Patents

确定性流传输方法及装置 Download PDF

Info

Publication number
CN116615899A
CN116615899A CN202180003976.2A CN202180003976A CN116615899A CN 116615899 A CN116615899 A CN 116615899A CN 202180003976 A CN202180003976 A CN 202180003976A CN 116615899 A CN116615899 A CN 116615899A
Authority
CN
China
Prior art keywords
message
current
cft
dbq
traversed
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.)
Pending
Application number
CN202180003976.2A
Other languages
English (en)
Inventor
郭道荣
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
New H3C Technologies Co Ltd
Original Assignee
New H3C Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by New H3C Technologies Co Ltd filed Critical New H3C Technologies Co Ltd
Publication of CN116615899A publication Critical patent/CN116615899A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/24Traffic characterised by specific attributes, e.g. priority or QoS
    • H04L47/2441Traffic characterised by specific attributes, e.g. priority or QoS relying on flow classification, e.g. using integrated services [IntServ]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/34Source routing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/34Flow control; Congestion control ensuring sequence integrity, e.g. using sequence numbers

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请提供了确定性流传输方法及装置。通过本申请实施例,可以实现在现有尽力而为流转发的基础上增加确定性流的转发;进一步地,通过网络设备中的分发线程、DFT、CFT,保证了确定性流转发不受尽力而为流转发的影响,保证了现有尽力而为流转发和确定性流转发的相互兼容。

Description

确定性流传输方法及装置 技术领域
本申请涉及网络通信技术,特别涉及确定性流(DT:Deterministic Traffic)传输方法及装置。
背景技术
确定性网络(DetNet:Deterministic Network)可以在一个网络域内为承载的业务提供确定性业务功能。这些确定性业务功能可包括时延、丢包率等。以基于局域网实现的确定性网络即时间敏感型网络(TSN:Timesensitive Network)为例,在TSN中通过采用周期排队转发(CQF:Cyclic Queuing and Forwarding)确保转发层面上整个转发路径上的传输时延确定等。
为便于描述,确定性网络中传输的具有确定性业务功能比如时延、丢包率等的业务流称为确定性流。而针对不同于确定性流的其他业务流,结合现有转发设备比如软件转发设备或者基于交换芯片或NP实现的硬件转发设备等按照尽力而为转发的方式,可将不同于确定性流的其他业务流称为尽力而为流。
发明内容
本申请提供了确定性流传输方法、系统及装置,以实现基于分段路由SR实现指定周期排队转发CSQF的确定性流传输。
本申请实施例提供一种确定性流DT传输方法,该方法应用于网络设备,该方法包括:
通过本设备上已被唤醒的分发线程对与该分发线程相绑定的报文接收队列中的报文进行分发,以将所述报文接收队列中属于确定性流的报文分发至对应的确定性流缓存队列DBQ,将属于尽力而为流的报文分发至对应的尽力而为流缓存队列BTQ;所述报文接收队列中的报文是指通过所述网络设备本地接口接收到的来自外部的报文;
通过本设备上已被唤醒的确定性转发线程DFT将与该DFT相绑定的DBQ中的报文放入对应的确定性流队列DTQ;
通过本设备上已被唤醒的周期转发线程CFT将与该CFT相绑定的DTQ中的报文放入对应的指定周期队列CSQ,以及通过所述CFT从发送队列SQ中选择报文并通过用于转发报文的出接口进行转发;所述SQ为所述CFT对应的队列发送指针SQP当前指向的CSQ。
本申请实施例还提供了一种电子设备。该电子设备包括:处理器和机器可读存储介质;
所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
所述处理器用于执行机器可执行指令,以实现上述公开的方法的步骤。
由以上技术方案可以看出,本实施例实现了在现有尽力而为流转发的基础上增加了确定性流的转发;
进一步地,通过上述分发线程、DFT、CFT,保证了确定性流转发不受尽力而为流转发的影响,保证了现有尽力而为流转发和确定性流转发的相互兼容。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1为尽力而为转发结构示意图;
图2为本申请实施例提供的方法流程图;
图3为本申请实施例提供的确定流转发和尽力而为流转发结构示意图;
图4为本申请实施例提供的分发线程实现流程图;
图5为本申请实施例提供的DFT实现流程图;
图6为本申请实施例提供的快速转发表、OutIfInfo及SRLists关联示意图;
图7为本申请实施例提供的CFT实现流程图;
图8为本申请实施例提供的CSQP与CSQ之间的关系示意图;
图9为本申请实施例提供的SQ、RQ、TQ之间的结构示意图;
图10为本申请实施例提供的各线程交互之间的示意图;
图11为本申请实施例提供的装置结构图;
图12为本申请实施例提供的电子设备结构图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
为了使本领域技术人员更好地理解本申请实施例提供的技术方案,并使本申请实施例的上述目的、特征和优点能够更加明显易懂,下面先对基于尽力而为转发设计的转发流程进行描述:
对软件转发设备(比如中低端路由器)而言,通常是按照如图1所示的尽力而为转发方式转发报文:
如图1所示,硬件控制器(比如接口板上的控制器)在接收到报文后,会先根据报文的报文特征参数将报文存放至内存中对应的报文接收队列(RcvQueue:Receiving Queue)。可选地,以报文特征参数为报文五元组为例,则可通过对报文五元组进行哈希(Hash)运算得到运算结果,在内存中的报文接收队列中查找队列编号为该运算结果的报文接收队列,将报文存放至该查找到的报文接收队列。需要说明的是,这里只是举例描述如何根据报文的报文特征参数将报文存放至对应的内存中的报文接收队列,并非用于限定。
在一个例子中,上述硬件控制器在接收到报文后,还会触发中断控制器产生中断,以通过中断控制器产生的中断调用驱动软件(比如CPU等)中的中断处理程序唤醒至少一个尽力而为转发线程(BFT:Best-effort Forwarding Thread)。其中,该
被唤醒的BFT从相绑定的报文接收队列中取出报文,将取出的报文转换为指定结构的报文并发送至平台软件(也可称为平台接口)。
平台软件查询FIB表确定用于转发报文的出接口,并调用驱动软件的发送接口(Transmod)将报文发往该出接口对应的硬件队列进行发送。可选地,在本实施例中,被设置高优先级的硬件队列,其中的报文被优先发送。在发送报文之后,还可通过调用释放资源软件(Free Buffer Pool)进一步释放已被发送的报文占用的存储资源。
以上对按照尽力而为转发方式转发报文(也称尽力而为流)的转发流程进行了描述。
但是,目前尽力而为流的转发流程缺乏对确定性网络的支持,不能实现确定性流的转发。
基于此,本申请实施例提供了一种确定性流传输方法,其在尽力而为流转发基础上叠加了确定性流转发,保证了尽力而为流转发和确定性流转发的兼容,同时确保确定性流转发不受尽力而为流转发的影响。下面对本申请实施例提供的确定性流传输方法进行描述:
参见图2,图2为本申请实施例提供的确定性流传输方法流程图。该流程应用于网络设备。本申请实施例并不具体限定该网络设备的具体结构形式,比如可为中低端路由器等,或者可为对性能要求高,支持更多CPU核的高端路由器等,本实施例并不具体限定,以让本申请实施例具有广泛的适用性和扩展性。
如上描述,本申请实施例是在尽力而为流转发基础上叠加了确定性流转发,为保证本申请实施例提供的方法更加容易理解,下面先对为在尽力而为流转发基础上叠加确定性流转发而新增加的如下改造:
1)增加分发线程(DisThr)。确定性流对时延和抖动非常敏感,非常容易受平台业务处理比如尽力而为流转发等的影响。为了避免平台业务处理影响确定性流的转发,本申请实施例在上述网络设备新增加了分发线程。
可选地,在本实施例中,分发线程的数量根据报文接收队列的数量设置,一个分发线程至少绑定一个报文接收队列。具体地,分发线程用于对相绑定的报文接收队列中的报文进行分发,以将报文接收队列中属于确定性流的报文分发至对应的确定性流缓存队列(DBQ:Deterministic Traffic Queue),将属于尽力而为流的报文分发至对应的尽力而为流缓存队列(BTQ:Best-Effort Traffic Queue)。
可选地,DBQ和报文接收队列一一对应,比如,报文接收队列1中属于确定流的报文分发至DBQ1,报文接收队列2中属于确定性流的报文分发至DBQ2,依次类推……。DBQ用于缓存分发线程分发的属于确定流的报文。分发线程分发报文工作与平台处理属于确定流的报文的工作解耦,使分发线程处理单一,从而高效且无阻塞,同时确定属于确定性流的报文的处理具有独立性。
可选地,BTQ和报文接收队列一一对应,比如,报文接收队列1中属于尽力而为流的报文分发至BTQ1,报文接收队列2中属于尽力而为流的报文分发至BTQ2,依次类推……。BTQ用于缓存分发线程分发的属于尽力而为流的报文。分发线程分发报文工作与平台处理属于尽力而为流的报文的工作解耦,避免平台的不确定性的处理工作阻塞分发线程。
如上可见,分发线程分发报文的过程是一个无阻塞的过程,既使可能会出现平台业务处理不确定性等,分发线程仍能确保报文比如属于确定性流的报文被及时分发。
需要注意的是,为防止尽力而为流过多而导致确定性流分发不及时,在具体实现时,需要保证上述分发线程占用足够的CPU资源,比如一个分发线程尽量独占CPU核,分配给某一个分发线程的CPU核不再分配给其它线程。
2)增加确定性流转发核心模块。可选地,本申请实施例可在网络设备的驱动软件 中增加确定性流转发核心模块。在一个例子中,确定性流转发核心模块至少包括:确定性流转发线程(DFT:Deterministic Forwarding Thread)、周期性转发线程(CFT:Cycle Forwarding Thread)。
可选地,在本实施例中,DFT的数量依据DBQ的数量和确定性流负载设置。在应用中,一个DFT至少绑定一个DBQ。DFT用于将相绑定的DBQ中的报文放入对应的确定性流队列(DTQ:Deterministic Traffic Queue)。
可选地,在本实施例中,CFT的数量依据DTQ的数量和确定性流负载设置。在应用中,一个CFT绑定至少一个DTQ。CFT用于将相绑定的DTQ中的报文放入对应的指定周期队列(CSQ:Cycle Specified Queue)。可选地,在本实施例中,CFT还与至少一个接口的至少一个CSQ绑定,用于在指定周期内从指定CSQ中取出报文,并通过用于转发该报文的出接口进行转发。
3)对现有BFT进行改造:之前,BFT从报文接收队列中取出报文进行转发,而在本实施例中,BFT被改造为从相绑定的BTQ中取出报文进行转发。
4)对发送模块(TransMod:Transmitting Module)进行改造,以使发送模块提供确定性流转发(比如新增确定性流转发的硬件适配等)。可选地,在一个实施例中,在确定性流转发时,可在出接口指定属于确定性流的报文的优先级最高,以保证属于确定性流的报文优先转发,同时可实现对尽力而为流的转发进行限速。
以上简单描述了为在尽力而为流转发基础上叠加确定性流转发而新增加的改造。通过上述改造,可以实现在兼容现有尽力而为的QOS转发前提下,增加确定性流的转发,且保证确定性流转发不受尽力而为流转发的影响。图3举例示出了在图1所示框架基础上改造后的框架结构图。
基于上述改造,下面对本申请实施例提供的方法进行描述:
如图2所示,该流程可包括以下步骤:
步骤201,通过本设备上已被唤醒的分发线程对与该分发线程相绑定的报文接收队列中的报文进行分发,以将报文接收队列中属于确定性流的报文分发至对应的DBQ,将属于尽力而为流的报文分发至对应的BTQ。
这里的报文接收队列如上描述,其存放的是网络设备通过本地接口接收到的来自外部的报文。
至于分发线程如何对相绑定的报文接收队列中的报文进行分发,具体可参见下文图4举例描述的分发线程的实现流程,这里不再赘述。
在本实施例中,分发线程可通过中断被唤醒,也可通过其他方式比如轮询方式被唤醒等,本实施例并不具体限定。
步骤202,通过本设备上已被唤醒的DFT将与该DFT相绑定的DBQ中的报文放入对应的DTQ。
在本实施例中,DFT可由分发线程在适当时机唤醒,下文会有举例描述。当然,DFT也可通过其他方式被唤醒,本实施例并不具体限定。
至于DFT如何将相绑定的DBQ中的报文放入对应的DTQ,具体可参见下文图5举例描述的DFT的实现流程,这里不再赘述。
步骤203,通过本设备上已被唤醒的周期转发线程CFT将与该CFT相绑定的DTQ中的报文放入对应的指定周期队列(CSQ:Cyclic Specific Queue),以及通过所述CFT从发送队列SQ中选择报文并通过用于转发报文的出接口进行转发,SQ为CFT对应的 队列发送指针SQP当前指向的CSQ。
在本实施例中,CFT可由DFT在适当时机唤醒,下文会举例描述。当然,CFT还会通过其他方式被唤醒,比如CFT在新创建后直接默认是被唤醒、或者CFT在新创建后如果检测到指定事件,则也默认被唤醒等,本实施例并不具体限定。这里的指定事件是指CSQ中有报文需要及时转发的事件。下文会举例描述该事件,这里暂不赘述。
至于如何通过CFT将CFT相绑定的DTQ中的报文放入对应的CSQ队列,以及如何从发送队列(SQ:Sending Queue)中选择报文并通过用于转发报文的出接口进行转发,具体可参见下文图7举例描述的CFT的实现流程,这里暂不赘述。
在本实施例中,每一接口对应多个CSQ比如对应3个CSQ。其中,每个CSQ至少包括:
(1)指定周期队列描述符(CSQD:Cyclic Specific Queue Descriptors),用于描述CSQ。
(2)数据缓存块描述符队列(BDQ:Buffer Descriptor Queue)。在本实施例中,BDQ中的队列元素描述了一个数据块的信息,其可至少包括:数据所处的内存块信息、数据起始位置、数据长度等,本实施例并不具体限定。
可选地,在本实施例中,每个指定周期队列描述符可至少包括:
队列头(QH),用于指向对应的BDQ;
头部(Head),指向当前队首位置,当CSQ为空时,Head为0,表明下一个要入队的数据包占用第0个位置,每入队一个数据后Head增加1;
QLen,队列长度,标识队列能存放的报文数量,Head长度为QLen时,表明队列满。
CurBytes,当前入队列的字节数;
MaxBytes,当前队列的字节数容量。
另外,在本实施例中,CFT管理指定周期队列指针结构(Cyclic Specific Queue Pointers,简记为CSQP)。CSQP由3个成员组成:
SQP:发送队列指针(Sending Queue Pointer),SQP指向的CSQ,表示当
前周期内正在发送的CSQ(该CSQ也称发送队列SQ)。
RQP:接收队列指针(Receiving Queue Pointer),RQP指向的CSQ,表示当前周期内正在接收的CSQ(该CSQ也称接收队列RQ)。
TQP:容忍队列指针(Tolerating Queue Pointer),TQP指向的CSQ,表示RQ接收满后当前周期内容忍接收的CSQ(此时也称容忍队列TQ)。基于上面描述,图8举例示出了CSQP与CSQ之间的关系示意图。
至此,完成图2所示流程。
通过图2所示流程,本实施例实现了在现有尽力而为流转发的基础上增加了确定性流的转发;
进一步地,通过上述分发线程、DFT、CFT,保证了确定性流转发不受尽力而为流转发的影响,保证了现有尽力而为流转发和确定性流转发的相互兼容。
下面通过图4所示流程对分发线程实现流程进行描述:
参见图4,图4为本申请实施例提供的分发线程实现流程图。在本实施例中,分发 线程被设置一个对应的线程轮询标志(记为bPoll_1),初始,bPoll_1被设置为FALSE。当分发线程被唤醒时,bPoll_1此时也为FALSE。在本实施例中,分发线程可通过中断或其他方式被唤醒。
如图4所示,被唤醒的分发线程可执行以下步骤:
步骤401,分发线程按顺序遍历相绑定的报文接收队列,将当前遍历到的报文接收队列确定为当前队列,查询当前队列是否有报文,如果是,执行步骤402,如果否,执行步骤407。
步骤402,设置bPoll_1为TRUE,并遍历当前队列,将遍历到的报文确定为当前报文,当识别出当前报文属于确定性流,则执行步骤403,当识别出当前报文属于尽力而为流,则执行步骤405。
本步骤402是在查询出当前队列有报文时执行的。在当前队列有报文时,设置bPoll_1为TRUE,则表示分发线程当前进入轮询过程,为减少线程调度开销,避免唤醒操作影响分发线程的轮询,此时需要指示关闭分发线程被设置的指定功能。这里,关闭指定功能用于指示阻止分发线程进入睡眠状态。
步骤403,将当前报文放入与当前队列对应的DBQ。之后执行步骤404。
在本实施例中,对于属于确定性流的报文,其会携带确定性流属性(DetProperty:Deterministic Property)。在本实施例中,确定性流属性不是固定的,目前规范也不提供具体的指定,而是根据实际需求统筹设置,比如设置DSCP等字段的值来表征确定性流属性。本实施例并不具体限定确定性流属性。但一旦设置好确定性流属性,则应用于本步骤403,则可识别当前报文是否携带确定性流属性,如果是,则识别出当前报文属于确定性流,将当前报文放入与当前队列对应的DBQ。最终实现了属于确定性流的报文分发至DBQ。
可选地,作为一个实施例,在本实施例中,DBQ和报文接收队列一一对应,比如编号为1的报文接收队列中的报文放入编号为1的DBQ,编号为2的报文接收队列中的报文放入编号为2的DBQ,依次类推。最终依据上述DBQ和报文接收队列的对应关系,实现了将识别出的属于确定性流的当前报文放入与当前队列对应的DBQ。
步骤404,若此时上述DBQ相绑定的DFT被设置的DFT唤醒标志为False,则将该DFT唤醒标志设置为True,唤醒DFT唤醒标志为True的该DFT,之后检查当前队列中是否还存在未被遍历的报文,如果是,继续遍历该未被遍历的报文并返回步骤402中将该遍历到的报文确定为当前报文的步骤,如果否,则执行步骤407。
本实施例中,分发线程会针对每一DFT设置一个对应的DFT唤醒标志。初始,各DFT对应的DFT唤醒标志被设置为FALSE。
通过步骤404能够及时唤醒对应的DFT,以使被唤醒的DFT及时将相绑定的DBQ中的报文放入对应的DTQ,具体可参见下文DFT的流程,这里不再赘述。
需要说明的是,若此时上述DBQ相绑定的DFT被设置的DFT唤醒标志为True,则本步骤404可直接在当前队列中还存在未被遍历的报文时,遍历该未被遍历的报文,返回步骤402中将该遍历到的报文确定为当前报文的步骤,而在当前队列中不存在未被遍历的报文,则执行步骤407。
步骤405,将当前报文放入与当前队列对应的BTQ。之后执行步骤406。
可选地,作为一个实施例,在本实施例中,BTQ和报文接收队列一一对应,比如编号为1的报文接收队列中的报文放入编号为1的BTQ,编号为2的报文接收队列中的报 文放入编号为2的BTQ,依次类推。最终,依据上述BTQ和报文接收队列的对应关系,实现了将识别出的属于尽力而为流的当前报文放入与当前队列对应的BTQ。
步骤406,若此时上述BTQ相绑定的BFT被设置的BFT唤醒标志为False,则将该BFT唤醒标志设置为True,唤醒BFT唤醒标志为True的BFT,并检查当前队列中是否还存在未被遍历的报文,如果是,遍历该未被遍历的报文,返回步骤401中将该遍历到的报文确定为当前报文的步骤,如果否,执行步骤407。
通过步骤406能够及时唤醒上述BTQ相绑定的BFT,以使被唤醒的BFT及时转发BTQ中的报文。
步骤407,若当前队列无报文或者当前队列中不存在未被遍历的报文,则检测分发线程相绑定的所有报文接收队列中还存在未被遍历的报文接收队列,如果是,继续遍历分发线程相绑定的且未被遍历的其它报文接收队列,并返回步骤401中将当前遍历到的报文接收队列确定为当前队列的步骤,否则,执行步骤408。
步骤408,针对DFT唤醒标志为TRUE的DFT,唤醒该DFT,并将该DFT的DFT唤醒标志设置为FALSE;以及,针对BFT唤醒标志为TRUE的BFT,唤醒该BFT,并将该BFT的BFT唤醒标志设置为FALSE。之后执行步骤409。
这里之所以执行步骤408,是为了唤醒之前已唤醒但在分发线程遍历报文接收队列过程中进入睡眠的DFT和BFT,保证确定性流和尽力而为流均被及时转发。当然,若DFT唤醒标志为TRUE的DFT当前未进入睡眠(比如还在运行状态),则本步骤408针对DFT唤醒标志为TRUE的DFT,直接将该DFT的DFT唤醒标志设置为FALSE即可。BFT唤醒标志为TRUE的BFT原理类似,不再赘述。
步骤409,若bPoll_1为TRUE,则设置bPoll_1为False,并返回上述步骤401,若bPoll_1为False,则开启上述指定功能,指定功能用于指示分发线程等待被唤醒。
至此,完成图4所示流程。
通过图4所示流程描述了分发流程的实现流程。
下面通过图5所示流程对DFT实现流程进行描述:
参见图5,图5为本申请实施例提供的DFT实现流程图。在本实施例中,DFT可由分发线程唤醒(具体见上述图4所示流程)。在本实施例中,DFT也可通过其他方式被唤醒,这里不具体限定。在本实施例中,被唤醒的DFT被设置一个对应的线程轮询标志(记为DFT轮询标志),其中,当DFT被唤醒时,此时DFT轮询标志为FALSE。
如图5所示,被唤醒的DFT可执行以下步骤:
步骤501,DFT按顺序遍历相绑定的DBQ,将当前遍历到的DBQ确定为当前DBQ,查询当前DBQ是否有报文,如果是,执行步骤502,如果否,执行步骤505。
步骤502,设置DFT轮询标志为TRUE,并遍历当前DBQ,将遍历到的报文确定为当前DBQ报文,调用已设置的报文重复消除和排序(PREOF:Packet Replication,Elimination,and Ordering Functions)功能识别出当前DBQ报文不为重复报文时生成报文输出链。
本步骤502是在查询出当前DBQ有报文时执行的。在当前DBQ有报文时,则设置DFT轮询标志为TRUE,则表示DFT当前进入轮询过程。为减少线程调度开销,避免唤醒操作影响DFT的轮询,此时需要指示关闭DFT被设置的指定功能。这里,关闭指定功能用于指示阻止DFT进入睡眠状态。
在本实施例中,DFT被设置了PREOF功能。基于PREOF功能可识别出当前 DBQ报文是否为重复报文。其中,PREOF功能可用于识别出当前DBQ报文与之前已调用该PREOF功能处理的报文是否为重复报文,当识别出当前DBQ报文为重复报文时,则丢弃当前DBQ报文,并在当前DBQ中还存在未被遍历的报文时,继续遍历该未被遍历的报文,并返回步骤502中将该遍历到的报文确定为当前DBQ报文的步骤。可选地,基于PREOF功能识别当前DBQ报文是否为重复报文有很多方式,比如,识别当前DBQ报文的报文序列号是否小于已记录的该当前DBQ报文所属业务流对应的最大序列号,如果是,则识别当前DBQ报文为重复报文,等等,本实施例并不具体限定。
可选地,在本实施例中,假若基于PREOF功能识别出当前DBQ报文不为重复报文,则可调用PREOF功能生成报文输出链。至于如何调用PREOF功能生成报文输出链,下文会举例描述,这里暂不赘述。
本实施例中,在生成报文输出链后,可将报文输出链中的每一报文进行报文封装并放入用于转发该报文的出接口对应的DTQ,具体可参见步骤503。
步骤503,遍历报文输出链中的报文,将遍历到的报文记为目标报文,对目标报文进行封装,将封装后的目标报文放入用于转发该目标报文的出接口对应DTQ,检查目标报文是否为报文输出链中最后一个未被遍历的报文,如果是,则执行步骤504,如果否,遍历报文输出链中未被遍历的报文,返回将遍历到的报文记为目标报文的步骤。
可选地,在本实施例中,每个出接口设置一个对应的DTQ。为了方便描述,比如出接口1对应的DTQ记为DTQ1,出接口2对应的DTQ记为DTQ2,依次类推。基于此,在确定用于转发目标报文的出接口后,对目标报文进行封装并将封装后的目标报文放入用于转发该目标报文的出接口对应的DTQ,比如确定用于转发目标报文的出接口为出接口1,则将封装后的目标报文放入用于转发该目标报文的出接口对应的DTQ即DTQ1。
至于如何对目标报文进行封装,下文会举例描述,这里暂不赘述。
最终通过上述步骤503实现了将DBQ中的报文放入DTQ。
步骤504,若此时上述DTQ相绑定的CFT被设置的CFT唤醒标志为False,则将该CFT唤醒标志设置为True,唤醒CFT唤醒标志为True的该CFT,检查当前DBQ中是否还存在未被遍历的报文,如果是,继续遍历该未被遍历的报文并返回步骤502中将该遍历到的报文确定为当前DBQ报文的步骤,如果否,执行步骤505。
本实施例中,DFT会针对每一CFT设置一个对应的CFT唤醒标志。初始,各CFT对应的CFT唤醒标志被设置为FALSE。
通过步骤504能够及时唤醒上述DTQ相绑定的CFT,以使被唤醒的CFT及时将绑定的DTQ中的报文放入对应的CSQ队列,以及从SQ中选择报文并通过报文的出接口进行转发,具体见下文图7所示流程。
需要说明的是,假若上述DTQ相绑定的CFT的CFT唤醒标志为True,则本步骤504可直接在当前DBQ中还存在未被遍历的报文时,继续遍历该未被遍历的报文并返回步骤502中将该遍历到的报文确定为当前DBQ报文的步骤,而在当前DBQ中不存在未被遍历的报文时,执行步骤505。
步骤505,若当前DBQ无报文或者当前DBQ中不存在未被遍历的报文,则检查DFT相绑定的所有DBQ中是否还存在未被遍历的DBQ,如果是,继续遍历该未被遍历的DBQ并返回步骤501中将当前遍历到的DBQ确定为当前DBQ的步骤;否则,执行步骤506。
步骤506,针对CFT唤醒标志为TRUE的CFT,唤醒该CFT,并将该CFT的 CFT唤醒标志设置为FALSE。之后执行步骤507。
这里之所以执行步骤506,是为了唤醒之前已唤醒但在DFT遍历DBQ过程中进入睡眠的CFT,保证确定性流转发的可靠性。
步骤507,若CFT轮询标志为TRUE,则设置CFT轮询标志为False,并返回上述步骤501,若CFT轮询标志为False,则开启上述指定功能以指示DFT等待被唤醒。
至此,完成图5所示流程。
通过图5所示流程描述了DFT的实现流程。
下面对图5所示流程中如何调用PREOF功能生成报文输出链进行描述:
可选地,作为一个实施例,调用PREOF功能生成报文输出链举例可包括:
步骤a11,识别当前DBQ报文是否为乱序报文,如果否,执行步骤a12,如果是,执行步骤a13。
可选地,在本实施例中,识别当前DBQ报文是否为乱序报文有很多实现方式,比如识别当前DBQ报文所属的业务流,发现当前DBQ报文的报文序列号大于已记录的通过调用PREOF功能处理的属于上述业务流的报文的最大序列号,则在当前DBQ报文的报文序列号与上述最大序列号不相邻时确定当前DBQ报文为乱序报文,否则,确定当前DBQ报文不为乱序报文。
步骤a12,将当前DBQ报文放入上述报文输出链。
本步骤a12是在识别出当前DBQ报文不为乱序报文的前提下执行的。一旦识别出当前DBQ报文不为乱序报文,则可直接将当前DBQ报文放入上述报文输出链,同时进一步将已记录的上述最大序列号更新为当前DBQ报文的报文序列号,以便于判断后续的DBQ报文是否为乱序报文。
步骤a13,确定当前DBQ报文所属的业务流,若当前DBQ报文满足条件,所述条件是指当前DBQ报文与已记录的属于所述业务流且在设定时间窗口内通过调用PREOF功能处理的至少一个报文成功排序,则将当前DBQ报文、已记录的与所述当前DBQ报文成功排序的至少一个报文、以及已记录的属于所述业务流且在所述设定时间窗口之外调用PREOF功能处理但还未放入报文输出链的报文放入所述报文输出链,若当前DBQ报文不满足所述条件,则将已记录的属于上述业务流且在上述设定时间窗口之外调用PREOF功能处理但还未放入报文输出链的报文放入上述报文输出链。
本步骤a13是在识别出当前DBQ报文为乱序报文的前提下执行的。一旦识别出当前DBQ报文为乱序报文,则识别当前DBQ报文所属的业务流(具体业务流信息可携带在报文中),之后查找已记录的属于上述业务流且在设定时间窗口内通过调用PREOF功能处理的至少一个报文是否能够成功与当前DBQ报文进行排序(即该至少一个报文的序列号与当前DBQ报文的序列号是否连续),比如当前DBQ报文的报文序列号为8,查找出已记录的属于上述业务流且在设定时间窗口内通过调用PREOF功能处理的一个报文的报文序列号为7,则表示已记录的属于上述业务流且在设定时间窗口内通过调用PREOF功能处理的至少一个报文成功与当前DBQ报文进行排序。需要说明的是,上述设定时间窗口可根据实际需求设置,比如设置距离当前时间最近的10us等,本实施例并不具体限定。
作为一个实施例,假若当前DBQ报文与已记录的属于上述业务流且在设定时间窗口内通过调用PREOF功能处理的至少一个报文成功排序,则将当前DBQ报文、已记录的与当前DBQ报文成功排序的至少一个报文、以及已记录的属于上述业务流且在上 述设定时间窗口之外调用PREOF功能处理但还未放入报文输出链的报文放入报文输出链。最终生成了报文输出链。
作为一个实施例,假若当前DBQ报文与已记录的属于上述业务流且在设定时间窗口内通过调用PREOF功能处理的至少一个报文并不能成功排序,则可将已记录的属于上述业务流且在上述设定时间窗口之外调用PREOF功能处理但还未放入报文输出链的报文放入报文输出链。最终生成了报文输出链。需要说明的是,假若当前DBQ报文与已记录的属于上述业务流且在设定时间窗口内通过调用PREOF功能处理的至少一个报文并不能成功排序,则可选地,则可进一步记录当前DBQ报文、以及调用PREOF功能处理当前DBQ报文的时间戳。
最终,通过上述步骤a11至步骤a13实现了报文输出链的生成。
下面对对上述步骤503中如何对目标报文进行封装进行描述:
可选地,本实施例中,上述步骤503中对目标报文进行封装可包括:
步骤b11,判断目标报文是否是边缘接入包,如果是,执行步骤b12,否则,执行步骤b13。
可选地,在本实施例中,可依赖于目标报文是否被封装网络信息判断目标报文是否是边缘接入包,比如,目标报文未被封装网络信息比如SR信息等,则确定目标报文是边缘接入包,否则,确定目标报文不是边缘接入包。需要说明的是,这里只是举例描述如何判断目标报文是否是边缘接入包,并非用于限定。
步骤b12,对目标报文进行第一类封装。
本步骤b12是在确定目标报文是边缘接入包的前提下执行的。当确定目标报文是边缘接入包,则如步骤b12描述,可对目标报文进行第一类封装。
可选地,在对目标报文进行第一类封装时,本实施例引入一个新的概念:快速转发表(FastFwdTbl)。作为一个实施例,快速转发表可通过对确定性网络中的路由信息进行转化而得到。DFT通过查询表快速转发表可以很快获得目标报文的出接口,从而找到相关的DTQ(也即该出接口对应的DTQ)。
在本实施例中,通过快速转发表转发确定性流,其目的是与尽力而为转发的流程相分离,避免确定性流受尽力而为流转发的影响,缩短确定性流转发流程,加快确定性流转发速度,为确定性流转发提供保障。
在具体实现时,快速转发表相对于尽力而为的FIB表,容量更小,查找更快,查找表的开销相差不大,从而减小不确定性因素。
作为一个实施例,可选地,快速转发表可至少包括:Destination IP(目的IP地址)、Source IP(源IP地址)、Destination Port(目的端口)、Source Port(源端口)、Proto(协议)、差分服务代码点(DSCP:Differentiated Services Code Point)、出接口(OutIf:Out Interface)、隧道索引(LIndex)。
基于上述快速转发表,则步骤b12举例可为:基于目标报文携带的报文特征信息比如源IP地址、目的IP地址等,在快速转发表查找到OutIf,以及LIndex;之后在已创建的所有出接口信息(OutIfInfo)中查找OutIf对应的OutIfInfo;这里,OutIfInfo至少包括出接口信息比如MAC地址、基于出接口的段路由列表(SRLists)的指针(这里以段路由SR为例描述);之后再根据LIndex及SRLists指针获取对应的SRList,基于SRList、OutIfInfo中的MAD地址封装目标报文,最终实现了目标报文的第一类封装。图6举例示出了快速转发表与OutIfInfo及SRLists关联关系示意图。
步骤b13,对目标报文进行第二类封装。
本步骤b13是在确定目标报文不是边缘接入包的前提下执行的。当确定目标报文不是边缘接入包,则意味着目标报文已被执行上述第一类封装。基于此,对应上述步骤b12举例示出的第一类封装,则本步骤b13中,可根据目标报文被封装的SRLists中的SID确定OutIf,通过OutIf查询到对应的OutIfInfo(比如至少包括MAC地址等);根据获取的OutIfInfo(比如至少包括MAC地址等)对目标报文执行封装更换,比如将已封装的二层头中的源MAC地址替换为该OutIfInfo中出接口的MAC地址等,本实施例并不具体限定。
最终通过上述步骤b11至步骤b13实现了如何对步骤503中的目标报文进行封装。
下面通过图7所示流程对CFT实现流程进行描述:
参见图7,图7为本申请实施例提供的CFT实现流程图。在本实施例中,CFT可按照如上图5所示流程中步骤504或步骤506的描述被DFT唤醒。作为另一实施例,当在网络设备上新创建CFT时,也可直接唤醒CFT被唤醒,比如当在网络设备上新创建CFT时,若检测到该CFT相绑定的CSQ中有报文需要及时转发,则可直接唤醒该CFT。
在描述图7所示流程之前,先针对每一CFT的设置进行描述:
作为一个实施例,可针对每一CFT设置对应的三个局部变量:CFT_Jiffies、CFT_prev_Jiffies、CFT_Rcv_Jiffies。
其中,CFT_Jiffies可指示当前正在处理的周期,可记为当前处理周期变量。CFT_prev_Jiffies用于指示历史周期,可记为历史周期变量。CFT_Rcv_Jiffies用于记录当前处理接收的周期,可记为报文接收周期变量。
基于上面描述,如图7所示,该流程可包括以下步骤:
步骤701,CFT在被唤醒后,读取CSQF_Jiffies的当前值,将CFT_Jiffies更新为该读取的CSQF_Jiffies的当前值。之后执行步骤702。
步骤702,检查报文发送周期是否发生更新,如果是,执行步骤703,如果否,执行步骤704。
如上描述,CFT_Jiffies表示当前处理周期变量,CFT_Prev_Jiffies表示历史周期变量,因此,基于CFT_Jiffies、CFT_Prev_Jiffies可确定报文发送周期是否发生更新,比如,当CFT_Jiffies和CFT_Prev_Jiffies不等时,表示已执行了周期循环,报文发送周期已发生更新,比如周期从第一周期循环到第二周期;而当CFT_Jiffies和CFT_Prev_Jiffies相等时,表示报文发送周期没有发生更新。
步骤703,重新调整CFT对应的CSQP,并将CFT_Prev_Jiffies的取值更新为CFT_Jiffies的当前值。之后执行步骤704。
如前描述,CSQP至少包括:SQP、RQP、TQP,则可选地,作为一个实施例,重新调整后的SQP指向的CSQ的编号,是根据CFT_Jiffies与CFT绑定的CSQ的总数量d进行模运算得到的余数确定。这里可将该余数记为Rem。
重新调整后的RQP指向的CSQ的编号,是根据Rem与指定抖动周期数Jitter之和对上数d进行模运算得到的结果确定。比如,重新调整后的RQP指向的CSQ的编号通过以下公式得到:(Rem+Jitter)mod d。
重新调整后的TQP指向的CSQ的编号,可据如下公式确定:(d-1+Rem-Jitter) mod d。
需要说明的是,上述重新调整CFT对应的CSQP的方式只是一种举例,并非用于限定。
步骤704,遍历SQ中的报文,将遍历到的报文确定为当前SQ报文,将当前SQ报文发送至用于转发当前SQ报文的出接口进行转发,之后,检查SQ中是否还存在未被遍历的报文,如果是,继续遍历该未被遍历的报文并返回本步骤704中将该遍历到的报文确定为当前SQ报文的步骤,如果否,执行步骤705。
步骤705,遍历CFT相绑定的DTQ,将遍历到的DTQ确定为当前DTQ,查询当前DTQ是否有报文,如果是,执行步骤706,如果否,执行步骤708。
本步骤705是在SQ中不存在未被遍历的报文(也即SQ为空)时执行的。
步骤706,将CFT_Rcv_Jiffies的取值更新为CSQF_Jiffies的当前值,遍历当前DTQ,将遍历到的报文确定为当前DTQ报文,依据当前DTQ报文携带的指定周期队列(Cycle)参数确定当前DTQ报文对应的目标CSQ。之后执行步骤707。
基于如上描述的CSQF_Jiffies、CFT_Rcv_Jiffies,这里将CFT_Rcv_Jiffies的取值更新为CSQF_Jiffies的当前值,其目的是用于控制CFT线程及时执行,减少调度时延。
在本实施例中,当前DTQ报文携带的指定周期队列(Cycle)参数,该Cycle参数指示了目标CSQ,基于此,基于Cycle参数的指示很容易确定当前DTQ报文对应的目标CSQ。
步骤707,若目标CSQ处于SQ和RQ之间,则将当前DTQ报文放入RQ,若目标CSQ处于TQ和SQ之间,则将当前DTQ报文放入TQ,若目标CSQ处于RQ和TQ之间,则将当前DTQ报文放入目标CSQ;之后,检查当前DTQ中是否还存在未被遍历的报文,如果是,继续遍历该未被遍历的报文并返回步骤706中将该遍历到的报文确定为当前DTQ报文的步骤,如果否,执行步骤708。
在本实施例中,当目标CSQ处于SQ和RQ之间,则表明当前DTQ报文可能是延迟到达,为保证延迟到达的当前DTQ报文等待少的时间被转发,则可将当前DTQ报文放入RQ。而当目标CSQ处于TQ和SQ之间,则表明当前DTQ报文可能是提前到达,为保证其他报文及时转发,则可限制提前到达的当前DTQ报文等待比较多的时间被转发,即将当前DTQ报文放入TQ。图9举例示出了SQ、RQ、TQ之间的结构。
步骤708,检查CFT相绑定的所有DTQ中是否还存在未被遍历的DTQ,如果是,继续遍历未被遍历的DTQ并返回步骤705中将遍历到的DTQ确定为当前DTQ,否则,执行步骤709。
步骤709,检测CFT相绑定的CSQ中是否有报文需要及时转发的事件,
如果否,则CFT进入睡眠并等待被唤醒,如果是,返回执行上述步骤701。
这里,所述报文需要及时转发的事件依据上述CFT_Jiffies和CFT_Rcv_Jiffies确定;可选地,当CFT_Jiffies的取值与CFT_Rcv_Jiffies的取值之差小于或等于指定差时,确定有报文需要及时转发的事件,否则,确定不存在报文需要及时转发的事件。这里,指定差预先设置,比如可以预先设置为10个周期(上述定时器产生中断的周期)等,本实施例并不具体限定。
至此,完成图7所示流程。
通过图7描述了CFT被唤醒后执行的流程。
以上对分发线程、DFT、CFT被唤醒后执行的流程进行举例描述,至于BFT,其在被唤醒之后,即可直接从BTQ中获取报文并转发至用于该报文的出接口进行转发,这里不再详述。
可选地,在本实施例中,可保证可靠性,可优选以下限制:
1)针对每个DBQ,一般只对应一个分发线程,基于前面描述DBQ与报文接收队列的对应关系,则最终可实现DBQ、分发线程、报文接收队列一一对应,每一分发线程负责将报文接收队列中属于确定性流的报文分发至该分发线程对应的DBQ。
2)针对DBQ,一个DBQ一般只与一个DFT绑定。
3)针对DTQ,一个DTQ一般只由一个DFT负责处理其入队的报文,并绑定一个CFT负责处理从该DTQ出去的报文。
4)针对CSQ,一个CSQ一般只由一个CFT负责处理其入队的报文,并由同一个CFT负责处理从该CSQ出去的报文。
基于上面描述,图10举例示出了基于上述限制各线程之间的操作。在图10中举例示出一个端口(interface)与一个CFT关联,经由每一端口输出的报文由该端口关联的CFT调度。
另外,在本实施例中,DBQ和DTQ被设计为循环队列,以实现无锁操作,提高并发性;
还需要说明的是,DisThr、DFT、CFT为实时优先级调度线程;其中,DFT、CFT线程不与其它实时优先级线程共享CPU核,也不与长时间占用CPU资源不释放的线程共用CPU核。
至此,完成本申请实施例提供的方法描述。下面对本申请实施例提供的装置进行描述:
参见图11,图11为本申请实施例提供的装置结构图。该装置应用于网络设备,该装置可包括:
分发线程,在被唤醒后,对相绑定的报文接收队列中的报文进行分发,以将所述报文接收队列中属于确定性流的报文分发至对应的DBQ,将属于尽力而为流的报文分发至对应的BTQ;所述报文接收队列中的报文是指通过所述网络设备本地接口接收到的来自外部的报文;
确定性转发线程DFT,在被唤醒后将相绑定的DBQ中的报文放入对应的DTQ;
周期转发线程CFT,在被唤醒后,将相绑定的DTQ中的报文放入对应的指定周期队列CSQ,以及从发送队列SQ中选择报文并通过用于转发报文的出接口进行转发;所述SQ为所述CFT对应的队列发送指针SQP当前指向的CSQ。
可选地,所述分发线程对相绑定的报文接收队列中的报文进行分发包括:
遍历与所述分发线程相绑定的报文接收队列,将当前遍历到的报文接收队列确定为当前队列,查询所述当前队列是否有报文;
若当前队列有报文,则遍历当前队列,将遍历到的报文确定为当前报文,若当前报文属于确定性流,则将当前报文放入与当前队列对应的DBQ,若当前报文属于尽力而为流,则将当前报文放入与当前队列对应的BTQ;之后,在当前队列中还存在未被遍历的报文时,继续遍历该未被遍历的报文并返回将该遍历到的报文确定为当前报文的步骤;
若当前队列无报文或者当前队列中不存在未被遍历的报文,在所述分发线程相绑定的所有报文接收队列中还存在未被遍历的报文接收队列时,继续遍历所述分发线程相绑定的且未被遍历的其它报文接收队列,并返回将当前遍历到的报文接收队列确定为当前队列的步骤。
可选地,所述分发线程被设对应的线程轮询标志,线程轮询标志在所述分发线程被唤醒时已被置为False;
所述分发线程在查询当前队列有报文时,进一步设置所述线程轮询标志为True,以指示关闭所述分发线程被设置的指定功能;关闭所述指定功能用于指示阻止所述分发线程进入睡眠状态;
所述分发线程在相绑定的报文接收队列均被遍历后,进一步在所述线程轮询标志为True,则设置所述线程轮询标志为False,并返回遍历与所述分发线程相绑定的报文接收队列的步骤;在所述线程轮询标志为False,则指示开启所述指定功能,所述开启指定功能用于指示所述分发线程等待被唤醒。
可选地,所述分发线程在将所述报文接收队列中属于确定性流的报文分发至对应的DBQ时进一步在与该DBQ相绑定的DFT被设置的DFT唤醒标志为False时,将该DFT唤醒标志设置为True,唤醒DFT唤醒标志为True的该DFT;和/或,
在所述分发线程相绑定的所有报文接收队列均被遍历后,进一步针对DFT唤醒标志为TRUE的DFT,唤醒该DFT,并将该DFT的DFT唤醒标志置为FALSE。
所述DFT将相绑定的DBQ中的报文放入对应的DTQ包括:
遍历与所述DFT相绑定的DBQ,将遍历到的DBQ确定为当前DBQ,查询当前DBQ是否有报文;
若当前DBQ有报文,遍历当前DBQ,将遍历到的报文确定为当前DBQ报文,调用已设置的报文重复消除和排序PREOF功能识别出当前DBQ报文不为重复报文时生成报文输出链,所述报文输出链至少包括当前DBQ报文;对所述报文输出链中的每一DBQ报文进行报文封装,将封装后的DBQ报文放入用于转发该DBQ报文的出接口对应的DTQ;之后,在当前DBQ中还存在未被遍历的报文时,继续遍历该未被遍历的报文并返回将该遍历到的报文确定为当前DBQ报文的步骤;
若当前DBQ无报文或者当前DBQ中不存在未被遍历的报文时,在所述DFT相绑定的所有DBQ中还存在未被遍历的DBQ时,继续遍历该未被遍历的DBQ并返回将当前遍历到的DBQ确定为当前DBQ的步骤。
可选地,所述报文输出链通过以下步骤生成:
识别当前DBQ报文是否为乱序报文,如果否,将当前DBQ报文放入所述报文输出链;如果是,
确定当前DBQ报文所属的业务流,若当前DBQ报文与已记录的属于所述业务流且在设定时间窗口内通过调用PREOF功能处理的至少一个报文成功排序,则将当前DBQ报文、已记录的与所述当前DBQ报文成功排序的至少一个报文、以及已记录的属于所述业务流且在所述设定时间窗口之外调用PREOF功能处理但还未放入报文输出链的报文放入所述报文输出链,否则,将已记录的属于所述业务流且在所述设定时间窗口之外调用PREOF功能处理但还未放入报文输出链的报文放入所述报文输出链。
可选地,所述DFT被设置对应的DFT轮询标志,所述DFT轮询标志在所述DFT被唤醒时已被置为False;
所述DFT在查询当前DBQ有报文时,进一步设置所述DFT轮询标志为True,并关闭所述述DFT被设置的指定功能,关闭所述指定功能用于指示阻止所述DFT进入睡眠状态;
所述DFT在相绑定的DBQ均被遍历后,进一步在DFT轮询标志为True,则设置所述线程轮询标志为False,并返回遍历与该被唤醒的DFT相绑定的DBQ的步骤;在所述DFT轮询标志为False,则开启所述指定功能,所述开启指定功能用于指示DFT等待被唤醒。
可选地,所述DFT在将DBQ报文放入用于转发该DBQ报文的出接口对应的DTQ之后进一步在与该DTQ相绑定的CFT被设置的CFT唤醒标志为False,则设置该CFT唤醒标志为True,并唤醒该CFT唤醒标志为True的CFT;以及,
在所述DFT相绑定的DBQ均被遍历后,进一步针对CFT唤醒标志被设置为TRUE的CFT,唤醒该CFT,并将该CFT的CFT唤醒标志置为FALSE。
可选地,所述CFT将相绑定的DTQ中的报文放入对应的指定周期队列CSQ包括:
遍历所述CFT相绑定的DTQ,将遍历到的DTQ确定为当前DTQ,查询当前DTQ是否有报文,
如果是,遍历当前DTQ,将遍历到的报文确定为当前DTQ报文,依据当前DTQ报文携带的指定周期队列Cycle参数确定当前DTQ报文对应的目标CSQ,若目标CSQ处于SQ和RQ之间,则将当前DTQ报文放入RQ,若目标CSQ处于TQ和SQ之间,则将当前DTQ报文放入TQ,若目标CSQ处于RQ和TQ之间,则将当前DTQ报文放入目标CSQ;其中,所述RQ为所述CFT对应的队列接收指针RQP当前指向的CSQ;所述TQ为所述CFT对应的队列容忍指针TQP当前指向的CSQ;之后,在所述当前DTQ中还存在未被遍历的报文时,继续遍历该未被遍历的报文并返回将该遍历到的报文确定为当前DTQ报文的步骤;
如果否,或者在所述当前队列中不存在未被遍历的报文,则在所述CFT相绑定的所有DTQ中还存在未被遍历的DTQ时,继续遍历未被遍历的DTQ并返回将遍历到的DTQ确定为当前DTQ。
可选地,所述CFT将相绑定的DTQ中的报文放入对应的指定周期队列CSQ是在所述SQ为空时执行的。
可选地,所述CFT从发送队列SQ中选择报文并通过用于转发报文的出接口进行转发包括:
在确定报文发送周期发生更新时,重新调整所述CFT对应的指定周期队列指针结构CSQP;所述CSQP至少包括:SQP;遍历调整后的SQP指向的SQ中的报文,将遍历到的报文确定为当前SQ报文,通过调用用于转发当前SQ报文的出接口转发当前SQ报文;之后,在SQ中还存在未被遍历的报文时,继续遍历该未被遍历的报文并返回将该遍历到的报文确定为当前SQ报文的步骤;
在确定所述报文发送周期未发生更新时,遍历SQ中的报文,将遍历到的报文确定为当前SQ报文,通过调用用于转发当前SQ报文的出接口转发当前SQ报文;之后,在SQ中还存在未被遍历的报文时,继续遍历该未被遍历的报文并返回将该遍历到的报文确定为当前SQ报文的步骤。
可选地,所述CSQP还包括接收队列指针RQP、队列容忍指针TQP;所述RQP指向作为接收队列RQ的CSQ,所述TQP指向作为队列容忍TQ的CSQ;
其中,重新调整后的SQP指向的CSQ的编号,是根据针对所述CFT设置的当前处理周期变量CFT_Jiffies与所述CFT绑定的CSQ的数量d进行模运算得到的余数确定;
重新调整后的RQP指向的CSQ的编号,是根据所述余数与指定抖动周期数Jitter之和对所述d进行模运算得到的结果确定;
重新调整后的TQP指向的CSQ的编号,是根据如下公式确定:
(d-1+Rem-Jitter)mod d;其中,Rem为所述余数。
可选地,所述CFT将相绑定的所有DTQ中的所有报文放入对应的指定周期队列CSQ之后,进一步检测所述CFT相绑定的CSQ中是否有报文需要及时转发的事件,如果是,则返回执行通过所述CFT从发送队列SQ中选择报文并通过用于转发报文的出接口进行转发的步骤,如果否,则等待再次被唤醒。
可选地,所述报文需要及时转发的事件依据所述CFT被设置的当前处理周期变量CFT_Jiffies和当前报文接收周期变量CFT_Rcv_Jiffies确定,当所述CFT_Jiffies的取值与所述CFT_Rcv_Jiffies的取值之差小于或等于指定差时,确定有报文需要及时转发的事件,否则,确定不存在报文需要及时转发的事件;
其中,当所述CFT被唤醒时,或者当检测出CFT相绑定的CSQ中有报文需要及时转发的事件时,所述CFT_Jiffies的取值更新为已设置的CSQF_Jiffies的当前值,所述CSQF_Jiffies用于指示基于分段路由实现指定周期排队转发周期计数;
当查询出所述当前DTQ有报文时,CFT_Rcv_Jiffies的取值更新为CFT_Jiffies的取值。
可选地,所述报文发送周期是否发生更新通过以下方式确定:
检查所述CFT被设置的当前处理周期变量CFT_Jiffies的取值和历史周期变量CFT_Prev_Jiffies的取值是否相等,如果是,确定报文发送周期未发生更新,如果否,确定报文发送周期发生更新;
当重新调整所述CFT对应的指定周期队列指针结构CSQP后,该方法进一步包括:将所述CFT_Prev_Jiffies的取值更新为所述CFT_Jiffies的当前值。
至此,完成本申请实施例提供的装置结构描述。
本申请实施例还提供了图11所示装置的硬件结构。参见图12,图12为本申请实施例提供的电子设备结构图。如图12所示,该硬件结构可包括:处理器和机器可读存储介质,机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;所述处理器用于执行机器可执行指令,以实现本申请上述示例公开的方法。
基于与上述方法同样的申请构思,本申请实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被处理器执行时,能够实现本申请上述示例公开的方法。
示例性的,上述机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体 形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (16)

  1. 一种确定性流DT传输方法,其特征在于,该方法应用于网络设备,该方法包括:
    通过本设备上已被唤醒的分发线程对与该分发线程相绑定的报文接收队列中的报文进行分发,以将所述报文接收队列中属于确定性流的报文分发至对应的确定性流缓存队列DBQ,将属于尽力而为流的报文分发至对应的尽力而为流缓存队列BTQ;所述报文接收队列中的报文是指通过所述网络设备本地接口接收到的来自外部的报文;
    通过本设备上已被唤醒的确定性转发线程DFT将与该DFT相绑定的DBQ中的报文放入对应的确定性流队列DTQ;
    通过本设备上已被唤醒的周期转发线程CFT将与该CFT相绑定的DTQ中的报文放入对应的指定周期队列CSQ,以及通过所述CFT从发送队列SQ中选择报文并通过用于转发报文的出接口进行转发;所述SQ为所述CFT对应的队列发送指针SQP当前指向的CSQ。
  2. 根据权利要求1所述的方法,其特征在于,所述通过所述分发线程对与该分发线程相绑定的报文接收队列中的报文进行分发包括:
    遍历与所述分发线程相绑定的报文接收队列,将遍历到的报文接收队列确定为当前队列,查询所述当前队列是否有报文;
    若当前队列有报文,则遍历当前队列,将遍历到的报文确定为当前报文,若当前报文属于确定性流,则将当前报文放入与当前队列对应的DBQ,若当前报文属于尽力而为流,则将当前报文放入与当前队列对应的BTQ;之后,在当前队列中还存在未被遍历的报文时,继续遍历该未被遍历的报文并返回将遍历到的报文确定为当前报文的步骤;
    若当前队列无报文或者当前队列中不存在未被遍历的报文,在所述分发线程相绑定的所有报文接收队列中还存在未被遍历的报文接收队列时,继续遍历所述分发线程相绑定的且未被遍历的报文接收队列,并返回将遍历到的报文接收队列确定为当前队列的步骤。
  3. 根据权利要求2所述的方法,其特征在于,所述分发线程被设对应的线程轮询标志,线程轮询标志在所述分发线程被唤醒时已被置为False;
    在查询当前队列有报文时,进一步设置所述线程轮询标志为True,以指示关闭所述分发线程被设置的指定功能;关闭所述指定功能用于指示阻止所述分发线程进入睡眠状态;
    在所述分发线程相绑定的报文接收队列均被遍历后,该方法进一步包括:
    若所述线程轮询标志为True,则设置所述线程轮询标志为False,并返回遍历与所述分发线程相绑定的报文接收队列的步骤;若所述线程轮询标志为False,则指示开启所述指定功能,所述开启指定功能用于指示所述分发线程等待被唤醒。
  4. 根据权利要求2或3所述的方法,其特征在于,所述分发线程在将所述报文接收队列中属于确定性流的报文分发至对应的DBQ时进一步包括:若与该DBQ相绑定的DFT被设置的DFT唤醒标志为False,则将该DFT唤醒标志设置为True,唤醒DFT唤醒标志为True的该DFT;和/或,
    在所述分发线程相绑定的所有报文接收队列均被遍历后,该方法进一步包括:针对DFT唤醒标志为TRUE的DFT,唤醒该DFT,并将该DFT的DFT唤醒标志置为FALSE。
  5. 根据权利要求1所述的方法,其特征在于,所述通过本设备上已被唤醒的确定性转发线程DFT将与该DFT相绑定的DBQ中的报文放入对应的确定性流队列DTQ包括:
    遍历与所述DFT相绑定的DBQ,将遍历到的DBQ确定为当前DBQ,查询当前DBQ是否有报文;
    若当前DBQ有报文,遍历当前DBQ,将遍历到的报文确定为当前DBQ报文,调 用已设置的报文重复消除和排序PREOF功能识别出当前DBQ报文不为重复报文时生成报文输出链;对所述报文输出链中的每一DBQ报文进行报文封装,将封装后的DBQ报文放入用于转发该DBQ报文的出接口对应的DTQ;之后,在当前DBQ中还存在未被遍历的报文时,继续遍历当前DBQ中未被遍历的报文并返回将该遍历到的报文确定为当前DBQ报文的步骤;
    若当前DBQ无报文或者当前DBQ中不存在未被遍历的报文时,在所述DFT相绑定的所有DBQ中还存在未被遍历的DBQ时,继续遍历该未被遍历的DBQ并返回将当前遍历到的DBQ确定为当前DBQ的步骤。
  6. 根据权利要求5所述的方法,其特征在于,所述报文输出链通过以下步骤生成:
    当通过调用所述PREOF功能识别当前DBQ报文不为乱序报文时,将当前DBQ报文放入所述报文输出链;
    当通过调用所述PREOF功能识别当前DBQ报文为乱序报文时,确定当前DBQ报文所属的业务流,若当前DBQ报文满足条件,所述条件是指当前DBQ报文与已记录的属于所述业务流且在设定时间窗口内通过调用PREOF功能处理的至少一个报文成功排序,则将当前DBQ报文、已记录的与所述当前DBQ报文成功排序的至少一个报文、以及已记录的属于所述业务流且在所述设定时间窗口之外调用PREOF功能处理的报文放入所述报文输出链;若当前DBQ报文不满足所述条件,则将已记录的属于所述业务流且在所述设定时间窗口之外调用PREOF功能处理的报文放入所述报文输出链。
  7. 根据权利要求5所述的方法,其特征在于,所述DFT被设置对应的DFT轮询标志,所述DFT轮询标志在所述DFT被唤醒时已被置为False;
    在查询当前DBQ有报文时,进一步设置所述DFT轮询标志为True,并关闭所述述DFT被设置的指定功能,关闭所述指定功能用于指示阻止所述DFT进入睡眠状态;
    在所述DFT相绑定的DBQ均被遍历后,该方法进一步包括:若所述DFT轮询标志为True,则设置所述线程轮询标志为False,并返回遍历与该被唤醒的DFT相绑定的DBQ的步骤;若所述DFT轮询标志为False,则开启所述指定功能,所述开启指定功能用于指示DFT等待被唤醒。
  8. 根据权利要求5所述的方法,其特征在于,所述DFT在将DBQ报文放入用于转发该DBQ报文的出接口对应的DTQ之后进一步包括:若与该DTQ相绑定的CFT被设置的CFT唤醒标志为False,则设置该CFT唤醒标志为True,并唤醒该CFT唤醒标志为True的CFT;
    在所述DFT相绑定的DBQ均被遍历后,该方法进一步包括:针对CFT唤醒标志被设置为TRUE的CFT,唤醒该CFT,并将该CFT的CFT唤醒标志置为FALSE。
  9. 根据权利要求1所述的方法,其特征在于,所述通过本设备上已被唤醒的周期转发线程CFT将与该CFT相绑定的DTQ中的报文放入对应的指定周期队列CSQ包括:
    遍历所述CFT相绑定的DTQ,将遍历到的DTQ确定为当前DTQ,查询当前DTQ是否有报文,
    如果是,遍历当前DTQ,将遍历到的报文确定为当前DTQ报文,依据当前DTQ报文携带的指定周期队列Cycle参数确定当前DTQ报文对应的目标CSQ,若目标CSQ处于SQ和RQ之间,则将当前DTQ报文放入RQ,若目标CSQ处于TQ和SQ之间,则将当前DTQ报文放入TQ,若目标CSQ处于RQ和TQ之间,则将当前DTQ报文放入目标CSQ;其中,所述RQ为所述CFT对应的队列接收指针RQP当前指向的CSQ;所述TQ为所述CFT对应的队列容忍指针TQP当前指向的CSQ;之后,在所述当前DTQ中还存在未被遍历的报文时,遍历该未被遍历的一个报文,返回将该遍历到的报文确定为当前DTQ报文的步骤;
    如果否,或者在所述当前队列中不存在未被遍历的报文,则在所述CFT相绑定的所有DTQ中还存在未被遍历的DTQ时,继续遍历未被遍历的一个DTQ,返回将遍历 到的DTQ确定为当前DTQ。
  10. 根据权利要求1或9所述的方法,其特征在于,所述通过本设备上已被唤醒的周期转发线程CFT将与该CFT相绑定的DTQ中的报文放入对应的指定周期队列CSQ是在所述SQ为空时执行的。
  11. 根据权利要求9所述的方法,其特征在于,所述通过所述CFT从发送队列SQ中选择报文并通过用于转发报文的出接口进行转发包括:
    在确定报文发送周期发生更新时,重新调整所述CFT对应的指定周期队列指针结构CSQP;所述CSQP至少包括:SQP;遍历调整后的SQP指向的SQ中的报文,将遍历到的报文确定为当前SQ报文,通过调用用于转发当前SQ报文的出接口转发当前SQ报文;之后,在SQ中还存在未被遍历的报文时,遍历该未被遍历的一个报文,返回将该遍历到的报文确定为当前SQ报文的步骤;
    在确定所述报文发送周期未发生更新时,遍历SQ中的报文,将遍历到的报文确定为当前SQ报文,通过调用用于转发当前SQ报文的出接口转发当前SQ报文;之后,在SQ中还存在未被遍历的报文时,遍历该未被遍历的一个报文,返回将该遍历到的报文确定为当前SQ报文的步骤。
  12. 根据权利要求11所述的方法,其特征在于,所述CSQP还包括接收队列指针RQP、队列容忍指针TQP;所述RQP指向作为接收队列RQ的CSQ,所述TQP指向作为队列容忍TQ的CSQ;
    其中,重新调整后的SQP指向的CSQ的编号,是根据针对所述CFT设置的当前处理周期变量CFT_Jiffies与所述CFT绑定的CSQ的数量d进行模运算得到的余数确定;
    重新调整后的RQP指向的CSQ的编号,是根据所述余数与指定抖动周期数Jitter之和对所述d进行模运算得到的结果确定;
    重新调整后的TQP指向的CSQ的编号,是根据如下公式确定:
    (d-1+Rem-Jitter)mod d;其中,Rem为所述余数。
  13. 根据权利要求9所述的方法,其特征在于,在通过本设备上已被唤醒的周期转发线程CFT将该CFT相绑定的所有DTQ中的所有报文放入对应的指定周期队列CSQ之后,该方法进一步包括:
    检测所述CFT相绑定的CSQ中是否有报文需要及时转发的事件,如果是,则返回执行通过所述CFT从发送队列SQ中选择报文并通过用于转发报文的出接口进行转发的步骤,如果否,则等待再次被唤醒。
  14. 根据权利要求11或13所述的方法,其特征在于,所述报文需要及时转发的事件依据所述CFT被设置的当前处理周期变量CFT_Jiffies和当前报文接收周期变量CFT_Rcv_Jiffies确定,当所述CFT_Jiffies的取值与所述CFT_Rcv_Jiffies的取值之差小于或等于指定差时,确定有报文需要及时转发的事件,否则,确定不存在报文需要及时转发的事件;
    其中,当所述CFT被唤醒时,或者当检测出CFT相绑定的CSQ中有报文需要及时转发的事件时,所述CFT_Jiffies的取值更新为已设置的CSQF_Jiffies的当前值,所述CSQF_Jiffies用于指示基于分段路由实现指定周期排队转发周期计数;
    当查询出所述当前DTQ有报文时,CFT_Rcv_Jiffies的取值更新为CFT_Jiffies的取值。
  15. 根据权利要求11所述的方法,其特征在于,所述报文发送周期是否发生更新通过以下方式确定:
    检查所述CFT被设置的当前处理周期变量CFT_Jiffies的取值和历史周期变量CFT_Prev_Jiffies的取值是否相等,如果是,确定报文发送周期未发生更新,如果否,确定报文发送周期发生更新;
    当重新调整所述CFT对应的指定周期队列指针结构CSQP后,该方法进一步包括: 将所述CFT_Prev_Jiffies的取值更新为所述CFT_Jiffies的当前值。
  16. 一种电子设备,其特征在于,该电子设备包括:处理器和机器可读存储介质;
    所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
    所述处理器用于执行机器可执行指令,以实现权利要求1-15任一项的方法步骤。
CN202180003976.2A 2021-12-15 2021-12-15 确定性流传输方法及装置 Pending CN116615899A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2021/138338 WO2023108479A1 (zh) 2021-12-15 2021-12-15 确定性流传输方法及装置

Publications (1)

Publication Number Publication Date
CN116615899A true CN116615899A (zh) 2023-08-18

Family

ID=86775009

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180003976.2A Pending CN116615899A (zh) 2021-12-15 2021-12-15 确定性流传输方法及装置

Country Status (4)

Country Link
EP (1) EP4336796A1 (zh)
JP (1) JP2024520146A (zh)
CN (1) CN116615899A (zh)
WO (1) WO2023108479A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117155883A (zh) * 2023-10-31 2023-12-01 国网湖北省电力有限公司电力科学研究院 一种实现报文定时发送的tsn网卡装置、方法及介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019084970A1 (zh) * 2017-11-06 2019-05-09 华为技术有限公司 报文转发方法、转发设备和网络设备
KR20210141678A (ko) * 2019-05-03 2021-11-23 마이크로칩 테크놀로지 인코포레이티드 시간에 민감한 및 최선 노력의 데이터 패킷들에 대한 매체 액세스, 및 관련 시스템들, 방법들, 및 디바이스들
US20210014177A1 (en) * 2020-09-26 2021-01-14 Intel Corporation Deterministic packet scheduling and dma for time sensitive networking
CN113411270B (zh) * 2021-06-07 2023-04-07 中国人民解放军国防科技大学 一种面向时间敏感网络的报文缓冲区管理方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117155883A (zh) * 2023-10-31 2023-12-01 国网湖北省电力有限公司电力科学研究院 一种实现报文定时发送的tsn网卡装置、方法及介质
CN117155883B (zh) * 2023-10-31 2024-01-30 国网湖北省电力有限公司电力科学研究院 一种实现报文定时发送的tsn网卡装置、方法及介质

Also Published As

Publication number Publication date
JP2024520146A (ja) 2024-05-21
WO2023108479A1 (zh) 2023-06-22
EP4336796A1 (en) 2024-03-13

Similar Documents

Publication Publication Date Title
US8830829B2 (en) Parallel processing using multi-core processor
EP2641362B1 (en) Dynamic flow redistribution for head line blocking avoidance
US6810426B2 (en) Methods and systems providing fair queuing and priority scheduling to enhance quality of service in a network
CN107959636B (zh) Bgp消息的发送方法及装置
US7529224B2 (en) Scheduler, network processor, and methods for weighted best effort scheduling
US7957392B2 (en) Method and apparatus for high-performance bonding resequencing
CN112585914B (zh) 报文转发方法、装置以及电子设备
US8457142B1 (en) Applying backpressure to a subset of nodes in a deficit weighted round robin scheduler
WO2020087523A1 (zh) 网络通信的方法、装置及电子设备
KR102177574B1 (ko) 컴퓨팅 디바이스에서 패킷 수명을 예측하기 위한 큐잉 시스템
US20120307641A1 (en) Dynamic Flow Segregation for Optimal Load Balancing Among Ports in an Etherchannel Group
CN116615899A (zh) 确定性流传输方法及装置
US8879578B2 (en) Reducing store and forward delay in distributed systems
US7474662B2 (en) Systems and methods for rate-limited weighted best effort scheduling
CN102404225B (zh) 一种用于差分队列服务系统的数据包快速入队方法
CN113835611A (zh) 存储调度方法、设备和存储介质
WO2023123104A1 (zh) 一种报文传输方法及网络设备
US11516145B2 (en) Packet control method, flow table update method, and node device
US20060153243A1 (en) Scheduling eligible entries using an approximated finish delay identified for an entry based on an associated speed group
Meitinger et al. A hardware packet re-sequencer unit for network processors
US11784933B2 (en) Traffic shaping offload on a network interface controller
US9258245B2 (en) Multiple cell dequeue for high speed queueing

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