具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明多硬件线程处理器的业务处理方法实施例一的结构示意图。该方法包括:
步骤101、获得硬件线程的先进先出(First Input First Output,FIFO)队列状态,所述FIFO队列状态达到预设状态时向上游硬件线程发送控制命令;
步骤102、接收到所述控制命令的上游硬件线程根据所述控制命令对业务进行处理。
本发明实施例可应用于多核多硬件线程处理器中,在处理业务过程中,同一CPU核上的多个硬件线程在处理一个业务流程中,各硬件线程可以根据其管理的FIFO队列的繁忙程度,向其上游硬件线程发送控制命令,以控制上游硬件线程暂停或继续执行业务处理。具体地,假设当前硬件线程的FIFO队列中的缓存报文数量较多时,且其占用的流水线资源较少,则上游硬件线程将报文发送来时,当前硬件线程的FIFO队列可能因空间已满而无法全部接收发送来的报文,必然导致报文丢掉处理,因此,本实施例中当前硬件线程的FIFO队列中报文缓存数量较多时,可向其上游硬件线程发送暂停对新业务进行处理的控制命令,这样上游硬件线程就会释放出更多的资源,因此,硬件线程可获得上游硬件线程释放的流水线资源,加快对自身FIFO队列中报文的处理,避免因自身的FIFO队列繁忙而导致上游硬件线程发送的报文丢弃,导致上游硬件线程对报文进行处理时占用的流水线资源被浪费。
本发明实施例中,各硬件线程可以根据其管理的FIFO队列状态,向其上游硬件线程发送控制命令,控制上游硬件线程对业务的处理,使得上游硬件线程可根据其下游硬件线程的FIFO队列的繁忙状态,控制对业务处理的进度,避免上游硬件线程处理业务后并将报文发送到下游硬件线程时导致报文丢弃,造成上游硬件线程占用的流水线的资源浪费的问题,可有效提高整个CPU处理业务的性能。
图2为本发明多硬件线程处理器的业务处理方法实施例二的流程示意图。本发明实施例可应用于多核多硬件线程处理器处理业务的流程中,由于CPU核中的每个硬件线程均管理有相应的独立的FIFO队列,当CPU核中的硬件线程在从各自管理的FIFO队列中读取报文时,可检查FIFO队列中缓存报文的数量,对FIFO队列状态进行检查,并根据FIFO队列状态向其上游硬件线程发送返压指令或解返压指令,以控制上游硬件线程暂停或继续对报文的处理,其中,所述的返压指令是指当前硬件线程向其上游硬件线程发送的指示上游硬件线程暂停处理新业务的指令,解返压指令是指当前硬件线程向其上游硬件线程发送的指示上游硬件线程恢复处理新业务的指令。具体地,本发明实施例方法包括:
步骤201、硬件线程检查其管理的FIFO队列的缓存报文的数量。
当硬件线程在其管理的FIFO队列中读取报文时,可检查FIFI队列中缓存报文的数量,获得缓存报文的数量。
步骤202、硬件线程判断其管理的FIFO队列中报文的数量是否超过预设正常阈值,如果是,则将FIFO队列状态设定为繁忙状态,执行步骤203,否则,将FIFO队列状态设定为正常状态,执行步骤206。
步骤203、硬件线程判断其管理的FIFO队列中报文的数量是否超过预设繁忙阈值,如果是,则将FIFO队列状态设定为极度繁忙状态,执行步骤204,否则,执行步骤205。
步骤204、硬件线程向其维护的所有上游硬件线程发送返压指令。
本步骤中,当硬件线程的FIFO队列处于极度繁忙状态时,说明此时FIF0队列可能无法接收其上游硬件线程发送来的报文,因此,可发送返压指令到硬件线程维护的所有上游硬件线程,指示上游硬件线程暂停对新业务报文的处理。具体地,硬件线程本身可维护有其上游硬件线程的分布情况,并根据其上游硬件线程的分布以及FIFO队列的繁忙程度,将返压指令发送给上游硬件线程。上游硬件线程接收到返压指令后,可暂停对新业务报文的处理,将其占用的流水线资源让给处于其下游的硬件线程。
步骤205、硬件线程向其维护的上游硬件线程中处于最上游的硬件线程发送返压指令。
步骤206、若硬件线程的FIFO队列状态是从繁忙状态或极度繁忙状态恢复到正常状态时,硬件线程向因接收反压指令而停止业务处理的上游硬件线程发送解返压指令,以使上游硬件线程恢复对新业务的处理。
为对本发明实施例有更好的了解,下面以8核CPU中的一个核中的四个硬件线程对业务的处理流程进行说明。
图3为8核CPU的结构示意图;图4为8核CPU中一个CPU核中的四个硬件线程对业务的处理流程图。具体地,如图3所示,所述的8核CPU包括8个CPU核,分别为核0~核7,且每个CPU核均包含有四个硬件线程,每个硬件线程可称之为vCPU。下面以CPU核4为例说明CPU核中的四个vCPU16、vCPU17、vCPU18和vCPU19对一个业务的处理流程,其中,vCPU16为负责收包的vCPU,vCPU17为负责对报文进行初步处理的vCPU,vCPU18为负责对报文进行进一步处理的vCPU,vCPU19为负责对处理后的报文进行发包的vCPU。业务的处理流程可包括以下步骤:
步骤301、vCPU16通过网络驱动接收到报文,并将报文写入共享内存区的第一FIFO队列。
其中,所述的第一FIFO队列即为vCPU17管理的FIFO队列,vCPU17可从该第一FIFO队列中读取和处理报文。
步骤302、vCPU17从第一FIFO队列中读取报文,对报文进行处理。
步骤303、vCPU17将需要进一步处理的报文写入第二FIFO队列中。
其中,所述的第二FIFO队列为vCPU18管理的FIFO队列,vCPU18可从该第二FIFO队列中读取和处理报文。
步骤304、vCPU18从第二FIFO队列中读取报文,对报文进行进一步地处理。
步骤305、vCPU18将处理后的报文写入第三FIFO队列。
其中,所述的第三FIFO队列为vCPU19管理的FIFO队列,vCPU19可从该第三FIFO队列中读取并转发报文。
步骤306、vCPU19从第三FIFO队列中读取报文,并将报文转发出去。
可以看出,在CPU核的业务处理流程中,若其中一个vCPU出现瓶颈,将导致其管理的相应的FIFO队列由于塞满了缓存报文而导致新送入的报文溢出,导致丢包。具体地,假设vCPU18中的FIFO队列处于繁忙状态,则在vCPU17将报文写入vCPU18的第二FIFO队列时,可能会出现第二FIFO队列满而无法写进去,此时只能将vCPU17要写如入的报文丢弃,则步骤304之前的vCPU16和vCPU17对报文的处理均是无用功,其占用的流水线资源也被浪费掉。
因此,本发明实施例可应用于上述业务处理流程中,当vCPU18在从第二FIFO队列中读取报文时,可检查第二FIFO队列状态,确定第二FIFO队列状态是否处于繁忙或极度繁忙状态,并向处于上游的vCPU16和/或vCPU17发送返压指令,指示其暂停对业务的处理,则vCPU16和/或vCPU17占用的流水线资源即可被vCPU18使用,加快vCPU18对第二FIFO队列中报文处理的速度,同时可有效避免vCPU16和/或vCPU17因第二FIFO队列满而造成的资源浪费。此外,当第二FIFO队列中缓存报文的数量减少至一定值时,即FIFO队列状态恢复到正常状态时,vCPU18可向因接收反压指令而停止业务处理的vCPU发送解返压指令,指示相应的vCPU恢复对新业务的处理。
上述本发明实施例中,硬件线程发送返压指令到其上游硬件线程时,也可根据上游硬件线程的分布状况,向维护的部分硬件线程发送返压指令,具体地,硬件线程可为其维护的上游硬件线程设定返压优先级,当需要向上游硬件线程发送返压指令时,可优先向处于较高返压优先级的硬件线程发送返压指令。一般而言,对于一个硬件线程,处于越上游的硬件线程,其具有的返压优先级就越高,即当前的硬件线程需要发送返压指令时,首先将其发送给返压优先级最高的上游硬件线程。
图5为本发明多硬件线程处理器实施例一的结构示意图。本实施例中多硬件线程处理器包括硬件线程以及所述硬件线程的至少一个上游硬件线程,其中,
所述硬件线程,用于获得硬件线程的FIFO队列状态,在所述FIFO队列状态达到预设状态时向上游硬件线程发送控制命令;
所述上游硬件线程,用于接收到所述控制命令时根据所述控制命令对业务进行处理。
本发明实施例硬件线程可根据其管理的FIFO队列状态,向其上游硬件线程发送控制命令,控制上游硬件线程对业务的处理,使得上游硬件线程可根据其下游硬件线程的FIFO队列的繁忙状态,控制对业务处理的进度,避免上游硬件线程处理业务后并将报文发送到下游硬件线程时导致报文丢弃,造成上游硬件线程占用的流水线的资源浪费的问题,可有效提高整个CPU处理业务的性能。
图6为本发明多硬件线程处理器实施例二中硬件线程的结构示意图。如图6所示,本发明实施例中的硬件线程可包括状态获取模块1和指令发送模块2,其中,
状态获取模块1,用于根据FIFO队列中的缓冲报文的数量,获得硬件线程的FIFO队列状态;
指令发送模块2,用于所述FIFO队列状态达到预设状态时向上游硬件线程发送控制命令。
图7为本发明多硬件线程处理器实施例中状态获取模块的结构示意图。具体地,如图7所示,本发明实施例中的状态获取模块1可包括:报文数量检查单元11和第一判断单元12,其中,
报文数量检查单元11,用于检查硬件线程的FIFO队列中缓存报文的数量;
第一判断单元12,用于判断所述缓存报文的数量是否超过预设正常阈值,如果是,则所述FIFO队列状态为繁忙状态,否则,所述FIFO队列状态为正常状态;
所述指令发送模块可具体用于当所述FIFO队列状态为繁忙状态时,向硬件线程维护的上游硬件线程中处于最上游的硬件线程发送暂停对业务处理的返压指令;
其中,在多硬件线程中,每个CPU核的各硬件线程排列顺序是固定的,当所述FIFO对列状态为繁忙状态时,向处于最上游的硬件线程发送暂停对业务处理的返压指令。
此外,如图7所示,状态获取模块1还可包括:第二判断单元13,用于若所述FIFO队列为繁忙状态时,判断所述繁忙状态的FIFO队列中的缓存报文的数量是否超过预设繁忙阈值,如果是,则所述FIFO队列状态为极度繁忙状态;
所述指令发送模块还可用于当所述FIFO对列状态为极度繁忙状态时,所述硬件线程向其维护的所有上游硬件线程发送暂停对业务处理的返压指令。
本发明实施例中,所述指令发送模块还可用于当所述FIFO队列状态恢复到正常状态时,向因接收返压指令而停止业务处理的上游硬件线程发送恢复业务处理的解返压指令。
本发明实施例可根据硬件线程的FIFO队列的状态向上游硬件线程发送控制命令,控制上游硬件线程对业务的处理,使得上游硬件线程可根据其下游硬件线程的FIFO队列的繁忙状态,控制对业务处理的进度,避免上游硬件线程处理业务后在将报文发送到下游硬件线程而导致报文丢弃,造成上游硬件线程占用的流水线的资源浪费的问题,可有效提高整个CPU处理业务的性能。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
最后应说明的是:以上实施例仅用以说明本发明的技术方案而非对其进行限制,尽管参照较佳实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对本发明的技术方案进行修改或者等同替换,而这些修改或者等同替换亦不能使修改后的技术方案脱离本发明技术方案的精神和范围。