一种分布式系统中提高多核cpu处理能力的方法

文档序号:6611047阅读:349来源:国知局
专利名称:一种分布式系统中提高多核cpu处理能力的方法
技术领域
本发明涉及分布式系统领域,尤其是涉及使用多核CPU作为处理节
点的分布式系统领域。
背景技术
随着应用需求的不断增加,单个CPU的处理能力已经远远不能满足
要求,取而代之,分布式系统由于其强大的处理能力和良好的扩展性,正 在发挥着越来越重要的作用。例如,由于需要同时支持大量的用户,电信 领域的核心网设备和基站设备都釆用了分布式系统方案来实现。介绍两个
概念分布式系统的CPU节点和分布式系统的功能节点。分布式系统的 CPU节点指的是组成分布式系统的各个CPU。而分布式系统的功能节点 指的是一个软件实体,软件实体驻留在CPU节点之上,所有的软件实体 通过协作共同完成分布式系统的功能。
理想情况下,由N个相同CPU组成的分布式系统,其处理能力应该 是单个CPU运算能力的N倍。实际系统中,由于通信等开销,分布式系 统的处理能力还达不到单个CPU运算能力的N倍。但是,对于一个具有 良好扩展性的分布式系统,其系统处理能力应该与CPU的数目成线性关 系。假设单个CPU的运算能力是C,系统由N个CPU组成,那么一个具 有良好扩展性的分布式系统的处理能力为Nxkxc,其中k为与系统设 计相关常数, 一般小于1。
显然,增大N或者提高C,都可以提高具有良好扩展性的分布式系统 的处理能力。实际应用中,这两种方法都经常被用来提高系统的处理能力。 在提高CPU运算能力方面,由于受到工艺和主频等限制,提高单个CPU 核的运算能力变得越来越困难。目前各芯片厂商的普遍做法是在一块芯片
上集成多个CPU核,即多核CPU,以提高CPU的运算能力。多核CPU
是未来的发展趋势。
多核CPU本质上属于对称共享存储器多处理器架构(SMP)。支持 SMP架构的操作系统如linux、 UNIX等,这些现代操作系统都支持多线 程编程,在SMP架构上多个线程可以被操作系统调度到不同的处理器或 者CPU核上同时运行,实现真正的并发。对于一个n核的CPU,其实际 的处理能力不仅取决于n的大小,更取决于应用程序的并行度,即构成应 用程序的工作线程数目m。只有线程数目m足够多,操作系统才能保持 底层的所有CPU核都处于调度运行状态,多核CPU的运算能力才能充分 发挥。因此,为了提高多核CPU的处理能力,必须提高应用程序的并行 度,即增加应用程序的工作线程数目。
但是,现在的情况经常是,即使对于一个具有良好扩展性的分布式系 统来说,其单个CPU节点上运行的应用程序的并行度可能较低,即真正 工作的线程数目非常少,因此无法充分挖掘多核CPU节点的运算能力, 即多核CPU的处理能力并不高,从而无法达到提高整个分布式系统的处 理能力的目的。那么如何挖掘分布式系统中多核CPU节点的运算能力 呢?或者说如何提高多核CPU的处理能力呢?
显然,提高单个CPU节点上运行程序的并行度可以解决这个问题。 这需要修改现有的应用软件,尽可能使用多线程的方式提高其并行度。对 于大型的分布式系统软件,如复杂的电信设备软件,软件修改量将是巨大 的,而且多线程编程的难度要远远大于串行编程。因此,对于现有的大型 的分布式系统软件来说,这个方法并不总是可行。
在保持现有分布式系统软件不作较大改动的条件下,如何提高分布式 系统中多核CPU节点的处理能力呢?有人提出了多核拆分的解决方法, 即^l巴每一个核当作一个独立的CPU节点, 一个多核CPU节点-陂拆分成相 互独立的多个CPU节点。这种方法实际上变相增加了分布式系统中的节 点数N,因而提高了整个系统的处理能力。此方法要求每个CPU核运行 自己的操作系统。为了实现这一点需要操作系统做很多特殊处理,也就是
说需要操作系统厂商进行定制,或者通过增加一层特殊中间软件,然后在 中间软件之上运行多个操作系统。其次,每个核上都要驻留操作系统映像, 必然会增加内存的开销。另外,由于底层设备可能只在某个核上才能访问, 因此必然会影响上层应用软件操作的透明性。

发明内容
本发明所解决的技术问题在于提供一种分布式系统中提高多核CPU
处理能力的方法,以解决在保持现有分布式软件结构基本不变的前提下如
何充分发挥多核CPU的性能来提高分布式系统处理能力的问题。
为了解决上述问题,本发明提供了一种分布式系统中提高多核CPU 处理能力的方法,其中,包括以下步骤
(1 )根据每一个CPU的节点确定功能节点数目、功能节点类型和功 能节点标识,并录入数据库表或者配置文件中;
(2)所述系统的控制模块根据上述内容创建至少一个应用进程,检 测退出的应用进程,并重新创建应用进程;
(3 )对所述系统中原有的功能节点标识的获取方法修改为在应用进 程入口直接读取传入参数。
本发明所述的方法,其中,所述步骤(2)包括
(21 )所述系统的控制模块根据CPU的物理地址查询数据库表或者 配置文件获得需要创建的功能节点数目、每一个功能节点的类型以及每一 个功能节点的节点标识;
(22 )根据每一个功能节点标识和系统原有的算法确定这每一个节点 标识对应的每一个通讯地址,然后4巴这每一个通讯地址添加到该CPU节 点巾;
(23 )创建至少 一个应用进程,每个应用进程运行与功能节点类型相 应的应用程序,并4巴每一个功能节点标识通过参凄t传递分配给对应的每一 个应用进程,同时,建立一张进程ID和功能节点标识与功能节点类型对
应表;
(24)检测创建的每个应用进程,如发现某个应用进程退出,则查询 该应用进程ID和功能节点标识与功能节点类型对应表以确定退出的应用 进程的功能节点标识和功能节点类型,然后重新创建一个应用进程,运行 与此功能节点类型对应的应用程序并把此功能节点标识传给重新创建的 应用进程,同时更新应用进程ID和功能节点标识与功能节点类型对应表。
本发明所述的方法,其中,所述步骤(l)中进一步包括
所述某个CPU节点上配置的功能节点数目可以大于该CPU包含的核 数目,并且可以在一个CPU节点上同时配置不同类型的功能节点。
本发明所述的方法,其中,步骤(2)中所述系统的控制模块根据上 述内容创建至少一个应用进程,为系统的控制模块根据上述内容利用fork 创建至少一个应用进程。
本发明所述的方法,其中,所述步骤(3)为,对所述系统中原有的 功能节点标识的获取方法修改为在应用进程入口 main函数直接读取传入 参数,然后把入参转化为功能节点标识。
本发明所述的方法,其中,所述步骤(3)中进一步包括根据所述 系统原有算法,不同的功能节点类型相应的应用程序会使用与自己的功能 节点标识对应的通讯地址和其它功能节点进行通信;
其中,所述步骤(24)中进一步包括所述系统的控制模块重复执行 这一过程。
本发明所述的方法,其中,所述CPU的节点,为物理CPU的节点。
本发明与现有技术相比,本发明提高了分布式系统中多核CPU的处 理能力,在几乎不改变现有分布式系统软件架构的前提下,运用本发明使 得釆用多核CPU节点替换单核CPU节点来提升分布式系统处理能力的想 法变得实际可行;另外,本发明打破了分布式系统中物理CPU节点和功
能节点之间--对应关系,每个物理CPU节点之上可以驻留一个或多个
功能节点,这些功能节点的类型可以相同也可以不同,从而方便了分布式 系统的设计。


图1是本发明的分布式系统的物理CPU节点连接示意图2是本发明实施例中数据库表结构设计示意图3是本发明实施例所述的图1中A、 B、 C在数据库中配置的数据 示意图4是本发明实施例所述步骤中的进程pid和节点标识对应关系示意 图; —
图5是本发明实施例所述的一种分布式系统中提高多核CPU处理能 力的方法大致流程图6是本发明实施例所述第二步的控制模块处理流程示意图。
具体实施例方式
本发明的目的是介绍一种分布式系统中提高多核CPU处理能力的方 法,以解决在保持现有分布式软件结构基本不变的前提下如何充分发挥多 核CPU的性能来提高分布式系统处理能力的问题。以下对
具体实施例方式
进行详细描述,但不作为对本发明的限定。
本发明大致思想在于提出了另外一种解决方法多核CPU之上仍然 运行一个SMP操作系统,在操作系统之上创建多个进程,每个进程运行 相同或者不同的应用程序,每个应用进程对外都表现为分布式系统中的一 个功能节点,相当于增加了分布式系统中的功能节点数目。对操作系统来 说,多个应用进程的并发运行,意味着工作线程数目的增多,因而提高了 多核CPU的处理能力。而对于该分布式系统来说,本发明增加了系统中 的功能节点数目,因而提高整个分布式系统的处理能力。
本发明通过在SMP操作系统之上创建多个运行相同或者不同应用程 序的进程,每个进程对外都表现为分布式系统中的一个功能节点,增加了 分布式系统中的功能节点数目,提高了分布式系统的处理能力。本质上, 本发明是把多核CPU强大的处理能力转化为分布式系统中功能节点的增
加,而CPU节点数目保持不变。而背景技术中的多核拆分方法是把多核
CPU拆分成多个CPU节点,增加了 CPU节点的数目,功能节点数目随之
增加。但是本发明克服了多核拆分方法的缺点,首先本发明不需要操作系
统厂商的定制或者附加额外的中间软件,因为任何一款通用多核CPU的 推出,基本上会支持主流的操作系统;其次,多核CPU之上只运行一个 SMP操作系统映像,减少了内存开销;另外,由于只运行一个SMP操作 系统映像,因此不再存在上层软件访问设备的透明性问题。
对于一个分布式系统,每个功能节点都有自己唯一的标志,系统需要 使用 一种方法能够知道系统内到底配置了哪些功能节点;系统内的各功能 节点之间可以相互通讯,对于上层软件来说,能够把消息发送到目的节点 的唯一条件就是给出目的功能节点的标志。为此,系统必须建立一张功能 节点标识和通讯地址对应表,常见的通讯地址包括IP地址、以太网地址 等。
商用的分布式系统设备,如电信设备, 一般都是由多个机框组成,每 个机框包括很多插槽,各CPU节点以单板形式插入不同槽位并和机框背
面的背板相连,背板提供电源、以太网连接和其它一些信号线。另外,一
块单板上可以存在多个物理CPU节点,不同CPU使用物理CPU号区分。 因此,每个CPU节点都有自己的物理地址框号、槽位号和物理CPU号, 为了描述方便,只取槽位号和物理CPU号作为物理地址。很多分布式系 统直接使用CPU的物理地址作为功能节点的标识,这是因为这些分布式 系统的一个CPU节点上只驻留一个功能节点。
分布式系统中各CPU节点之间一般通过局域网进行连接。附图l给 出了 一个分布式系统的物理CPU节点连接示意图。CPU节点A的物理地 址为1槽位的1号CPU,即(l, 1); CPU节点B的物理地址为l槽 位的2号CPU,即(1, 2 ); CPU节点C的物理地址为2槽位的1号CPU, 即(2, 1); CPU节点A和CPU节点B位于相同槽位的一块单寺反上。
本发明申请的主要特征包括以下处理步骤
步骤501,初始的数据配置过程;
步骤502,控制模块的处理过程;
步骤503,原有系统中获取本功能节点标识的方法需要修改。
所述的步骤501中,需要把系统中所有的功能节点都配置到数据库中 或者一个配置文件中,通过配置系统才能够知道存在哪些功能节点;
每一个物理CPU节点,首先需要确定实际驻留的功能节点数目n(n 大于等于1 )和每一个功能节点的类型,每一个功能节点由运行在该CPU 节点上一个应用进程来表示;其中,功能节点的类型决定了应用进程运行 的应用程序。然后需要为每一个功能节点分配节点标识。最后把功能节点 数目、功能节点类型和功能节点标识录入数据库表中或者配置文件中;
实际应用中,对于单核CPU节点, 一般n等于l,即一个单核CPU 节点上一般只驻留一个功能节点;对于多核CPU节点,为了提高多核CPU 的处理能力,n—般大于l,即一个多核CPU节点对外表现为多个功能节 点。但是,允许在一个CPU节点上配置的功能节点数目大于该CPU包含 的核数目,并且允许在一个CPU节点上同时配置不同类型的功能节点。
所述的步骤502中,各CPU节点的操作系统首先以管理员身份运行 控制模块进程,控制模块进程以CPU的物理地址查询数据库或者配置文 件获得需要创建的功能节点数目n、每一个功能节点的类型以及n个功能 节点的节点标识;
根据n个功能节点标识和系统原有的算法确定这n个节点标识对应的 n个通讯地址,然后4巴这n个通讯地址添加到该CPU节点中;
创建n个应用进程,每个应用进程运行与功能节点类型相应的应用程 序(此应用程序须经过步骤3做少量修改),并把n个功能节点标识通过 参数传递分配给对应的每一个应用进程;同时,建立一张进程ID和功能 节点标识与功能节点类型对应表;每个进程运行的应用程序由其代表的功 能节点类型决定,代表相同类型功能节点的应用进程运行相同的应用程 序,代表不同类型功能节点的应用进程运行不同的应用程序;
检测创建的n个应用进程,如果发现某个应用进程退出,则查询进程 ID和功能节点标识与功能节点类型对应表以确定退出进程的功能节点标
识和功能节点类型,然后重新创建一个应用进程运行与此功能节点类型对 应的应用程序并把此功能节点标识传给它,同时更新进程ID和功能节点 标识与功能节点类型对应表。重复执行这一过程。
所述步骤503中,原有应用软件获取本功能节点标识的方法需要修 改。上述步骤2中,控制模块在创建功能节点时已经把功能节点标识以参 数形式传入,因此本功能节点标识的获取改为在应用进程入口直接读取传 入参数。根据系统原有算法,不同的功能节点(应用进程)会使用与自己 的节点标识对应的通讯地址和其它功能节点进行通信。
经过上述步骤的处理,多核CPU上的每一个应用进程对外都完全表 现为分布式系统中的一个功能节点。
上面是本发明的基本原理,在不同的操作系统和不同的分布式系统上 的实现可能有些细节差异,但基本原理、基本思想是一致的。为了描迷方便,下面的实施例里给出一些约定。 一是假设分布式系统 中所有功能节点的类型都是相同的,即代表功能节点的应用进程运行相同 的应用程序,因此进程ID和功能节点标识与功能节点类型对应表就简化 为进程ID和功能节点标识对应表;二是数据配置是通过数据库表进行配 置的,并且数据库表的设计如图2所示,其中物理的槽位号和物理的CPU 号为关键字,对于每个物理CPU,需要配置有效的功能节点数目n和每 个功能节点的逻辑CPU号,另外,图2中约定最多可配置6个功能节点; 三是功能节点标识由槽位号和逻辑CPU号构成;四是功能节点之间使用 IP地址进行通讯。需要说明的是这些约定仅仅是为了更加清楚的描述实施 步骤,发明内容本身并不需要强加这些约定。
以下结合附图,在linux搡作系统上对本发明的具体实施进行详细说明。
下面的描述中仅包括与本发明相关的实施步骤,对于实现一个分布式 系统的其它必不可少的步骤,由于与本发明无关,说明中没有介绍。
第一步,初始的数据配置过程的实施步骤如下
结合附图1,下面描述物理CPU节点A、 B和C在数据库表中中是
如何配置的。假设图l中,CPU节点A是具有4个核的CPU, CPU节点 B是具有2个核的CPU, CPU节点C是单核CPU。
对于CPU节点A,假设需要驻留3个功能节点,即有效的功能节点 数目为3个。同时为这3个功能节点分配逻辑CPU号,分别为1、 2、 3。 按照上述约定,这些功能节点的节点标识分别为(1,1)、 ( 1, 2) 、 (1,3)。
对于CPU节点B,假设需要驻留2个功能节点,即有效的功能节点 数目为2个。同时为这2个功能节点分配逻辑CPU号,分别为4、 5。按 照上述约定,这些功能节点的节点标识分别为(1, 4) 、 (1, 5)。
对于CPU节点C,是一个单核CPU,假设只需要驻留1个功能节点, 即有效的功能节点数目为l个。同时为这1个功能节点分配逻辑CPU号, 为1。按照上述约定,此功能节点的节点标识为(2, 1)。
针对图1中的A、 B、 C三个物理CPU节点,最终数据库表中录入的 数据,如图3所示。
第二步,控制模块的处理过程的实施步骤如下 结合附图6,下面描述控制模块的具体实施步骤。
见附图6的步骤601,修改操作系统的启动配置文件,使得各CPU 节点的操作系统起来后能够自动运行控制模块进程。比如控制模块的可执 4亍文^f牛4立于/home/user/MainContro1,那么在/etc/rc.local文j牛最后添力口一 行/home/user/MainContro1。
见图6的步骤602,控制模块进程调用系统接口获取本CPU节点的物
理地址。
见图6的步骤603,控制模块进程以CPU的物理地址查询数据库获得 需要创建的功能节点数目n以及n个功能节点的节点标识。以物理CPU 节点A为例,控制模块进程用物理地址(1, 1)查询数据库,查询结果 为有效功能节点数目为3个,3个功能节点的逻辑CPU号为1、 2、 3, 即要创建的功能节点数目为3个,3个功能节点的标识为(1, 1) 、 (1,
2) 、 (1, 3)。
见图6的步骤604,控制模块进程根据n个功能节点标识和系统计算 IP地址的算法计算出n个IP地址,然后把这n个IP地址添加到物理CPU 节点中。
见图6的步骤605,控制模块进程用fork创建n个子进程,每个子进 程execl功能节点应用程序,并把节点标识以execl的参数形式传入每一 个子进程。同时需要本地创建一张表来保存各子进程pid和功能节点标识 的对应关系。以CPU节点A为例,3个子进程pid和3个功能节点标识的 对应关系,如图4所示。
见图6的步骤606,控制模块进程通过wait系统调用来监测各子进程 (正常退出或者异常退出),wait返回的是退出子进程的pid。
见图6的步骤607,用退出子进程的pid查询子进程pid和功能节点 标识对应关系表,得到退出子进程的功能节点标识。
见图6的步骤608,重新fork—个子进程,该子进程execl功能节点 应用程序,并把此功能节点标识以参数形式传入该子进程,同时更新子进 程pid和功能节点标识对应关系表。
跳转到图6的步骤606。
第三步,原有系统中功能节点应用程序的修改步骤如下
原有应用软件获取本功能节点标识的方法需要修改。在控制模块进程 创建子进程时已经把功能节点标识以参数形式传入,因此本功能节点标识 的获取改为在应用进程入口 main函数直接读取传入参数,然后把入参转 化为功能节点标识。原有系统中功能节点应用程序不再需要做其它任何改 动。
本发明专利通过在一个多核CPU上运行多个应用进程的方式,提高 了多核CPU的处理能力,增加了分布式系统中的功能节点数目,因而提 高了分布式系统的处理能力。
本发明的实施例所述的内容4^高了分布式系统中多核CPU的处理能
力。在几乎不改变现有分布式系统软件架构的前提下,运用本发明使得采
用多核CPU节点替换单核CPU节点来提升分布式系统处理能力的想法变 得实际可行;另外,本发明打破了分布式系统中物理CPU节点和功能节 点之间——对应关系,每个物理CPU节点之上可以驻留一个或多个功能 节点,这些功能节点的类型可以相同也可以不同,从而方便了分布式系统 的设计。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质
形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
权利要求
1、一种分布式系统中提高多核CPU处理能力的方法,其特征在于,包括以下步骤(1)根据每一个CPU的节点确定功能节点数目、功能节点类型和功能节点标识,并录入数据库表或者配置文件中;(2)所述系统的控制模块根据上述内容创建至少一个应用进程,检测退出的应用进程,并重新创建应用进程;(3)对所述系统中原有的功能节点标识的获取方法修改为在应用进程入口直接读取传入参数。
2、 如权利要求l所述的方法,其特征在于,所述步骤(2)包括(21 )所述系统的控制模块根据CPU的物理地址查询数据库表或者 配置文件获得需要创建的功能节点数目、每一个功能节点的类型以及每一 个功能节点的节点标识;(22 )根据每一个功能节点标识和系统原有的算法确定这每一个节点 标识对应的每一个通讯地址,然后4巴这每一个通讯地址添加到该CPU节 点中 ,(23 )创建至少一个应用进程,每个应用进程运行与功能节点类型相 应的应用程序,并4巴每一个功能节点标识通过参数传递分配给对应的每一 个应用进程,同时,建立一张进程ID和功能节点标识与功能节点类型对应表;(24)检测创建的每个应用进程,如发现某个应用进程退出,则查询 该应用进程ID和功能节点标识与功能节点类型对应表以确定退出的应用 进程的功能节点标识和功能节点类型,然后重新创建一个应用进程,运行 与此功能节点类型对应的应用程序并把此功能节点标识传给重新创建的 应用进程,同时更新应用进程ID和功能节点标识与功能节点类型对应表。
3、 如权利要求l所述的方法,其特征在于,所述步骤(l)中进一步包括所述某个CPU节点上配置的功能节点数目可以大于该CPU包含的核 数目,并且可以在一个CPU节点上同时配置不同类型的功能节点。
4、 如权利要求l所述的方法,其特征在于,步骤(2)中所述系统的 控制模块根据上述内容创建至少一个应用进程,为系统的控制模块根据上 述内容利用fork创建至少一个应用进程。
5、 如权利要求l所述的方法,其特征在于,所述步骤(3)为,对所 述系统中原有的功能节点标识的获取方法修改为在应用进程入口 main函 数直接读取传入参数,然后把入参转化为功能节点标识。
6、 如权利要求l所述的方法,其特征在于,所述步骤(3)中进一步 包括根据所述系统原有算法,不同的功能节点类型相应的应用程序会使 用与自己的功能节点标识对应的通讯地址和其它功能节点进行通信。
7、 如权利要求2所述的方法,其特征在于,所述步骤(24)中进一 步包括所述系统的控制模块重复执行这一过程。
8、 如权利要求l所述的方法,其特征在于,所述CPU的节点,为物 理CPU的节点。
全文摘要
本发明公开了一种分布式系统中提高多核CPU处理能力的方法,其特征在于,包括步骤(1)根据每一个CPU的节点确定功能节点数目、功能节点类型和功能节点标识,并录入数据库表或者配置文件中;(2)所述系统的控制模块根据上述内容创建至少一个应用进程,检测退出的应用进程,并重新创建应用进程;(3)对所述系统中原有的功能节点标识的获取方法修改为在应用进程入口直接读取传入参数。本发明解决了在保持现有分布式软件结构基本不变的前提下如何充分发挥多核CPU的性能来提高分布式系统处理能力的问题。
文档编号G06F9/46GK101349974SQ200710130560
公开日2009年1月21日 申请日期2007年7月16日 优先权日2007年7月16日
发明者忱 刘, 周海山, 骐 杨, 童小九 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1