首页> 中国专利> 多核系统中共享内存的管理方法和装置

多核系统中共享内存的管理方法和装置

摘要

本发明提供了一种多核系统中共享内存的管理方法和装置。该方法主要包括:在多核系统中配置全局共享的内存和局部共享的内存;多核系统中的所有中央处理器CPU都能够访问所述全局共享的内存,多核系统中的部分CPU能够访问所述局部共享的内存。该装置主要包括:全局共享内存配置模块和局部共享内存配置模块。利用本发明,可以实现共享内存在各CPU之间自由传递,支持在各CPU上灵活配置内存共享方式,实现多种内存共享方式并存。从而可以简化多核间通信的过程,大大降低共享内存访问冲突的机率,有利于提高多核系统性能。

著录项

  • 公开/公告号CN101246466A

    专利类型发明专利

  • 公开/公告日2008-08-20

    原文格式PDF

  • 申请/专利权人 华为技术有限公司;

    申请/专利号CN200710178405.4

  • 发明设计人 陈定春;

    申请日2007-11-29

  • 分类号G06F15/177(20060101);G06F15/167(20060101);G06F12/02(20060101);

  • 代理机构11260 北京凯特来知识产权代理有限公司;

  • 代理人郑立明

  • 地址 518129 广东省深圳市龙岗区坂田华为总部办公楼

  • 入库时间 2023-12-17 20:41:01

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-11-23

    未缴年费专利权终止 IPC(主分类):G06F15/177 授权公告日:20120620 终止日期:20171129 申请日:20071129

    专利权的终止

  • 2012-06-20

    授权

    授权

  • 2008-10-15

    实质审查的生效

    实质审查的生效

  • 2008-08-20

    公开

    公开

说明书

技术领域

本发明涉及计算机应用领域,尤其涉及一种多核系统中共享内存的管理方法和装置。

背景技术

当今电子、通信、IT行业中,不论是嵌入式系统,还是通用计算机系统,单核处理器的局限性日益明显,已经越来越不能满足用户对高性能、大容量的要求。于是,多核(即多CPU(Central Processing Unit,中央处理器))技术应运而生,并且不断发展、成熟,在市场中应用范围迅速扩大,多核技术取缔传统的单核技术已成为不可避免的趋势。

多核内存管理技术是多核技术中的一种关键技术,整个系统架构都依赖于它,其性能的好坏直接影响到多核处理器的性能及其竞争力,因此,不断改进、优化多核内存管理技术对多核系统来说是非常重要的。

现有技术中一种内存管理方法为:不支持内存在多核之间传递,当多核之间进行通信时,需要对内存内容进行多次复制。

在该方案中,一种两个CPU之间进行通信时的原理示意图如图1所示,具体处理流程包括如下步骤:

步骤1、CPU1从自己的内存空间内申请内存块;

步骤2、CPU1构造数据包,该数据包中包含CPU1与CPU2的通信内容;

步骤3、CPU1将上述数据包承载在申请的内存块中,并将数据包发送到CPU1与CPU2之间的通信线路上;

步骤4、CPU1释放上述申请的内存块,以便内存块重复利用;

步骤5、上述数据包通过通信线路被传输到CPU2;

步骤6、CPU2从自己的内存空间内申请内存块;

步骤7、CPU2从通信线路上读取上述数据包,并数据包存放到自己申请的内存块内;

步骤8、CPU2处理上述数据包;

步骤9、CPU2处理上述数据包完毕,释放申请的内存块,通信结束。

在实现本发明的过程中,发明人发现上述现有技术中的内存管理方法的缺点为:由于内存不能在多核间传递,导致通信过程相当繁杂,其间的内存申请、释放开销大,而且,通信过程越复杂,其开销就越大。从而降低了系统性能,不能满足多核芯片、多核操作系统等前沿技术的新需求。

发明内容

本发明实施例的目的是提供一种多核系统中共享内存的管理方法和装置,从而可以解决现有的由于内存不能在多核间传递,导致多核间通信过程繁杂,多核间通信的开销大的问题。

本发明实施例的目的是通过以下技术方案实现的:

一种多核系统中共享内存的管理方法,包括:

在多核系统中配置全局共享的内存和局部共享的内存,多核系统中的所有中央处理器CPU都能够访问所述全局共享的内存,多核系统中的部分CPU能够访问所述局部共享的内存;

所述多核系统中的CPU通过所述全局共享的内存和局部共享的内存来承载信息。

一种多核系统中共享内存的管理装置,包括:

全局共享内存配置模块,用于在多核系统中配置全局共享的内存,多核系统中的所有CPU都能够访问所述全局共享的内存;

局部共享内存配置模块,用于在多核系统中配置局部共享的内存,多核系统中的部分CPU能够访问所述局部共享的内存。

由上述本发明实施例提供的技术方案可以看出,本发明实施例通过在多核系统中配置全局共享的内存和局部共享的内存。从而可以支持共享内存在各CPU之间自由传递,大大降低了共享内存访问冲突的机率,有利于提高多核系统性能。

附图说明

图1为现有技术中一种两个CPU之间进行通信的原理示意图;

图2为本发明实施例一提供的一种多种共享方式并存的内存共享示意图;

图3为本发明实施例一提供的通过内存映射实现的全局共享区和局部共享区的划分原理示意图;

图4为本发明实施例一提供的一种在多核间传递内存块的示意图;

图5为本发明实施例二提供的一种多种类型的共享内存的利用率示意图;

图6为本发明实施例二提供的一种基于最小匹配原则的内存匹配处理流程图;

图7为本发明实施例三提供的一种内存层面的多播技术原理示意图;

图8为本发明实施例四提供的实现多核内存共享的处理装置的实施例的结构示意图。

具体实施方式

本发明实施例提出了多核间全局共享(Global Shared)、局部共享(Local Shared)、全共享(Full Shared)、半共享(Half Shared)等多种共享方式并存的内存共享技术。下面分别介绍上述各种共享方式。

全局共享:全局共享的内存从访问权限的角度考虑,所有CPU均可以访问;

局部共享:局部共享的内存从访问权限的角度考虑,仅有部分CPU可以访问,其它CPU不能访问;

全共享:全共享的内存从操作权限的角度考虑,访问的CPU可完全控制;

半共享:半共享的内存从操作权限的角度考虑,访问的CPU只有部分权限,比如可读但不能写,可使用内存但不能申请内存等。

基于上述各种共享方式,本发明实施例在多核系统中配置上述全局共享的内存和局部共享的内存。

并且,在所述全局共享的内存中配置全局全共享和全局半共享的内存,多核系统中的所有CPU都能够对所述全局全共享的内存进行完全控制,多核系统中的部分CPU能够对所述全局半共享的内存进行完全控制,而其它CPU只能够对所述全局半共享的内存进行部分控制。

并且,在所述局部共享的内存中配置局部全共享和局部半共享的内存,多核系统中的能够访问所述局部共享的内存的部分CPU都能够对所述局部全共享的内存进行完全控制,能够访问所述局部共享的内存的部分CPU中的特定CPU,能够对所述局部半共享的内存进行完全控制。

本发明实施例根据多核系统中的各种业务数据包的长度,配置各种长度类型的所述全局共享的内存和局部共享的内存。当多核系统中存在多种类型的所述全局共享内存和/或所述局部共享的内存能够承载同一种业务数据包时,选择长度最小的类型的所述全局共享内存和/或所述局部共享的内存中的空闲内存块来承载所述业务数据包。

本发明实施例将承载业务数据包的全局共享的内存在各个CPU之间进行传递,由最后使用所述全局共享的内存的CPU将所述全局共享的内存释放掉。将多播数据包承载于所述全局共享的内存中,将所述多播数据包的地址信息复制多份,向各个目的CPU分别发送多份所述多播数据包的地址信息,所述各个目的CPU根据所述地址信息,从所述全局共享的内存中获取所述业务数据包。

下面结合附图来详细描述本发明实施例。

实施例一、该实施例提供的一种多种共享方式并存的内存共享示意图如图2所示,该多种共享方式并存的原理是将内存共享区划分成若干个子区域,并灵活设置每个子区域的访问权限和读写权限,以实现多种共享方式并存的目的。

如图2所示,根据CPU应用模型,将共享内存划分成若干个全局共享区、局部共享区,全局共享区和局部共享区的划分与各CPU上业务分布有关。全局共享区允许所有CPU访问,局部共享区允许部分(一个或几个)CPU访问,各局部共享区之间不能互相访问。

如图2所示,局部共享区1只允许CPU1和CPU2访问,局部共享区m只允许CPUn访问,全局共享区则允许所有CPU(CPU1~CPUn)访问。因此,通过将共享内存区划分成全局共享区和局部共享区,可以降低多CPU竞争的可能性,把原来的所有CPU竞争变成了部分CPU竞争或者完全不竞争(一个CPU独享局部共享区)。

根据可访问内存区的各个CPU的操作权限,可以进一步将某一局部共享区或全局共享区细分成全共享区和半共享区。如图2所示,局部共享区1的全共享区,CPU1和CPU2都可完全控制,而局部共享区1的半共享区,CPU1只有部分操作权限,CPU2可完全控制;局部共享区m的全共享区,CPUn可完全控制,而局部共享区m的半共享区,CPUn只有部分操作权限;全局共享区的全共享区,所有CPU均可完全控制,而全局共享区的半共享区,CPU1~CPUn-1只有部分操作权限,CPUn可完全控制。

因此,通过将全局共享区或多CPU均可访问的局部共享区划分成全共享区和半共享区,明确各个CPU的操作权限,可以进一步降低多CPU竞争,在半共享区内,各CPU按照各自的权限进行操作,仅允许一个CPU有完全控制权限。

上述多种共享方式并存的方法可以适用于多核系统中的多种应用场景,比如,应用场景1,为各个CPU分配独立的代码段和数据段,各CPU不互斥地访问自己的数据段;应用场景2,只允许一个CPU修改心跳计数值,其它CPU只读取心跳计数值。

实施例一提供的通过内存映射实现的全局共享区和局部共享区的划分原理示意图如图3所示。

假设基于通用MIPS(Microprocessor without Interlocked  PipelineStages,无内部互锁流水级的微处理器)架构的某多核系统中有32个CPU,CPU0负责控制维护业务,CPU1、CPU2负责多播处理及MAC层的消息收发,CPU3~CPU31能独立处理语音业务和数据业务。由于各CPU是独立工作的,所以需要在共享内存中划分32个独立的代码段和数据段(局部共享区),供各个CPU处理业务使用;另外,各个CPU之间需要通信,且内存需要在CPU间传递,因此,还需要在共享内存中划分一个多核通信段(全局共享区)。

在实施例一中,全局共享区和局部共享区的划分可通过内存映射来实现,该内存映射是指虚拟地址到物理地址一种转换关系。在MIPS架构的多核处理器中,CPU是以虚拟地址访问内存的,如图3所示,在各CPU上,将相同的虚拟地址空间映射到不同的物理内存上,可以实现局部共享区,在CPU0上,访问的数据段是实箭头所指部分;在CPU31上,访问的数据段是虚箭头所指部分。类似地,在各CPU上,将相同的虚拟地址空间映射到同一片物理内存上,可以实现全局共享区,如图3中的多核通信段。

各CPU在访问各自的代码段和数据段时,是不需要互斥的,这样就达到了尽可能减少内存访问冲突的目的,从而提高多核系统性能。多核处理器都提供相关的硬件实现内存映射,内存映射也可以由软件实现。

在多核系统中,由于多核之间需要互相通信,而且还要支持内存在多核间进行传递,那么动态内存池必须部署在全局共享区内,这样所有CPU均可以在动态内存池中申请、释放内存,并且申请得到的内存对其它CPU亦是可见的,可以用来在CPU之间进行传递。

实施例一提供的一种在多核间传递内存块的示意图如图4所示。

如图4所示,在全局共享区内,以软件的方法,为每个CPU建立一个私有内存池,这里的私有是相对的,并不是其它CPU不能访问,而是指该私有内存池的所有者可以从中申请、释放内存,而其它CPU只能使用并释放,但没有申请权限,因此,该私有内存池为半共享内存区。同时,考虑到如果为每个CPU都建立私有内存池所需要的内存较多,而且在业务流量突发的情况下,存在资源不足的风险。因此,在全局共享区内,再建立一个公共内存池,该公共内存池为全共享区。

私有内存池和公共内存池设置为多大才能达到资源和效率之间的平衡点,在实际应用中,可以采用一种近似原则:设置在正常业务情况下,约80%以上的内存操作发生在私有内存池内。具体配置可以根据实际业务模型进行调整。

在上述全共享与半共享相结合的内存共享方式下,大部分情况下,CPU可以在自己的私有内存池里申请内存,只有在少数情况下,才会去公共内存池申请内存,因此,多CPU同时申请内存的冲突会变得很小,达到了本发明降低共享内存访问冲突的目的。

由于多核通信段位于全局共享区,所有CPU均可访问该区域,而且各CPU的私有内存池中的内存块可以在多核间任意传递,并采用终点释放原则,由最后使用内存块的CPU将内存块释放回最先申请该内存块的CPU。如图4所示,CPU0申请的内存块可以在其它CPU间传递,并由最后使用内存块的CPU(CPU1)将内存块释放回CPU0的私有内存池。利用上述多核间传递内存块的方法可以实现多核间通信0拷贝,避免了通信内容多次拷贝。

实施例二,该实施例提供了多核系统中共享内存类型多样化设计,能根据具体的业务需求,配置相应的内存类型和内存块数量,自动选择合适的内存以承载、传递业务数据,提高内存利用率。

假设多核系统中有多种业务类型,每种业务的数据包长度不等,其中最大的数据包长度为1024字节,那么可以将共享内存配置成32字节、64字节、128字节、256字节、512字节、1024字节等多种类型,并按照实际业务模型,为各种类型的内存分配一定数量的内存块,形成内存池。比如,如果128字节~512字节的数据包数量占总流量的50%以上,那么就为128字节、256字节、512字节的内存多分配一些内存空间,为其它类型的内存少分配一些内存空间。

该实施例提供的一种多种类型的共享内存的利用率示意图如图5所示,如图5所示,30字节的数据包占20%,500字节的数据包占70%,1024字节的数据包占10%,相应的内存利用率为93.75%,97.66%,93.75%,加权内存利用率为(20%*93.75%+70%*97.66%+10%*100%)  =97.112%,由此可见,相对于单一的内存类型来说,内存利用率大大提高了。

实施例二提供的一种基于最小匹配原则的内存匹配处理流程图如图6所示。对于不同的业务类型,通过“最小匹配原则”快速选择适合的内存类型,具体处理过程如下:

在开始选择内存时,首先判断系统中是否存在与业务数据包匹配的内存,当判断系统中存在多种类型的内存都与业务数据包匹配时,选择长度最小的第一内存类型来承载该业务数据包。然后,继续判断该第一内存类型中是否存在空闲的内存块,如果是,选择其中空闲的内存块,内存匹配处理流程结束;否则,继续选择与业务数据包匹配的长度第二小的第二内存类型,并继续判断该第二内存类型中是否存在空闲的内存块。重复继续上述处理,直到选择到空闲的内存块来承载该业务数据包。

例如,业务数据包长度为500字节,系统中有512字节、1024字节的两种类型的内存可以用于承载该业务数据包,根据“最小匹配原则”,首先选择512字节的内存,如果该512字节的内存没有相应的空闲内存块,则进一步选择1024字节的内存。

实施例三,该实施例提供的提出的一种内存层面的多播技术原理示意图如图7所示。该实施例基于多核间内存共享,提出了内存层面的多播技术,具体处理过程如下:在共享内存区划分时,为支持多播功能的CPU开辟一个或多个专用的多播池,多播池中存放一定数量的多播消息块,比如4096个,具体数量依据多播业务的多少而定,每个多播消息块包括多播包地址、大小域及多播控制域(如多播计数、多播锁等),所有多播消息块引用同一个多播包的地址。

在多核间进行数据包多播时,不复制多播数据包,而通过消息通道将多播数据包的信息(包括地址及其大小)传递到目的地,由目的CPU根据多播数据包的信息获得多播数据包并进行处理。

如图7,CPU1收到一个多播数据包,将该多播数据包存放在全局共享区的内存中。然后,CPU1访问专用的多播池,申请并构造多播消息包(多播消息块中包含多播数据包的存放地址及其大小等信息),并将构造好的多播消息包依次传递到各个目的CPU。接着,各个目的CPU根据多播消息包中的信息解析多播数据包的存放地址及其大小,根据该存放地址获取多播数据包,对多播包进行相应的处理。在上述处理过程中,始终只有一份多播数据包,从而避免了多播过程中复制多播数据包的环节,提高了多播处理效率。

实施例四、该实施例提出的实现多核内存共享的处理装置的实施例的结构示意图如图8所示,包括如下模块:

全局共享内存配置模块,用于在多核系统中配置全局共享的内存,多核系统中的所有CPU都能够访问所述全局共享的内存;包括:全局全共享内存配置模块、全局半共享内存配置模块。

局部共享内存配置模块,用于在多核系统中配置局部共享的内存,多核系统中的部分CPU能够访问所述局部共享的内存。包括:局部全共享内存配置模块、局部半共享内存配置模块。

内存映射模块,用于将各个CPU的虚拟地址空间映射到同一个物理地址空间,为各个CPU配置所述全局共享的内存;将各个CPU的虚拟地址空间映射到不同的物理地址空间,为各个CPU配置所述局部共享的内存。

内存类型配置模块,用于根据各种业务数据包的长度,配置对应的各种长度类型的所述全局共享的内存和/或所述局部共享的内存。

内存匹配处理模块,用于当多核系统中存在多种类型的所述全局共享的内存和/或所述局部共享的内存能够承载同一种业务数据包时,选择长度最小的类型的所述全局共享的内存或所述局部共享的内存中的空闲内存块来承载所述业务数据包。

内存传递模块,用于将承载业务数据包的所述全局共享的内存在各个CPU之间进行传递,由最后使用所述全局共享的内存的CPU将所述全局共享的内存释放掉。

多播数据包处理模块,用于将多播数据包承载于全局共享的内存中,将所述多播数据包的地址信息复制多份,向多个目的CPU分别发送多份所述多播数据包的地址信息,所述多个目的CPU根据所述地址信息,从所述全局共享的内存中获取所述多播数据包。

上述全局共享内存配置模块中的全局全共享内存配置模块,用于在所述全局共享的内存中配置全局全共享的内存,多核系统中的所有CPU都能够对所述全局全共享的内存进行完全控制;

上述全局共享内存配置模块中的全局半共享内存配置模块,用于在所述全局共享的内存中配置全局半共享的内存,多核系统中的部分CPU能够对所述全局半共享的内存进行完全控制,而其它CPU只能够对所述全局半共享的内存进行部分控制。

上述局部共享内存配置模块中的局部全共享内存配置模块,用于在所述局部共享的内存中配置局部全共享的内存,多核系统中的能够访问所述局部共享的内存的部分CPU都能够对所述局部全共享的内存进行完全控制;

上述局部共享内存配置模块中的局部半共享内存配置模块,用于在所述局部共享的内存中配置局部半共享的内存,多核系统中的能够访问所述局部共享的内存的部分CPU中的特定CPU,能够对所述局部半共享的内存进行完全控制。

综上所述,本发明实施例支持共享内存在各CPU之间自由传递,支持在各CPU上灵活配置内存共享方式,实现多种内存共享方式并存。从而可以简化多核间通信的过程,大大降低共享内存访问冲突的机率,有利于提高多核系统性能,并能实现多核通信时0拷贝。

本发明实施例采用内存类型多样化设计,提高了内存利用率,降低开发成本。实现了多核间内存层面的多播技术,提高了多播处理效率,有利于提高多核系统性能。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号