网络处理器线程调度方法

文档序号:7948193阅读:253来源:国知局
专利名称:网络处理器线程调度方法
技术领域
本发明涉及数据通信领域,尤其是一种数据通信中的网络处理器线程调度方法。
背景技术
目前在数据通信中经常用到网络处理器,网络处理器有很多功能,比如数据通信中协议的分析、处理、数据包的调度等。网络处理器内部一般包含若干个独立的微型包处理器,简称包引擎,而每个包引擎又可分为若干个互相交替运行的线程。网络处理器中的包引擎是互相独立的,能够同时运行,因此可以同时处理不同的数据流;而包引擎内部的线程是交替运行的,它们占用公共的引擎资源,不能同时运行。如何协调各个线程或者引擎之间的运行关系,是提高网络处理器性能的关键。
一般一个网络处理器会服务若干个数据端口,端口之间没有优先级的要求。那么如何分配空闲的线程和引擎去服务有数据的端口呢?怎样分配才可以达到最优效果呢?目前已有的调度方法有两种,分别介绍如下一、集中调度法在网络处理器中,分配一个专门的调度线程,统一调度所有的资源。该调度线程可以设在网络处理器的任意一个引擎中。该方法调度的过程是调度线程查询外部数据端口,即外端口的状态,经过处理,得到要服务的端口;然后,调度线程查询网络处理器是否有其它的空闲线程,选择最小编号的空闲线程;最后,通过要服务的端口与最小编号的空闲线程之间的简单的映射关系,分配空闲线程去处理要服务的端口。
这种方法的缺点是它专门占用一个线程资源,客观上降低了网络处理器的效率;而且,调度线程所在引擎的其它线程也不能处理复杂业务,因为引擎内部的线程是不能同时运行的,必须交替运行,因此当其它线程处理复杂业务,占用这个引擎的资源时,调度线程的任务将被延迟,导致调度效率下降,同时也限制了资源的最大利用;另外,它也很难合理安排任务,安排的任务理想的状态是均匀分布在各个引擎,不是集中在一个引擎,因为不同引擎可以同时运行,而引擎内部的不同线程却必须交替运行,而集中调度的简单分配原则,总是会把任务分配到最小编号的线程上,当端口数少时,造成引擎运行的不合理,浪费了引擎资源。
二、分布式绑定调度法在这种方法中,网络处理器没有一个专门的调度线程,而是固定指定固定的线程去服务对应的端口,即把线程和端口捆绑起来,由各个处理线程自己决定是否处理它所服务的唯一端口。所以每个处理线程都有自己的调度功能。比如0线程只服务0端口,1线程只服务1端口.....以此类推。
这种方法的缺点是由于它捆绑线程和端口,服务的端口受限于线程的数目,而一般线程数目是有限的,而服务的端口有可能很多,这样超出线程数目的端口就可能得不到服务;此外,它不能充分利用线程资源,一个线程处理能力有限,当端口流量很大时,无法线性处理,可是其它线程依然空闲,没有充分利用网络处理器的并行处理体系,造成线程资源的浪费。

发明内容
本发明的目的是提供一种网络处理器线程调度方法,它既不占用专门的线程资源而降低网络处理器的效率,又使服务的端口不受限于线程的数目,而且能够充分网络处理器的并行处理体系,以充分利用线程资源。
为实现上述目的,本发明的解决方案是一种网络处理器线程调度方法,它包括a、设定外端口的优先级;b、各线程一旦空闲,判断该线程和该线程所在的引擎是否都有权服务外端口,一旦两者都可以服务外端口,通知本引擎的其他线程不能服务外端口;c、该线程按预先设定的外端口的优先级选择优先级最高的外端口,并进行屏蔽;d、该线程构造一个用该线程去服务选择好的外端口的任务,通知其他引擎和此引擎的其他线程可以服务外端口,下一引擎的固定线程得到服务外端口的权利;e、执行该任务的过程中解除屏蔽。
其中,步骤b的具体过程包括b1、线程判断本线程是否可以查询外端口的状态;b2、如果判断出不能查询外端口的状态,则释放本线程的控制权;如果能够查询外端口的状态,则通知本引擎的其他线程不能查询外端口的状态;b3、线程判断本线程所在的引擎是否有权利服务外端口;b4、如果判断出不能服务外端口,则释放本线程的控制权;如果能够服务外端口,读取外端口的状态,去除暂时不服务的外端口,获得服务外端口列表;b5、判断是否有外端口需要服务,如没有则释放本线程的控制权;如有则继续进行。
在步骤b1中,线程判断本线程是否可以查询外端口的状态的方法是根据本引擎的线程之间固有的切换关系,判断是否轮到本线程进行服务。
在步骤b3中,判断本引擎是否有权利服务外端口的方法是看是否接到了其他线程的下一引擎可以服务外端口的通知。
本发明的步骤d包括这样的过程d1、线程构造一个用该线程去服务选择好的外端口的任务;d2、该线程通知其他引擎可以服务该外端口;
d3、该线程分配该任务;d4、该线程通知所在引擎的其它线程可以查询外部端口的数据状态。
在步骤d2和d3之间可以包含这样的过程再判断本线程是否可以分配任务,如不能分配任务,即不能服务外端口则释放线程的控制权;如能够分配任务,即能够服务外端口则继续进行。
由于本发明是在网络处理器的每个线程中设有该线程自己的调度功能,它不占用专门的线程资源,从而提高了网络处理器的效率;由于本发明中的线程和外端口不是捆绑在一起的,而是任何一个空闲线程都可以有机会去服务有数据的端口,这样就使服务的外端口不受限于线程的数目;另外,由于本发明通过在各引擎之间的通知机制和引擎内部各线程之间的固有服务外端口的顺序,以及对外端口的屏蔽和解屏蔽,约束了线程和外端口之间的关系,当外端口流量很大时,能够充分利用网络处理器的并行处理体系,由多个线程平行进行处理,充分利用了线程资源。


图1是本发明的方法流程简图。
图2是本发明的方法流程详图。
具体实施例方式
”在图1本发明的方法流程简图中,我们可以大体看出本发明的实现步骤,该步骤中的每一步大体与我们后面的每一个小标题相对应。
(1)设定外端口的优先级。该设定一般来说是人为的。由于在后面各线程服务外端口的过程中,都是先选择优先级最高的外端口,在设定外端口的优先级时要考虑外端口上数据的重要程度,把最重要的外端口设为优先级最高的外端口。
在本发明中,各个引擎服务外端口的顺序是通过调度方法中的通知机制进行的,该机制在后面的步骤(2)和(4)中得到了体现。引擎中各线程进行服务也是有一定顺序的,只不过该顺序是网络处理器本身所固有的。比如说,我们的网络处理器中有四个包引擎,分别编号为0、1、2、3,在每个引擎中分别有四个线程,分别编号为0、1、2、3,服务外端口的线程顺序的理想状态是均匀分布在各个引擎,因为不同引擎可以同时运行,而引擎内部的不同线程却必须交替运行,这样,我们首先让0引擎的0线程(简记为00)先服务于外端口,然后是1引擎中的0线程(简记为10),再其次是20,再其次是30、01、11、21、31、02、12、22、32、03、13、23、33。假使有四个外端口分别编号为0、1、2、3,我们设0外端口具有最高优先级,然后依次是1、2、3。
另外在这一步骤中,还可以设定从开始执行任务到解除对外端口的屏蔽之间的时间,关于这一部分的详细内容我们在(5)中加以论述。
(2)各线程一旦空闲,判断该线程和该线程所在的引擎是否都有权服务外端口,一旦两者都可以服务外端口,通知本引擎的其他线程不能服务外端口。
在这个过程中,线程空闲下来时,自动起调度任务,其具体过程包括1)线程判断本线程是否可以查询外端口的状态,其具体方法是根据本引擎的线程之间固有的切换关系,判断是否轮到本线程进行服务。
2)如果判断出不能查询外端口的状态,则释放本线程的控制权;如果能够查询外端口的状态,则通知本引擎的其他线程不能查询外端口的状态。
3)线程判断本线程所在的引擎是否有权利服务外端口,其具体方法是看是否接到了其他线程的下一引擎可以服务外端口的通知。实际上,其他线程是在后面所述的步骤(4)中进行通知的,该过程我们在后面详细叙述,只不过每个线程独立执行本发明的5个过程,其他线程是在它自身所执行的步骤(4)中进行通知的。
4)如果判断出不能服务外端口,则释放本线程的控制权;如果能够服务外端口,读取外端口的状态,去除暂时不服务的外端口,获得服务外端口列表。其具体方法是判断外端口中哪些当前不需要服务、哪些被其他线程屏蔽掉了,关于屏蔽的部分我们将在后面的(3)中主要涉及,实际上这里所说的屏蔽是指被其他线程执行的步骤(3)屏蔽掉了,与本线程的过程无关。然后从全部外端口中减去这些外端口,放在服务外端口列表中。
5)判断是否有外端口需要服务,如没有则释放本线程的控制权;如有则继续进行。在这一步骤中,判断是否有外端口需要服务的具体过程是按照服务外端口列表中可以服务的端口,去检查这些端口上是否有数据,如有则需要服务,如没有则不需要服务。
关于以上5个详细过程,在图2左侧清楚地显示出来。
以上例来说,我们一般在初始化时表明先启动0引擎的0线程,使它有权服务外端口,那么,0线程首先判断0线程能否查询外端口的状态,答案是肯定的,则0线程通知本引擎的1、2、3线程不能查询外端口的状态。然后,判断0引擎能否服务外端口,答案也是肯定的,则读取外端口的状态,发现外端口1暂时不服务,则去除该端口,获得服务外端口列表,在列表中只含有端口0、2、3。然后判断是否有外端口需要服务,发现在端口0和2上面有数据,而在端口3上面没有数据,则认为端口0、2需要服务,可以继续进行下面的过程。
(3)该线程按预先设定的外端口的优先级选择优先级最高的外端口,并进行屏蔽。
在上例中,在需要服务的端口0、2中,端口0的优先级最高,故选择端口0服务,然后对端口0进行屏蔽。为什么要进行屏蔽呢?因为当分配一个任务给此端口,即对此端口进行服务时,离任务执行或者说离真正的服务还有一段时间,这样端口状态不能立刻更新,而有可能在后续程序中又分配了一个任务,或者说,又有一个线程服务该端口,结果其接收到的就是未及时更新的数据,出现了重复接收。
(4)该线程构造一个用该线程去服务选择好的外端口的任务,通知其他引擎和此引擎的其他线程可以服务外端口,下一引擎的固定线程得到服务外端口的权利。
本过程的具体实现如下1)线程构造一个用该线程去服务选择好的外端口的任务。
2)该线程通知其他引擎可以服务该外端口。我们这一步骤只是给其他引擎这一权利,但实际上只有下一顺序的引擎在这一步骤中才能真正服务外端口,这就是我们在步骤(2)的子步骤3)所述的内容。至于该引擎中的哪一线程能够得到该权利,则是由网络处理器引擎内部线程服务的固有顺序决定的。
然后线程可以再判断本线程是否可以分配任务,如不能分配任务,即不能服务外端口则释放线程的控制权;如能够分配任务,即能够服务外端口则继续进行。这个判断是为了使结果更精确,但不是特别必要的。
3)该线程分配该任务。
4)该线程通知所在引擎的其它线程可以查询外部端口的数据状态。
关于这一过程在图2的中部和右部可以清楚地显示出来。
仍以上例进行说明,0引擎的线程0构造了一个用线程0去服务外端口0的任务,然后通知其他引擎可以服务0端口,实际上是通知1引擎去服务0端口,在1引擎中按网络处理器固有的顺序默认了一个0线程去继续服务0端口,然后可以再判断以下本线程是否可以分配任务,之所以进行这样一个重复的判断是防止在第一次判断后到目前之间程序的执行过程中,该端口已经被别的线程屏蔽,或不打算再进行服务。然后,0线程分配该任务,通知0引擎的1、2、3线程可以查询外部端口的数据状态。
(5)执行该任务的过程中解除屏蔽。然后,下一引擎中的固定线程就可以服务该外端口。
在这一过程中,可以按步骤(1)中预先设定的从开始执行任务到解除对外端口的屏蔽之间的时间来进行外端口屏蔽的解除,也就是说,不到该任务全部完成,新的引擎的新的线程,即1引擎的0线程又开始同时服务0端口。这样,网络处理器的资源得到了最大利用,大大提高了性能。当然,新的引擎的新的线程又开始服务同一个外端口,也要经过从(1)到(5)的过程。
由于这种调度方法的基础是分布式绑定法,但消除了绑定法资源利用的不合理和不灵活,采用了自由式调度,任何一个空闲线程都可以有机会服务有数据的端口,我们称之为分布式自由调度法。
权利要求
1.一种网络处理器线程调度方法,它包括a、设定外端口的优先级;b、各线程一旦空闲,判断该线程和该线程所在的引擎是否都有权服务外端口,一旦两者都可以服务外端口,通知本引擎的其他线程不能服务外端口;c、该线程按预先设定的外端口的优先级选择优先级最高的外端口,并进行屏蔽;d、该线程构造一个用该线程去服务选择好的外端口的任务,通知其他引擎和此引擎的其他线程可以服务外端口,下一引擎的固定线程得到服务外端口的权利;e、执行该任务的过程中解除屏蔽。
2.根据权利要求1所述的网络处理器线程调度方法,其特征在于步骤b的具体过程包括b1、线程判断本线程是否可以查询外端口的状态;b2、如果判断出不能查询外端口的状态,则释放本线程的控制权;如果能够查询外端口的状态,则通知本引擎的其他线程不能查询外端口的状态;b3、线程判断本线程所在的引擎是否有权利服务外端口;b4、如果判断出不能服务外端口,则释放本线程的控制权;如果能够服务外端口,读取外端口的状态,去除暂时不服务的外端口,获得服务外端口列表;b5、判断是否有外端口需要服务,如没有则释放本线程的控制权;如有则继续进行。
3.根据权利要求2所述的网络处理器线程调度方法,其特征在于在步骤b1中,线程判断本线程是否可以查询外端口的状态的方法是根据本引擎的线程之间固有的切换关系,判断是否轮到本线程进行服务。
4.根据权利要求2所述的网络处理器线程调度方法,其特征在于在步骤b3中,判断本引擎是否有权利服务外端口的方法是看是否接到了其他线程的下一引擎可以服务外端口的通知。
5.根据权利要求2、3或4所述的网络处理器线程调度方法,其特征在于在步骤b4中,读取外端口的状态的具体方法是判断外端口中哪些当前不需要服务、哪些被其他线程屏蔽掉了,从全部外端口中减去这些外端口,放在服务外端口列表中。
6.根据权利要求2、3或4所述的网络处理器线程调度方法,其特征在于在步骤b5中,判断是否有外端口需要服务的具体过程是按照服务外端口列表中可以服务的端口,去检查这些端口上是否有数据,如有则需要服务,如没有则不需要服务。
7.根据权利要求1所述的网络处理器线程调度方法,其特征在于步骤d包括这样的过程d1、线程构造一个用该线程去服务选择好的外端口的任务;d2、该线程通知其他引擎可以服务该外端口;d3、该线程分配该任务;d4、该线程通知所在引擎的其它线程可以查询外部端口的数据状态。
8.根据权利要求7所述的网络处理器线程调度方法,其特征在于在步骤d2和d3之间包含这样的过程再判断本线程是否可以分配任务,如不能分配任务,即不能服务外端口则释放线程的控制权;如能够分配任务,即能够服务外端口则继续进行。
9.根据权利要求1所述的网络处理器线程调度方法,其特征在于在步骤a中预先设定从开始执行任务到解除对外端口的屏蔽之间的时间;在步骤e中,按照该时间进行外端口屏蔽的解除。
全文摘要
一种网络处理器线程调度方法,它包括设定外端口的优先级;各线程判断该线程和该线程所在的引擎是否都有权服务外端口,一旦两者都可以服务外端口,通知本引擎的其他线程不能服务外端口;该线程选择优先级最高的外端口,并进行屏蔽;构造一个用该线程去服务选择好的外端口的任务,通知其他引擎和本引擎的其他线程可以服务该外端口;执行该任务的过程中解除屏蔽。它既不降低网络处理器的效率,又充分利用了线程资源。
文档编号H04L12/24GK1402471SQ0112511
公开日2003年3月12日 申请日期2001年8月13日 优先权日2001年8月13日
发明者叶未川 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1