CN112612623B - 一种共享内存管理的方法和设备 - Google Patents
一种共享内存管理的方法和设备 Download PDFInfo
- Publication number
- CN112612623B CN112612623B CN202011562692.0A CN202011562692A CN112612623B CN 112612623 B CN112612623 B CN 112612623B CN 202011562692 A CN202011562692 A CN 202011562692A CN 112612623 B CN112612623 B CN 112612623B
- Authority
- CN
- China
- Prior art keywords
- hugepage
- segments
- mapping
- blocks
- address
- 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.)
- Active
Links
- 230000015654 memory Effects 0.000 title claims abstract description 187
- 238000000034 method Methods 0.000 title claims abstract description 55
- 238000013507 mapping Methods 0.000 claims abstract description 99
- 230000001174 ascending effect Effects 0.000 claims abstract description 28
- 230000004044 response Effects 0.000 claims abstract description 9
- 238000012545 processing Methods 0.000 claims description 27
- 230000008569 process Effects 0.000 claims description 24
- 230000001360 synchronised effect Effects 0.000 claims description 15
- 238000004891 communication Methods 0.000 claims description 9
- 238000007726 management method Methods 0.000 description 14
- 230000002093 peripheral effect Effects 0.000 description 8
- 238000013519 translation Methods 0.000 description 8
- 230000001133 acceleration Effects 0.000 description 5
- 238000004590 computer program Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/109—Address translation for multiple virtual address spaces, e.g. segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1008—Correctness of operation, e.g. memory ordering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/25—Using a specific main memory architecture
- G06F2212/254—Distributed memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/657—Virtual address space management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供了一种共享内存管理的方法和设备,包括:将***中的一个核设为主核,主核向***申请阈值数量空闲的hugepage块并将阈值数量空闲的hugepage块全部映射到主核的虚拟地址空间并按照hugepage块的物理地址大小升序排列;将升序排列后的hugepage块按照物理地址是否连续进行分段并判断所有段中是否存在满足子***内存需求的段;响应于所有段中存在满足子***内存需求的段,将满足子***内存需求的段按照长度大小进行降序排列并对排序后的段进行重映射以得到若干个段内虚实地址均连续的段;响应于若干个段内虚实地址均连续的段中存在满足***内存需求的段,释放满足***内存需求的段以外的所有hugepage块。通过使用本发明的方案,能够降低共享内存在多核之间流转的管理复杂度。
Description
技术领域
本领域涉及计算机领域,并且更具体地涉及一种共享内存管理的方法和设备。
背景技术
在许多基于硬件加速外设和多核通用处理器的软硬件并行处理***中,会将一个完整的处理流程划分成多个处理阶段,并根据各个处理阶段的特性,将其派分到硬件加速外设或者处理器核上,硬件加速外设和多个处理器核同时处理不同的阶段,以实现流水线式并行处理,进而提高***的整体性能。一般来说,硬件加速外设适合处理逻辑简单但是数据流量大的场景,因此该部分往往控制逻辑简单但是计算密集,且和内存交互频繁。通用处理器便于软件编程,适合处理控制逻辑复杂的流程。在软件层面,还会根据不同的处理阶段,将各个处理流程进一步细分并分派到不同的处理器核,各个核同时进行流水线式并行处理,以提高软件处理效率。实际实现中,会使用多进程技术,每个进程绑定到一个处理器核上,这样***实现便可以抛弃处理器的差异性,直接进行基于操作***的多进程编码。任意时刻每个进程都只是处理某一特定阶段,逻辑相对简单,软件能够根据本阶段的特点做出针对性的深度优化,因此这种处理方式具有高可靠性和高效率的特点。由于兼顾了处理效率和灵活性,因此这种基于硬件加速外设和多核通用处理器的软硬件并行处理***具有使用场景丰富、性能和可靠性较高的特点,但是在方案上也存在以下两个问题:1.各阶段处理的数据在逻辑上是一条完整数据的不同阶段,前一阶段的输出作为下一阶段的输入。由于不同核的虚拟地址和物理地址可能不同,因此数据从上一阶段流转到下一阶段的跨核流转可能存在数据拷贝的操作;2.内存使用限制问题。考虑到成本和内存访问效率问题,许多应用场景中外设硬件一般没有MMU单元,因此只能访问实地址连续的内存空间。处理器一般包含MMU单元,因此能够访问实地址不连续的内存空间。考虑到灵活性、内存访问效率及安全性等原因,软件使用的地址一般是虚拟地址。由于操作***内存分配机制的限制,其分配的内存即使虚拟地址连续,但是实际地址往往不连续,此时外设硬件访问这些空间可能会导致硬件访问异常。此外,即使现有的部分高端处理器,例如一些高端的基于ARMv8及以上内核版本的Cortex-A系列及高性能x86(64位版本)的处理器都带有用于外设的MMU(IOMMU)模块,可以实现硬件外设内存访问时虚实地址的转换,但是IOMMU单元的TLB缓冲区容量往往较小,在高并发大容量的数据处理过程中极容易出现地址缺页中断,导致处理效率降低,影响***的吞吐率。
针对以上问题,***最开始设计时就会提前规划出一段物理地址连续的内存作为不同处理阶段的共享内存,并在***启动时就规划好这段内存的物理地址和虚拟地址在所有处理器核上的映射关系。这样,在一个流程处理完后,输出数据作为下一个流程的输入数据,便可以根据各个核私有的TLB表(地址转换表。一块物理内存的实地址和其在进程中的虚拟地址转换关系称为一个TLB转换条目(item),这块物理内存称为一个页,页面的默认大小为4KB。TLB是不同转换条目的集合。操作***是以页为单位进行内存虚实地址管理的)确定其私有的虚拟地址,从而实现对相同物理地址的访问,达到数据共享的目的,省去了内参拷贝操作。
以上方案能够在一定程度上提高协议栈的性能,但是也存在以下问题:1.使用受限,需要在整个***设计时就预留一定物理内存资源和虚拟地址空间。这种提前预留与规划资源主要用于定制的嵌入式***,例如基站处理单元和专用服务器,但是不适合“板卡+通用服务器”的使用场景。此外,资源预留过多会导致资源浪费,过少会导致协议栈性能降低甚至失效。2.
数据流转效率低。现有方案虽然省去了数据流转过程的中的数据拷贝操作,但是由于这块提前规划好的物理内存在不同核上的虚拟和物理地址转换关系不一致,导致上一阶段(由一个单独的处理器核实现)的输出缓冲区必须先经过地址转换的操作,将共享的物理内存的物理地址转化到当前处理阶段所在核(通常和上一个阶段的处理器核不同)的虚拟地址空间,以便软件操作。由于地址转换需要经过多次***调用,对软件性能有一定的负面影响。
发明内容
有鉴于此,本发明实施例的目的在于提出一种共享内存管理的方法和设备,通过使用本发明的技术方案,能够使之前在专用设备才能使用的处理方案也能适用于现有的通用服务器等通用设备,能够降低共享内存在多核之间流转的管理复杂度,使得软件在内存管理方面更加简单,便于产品快速迭代。
基于上述目的,本发明的实施例的一个方面提供了一种共享内存管理的方法,包括以下步骤:
将***中的一个核设为主核,其余核设为从核,主核向***申请阈值数量空闲的hugepage(一种非4KB大小的页,例如2MB、1GB大小页)块(由多个单种长度的hugepage组成的集合)并将阈值数量空闲的hugepage块全部映射到主核的虚拟地址空间并按照hugepage块的物理地址大小升序排列;
将升序排列后的hugepage块按照物理地址是否连续进行分段并判断所有段中是否存在满足子***内存需求的段;
响应于所有段中存在满足子***内存需求的段,将满足子***内存需求的段按照长度大小进行降序排列并对排序后的段进行重映射以得到若干个段内虚实地址均连续的段;
响应于若干个段内虚实地址均连续的段中存在满足***内存需求的段,释放满足***内存需求的段以外的所有hugepage块;
申请控制面共享内存,将数据面共享内存的虚拟地址存入到控制面共享内存的相关数据指针,并设置主从初始化流程同步标记且基于所述同步标记启动从核的初始化。
根据本发明的一个实施例,申请控制面共享内存,将数据面共享内存的虚拟地址存入到控制面共享内存的相关数据指针,并设置主从初始化流程同步标记且基于所述同步标记启动从核的初始化包括:
响应于主从初始化流程同步标记置位,申请用于多核同步通信与控制的命名共享内存,并从该共享内存获取数据面共享内存的虚拟地址;
通过主从约定的hugepage命名,以读写方式打开主核创建的hugepage文件,并按照数据面共享内存地址进行指定地址映射以进行初始化;
通过设置主从同步标记向主核报告从核初始化的结果。
根据本发明的一个实施例,还包括:
响应于所有段中不存在满足子***内存需求的段,释放所有hugepage块;
主核向***申请2倍阈值数量空闲的hugepage块并将2倍阈值数量空闲的hugepage块全部映射到主核的虚拟地址空间并按照hugepage块的物理地址大小升序排列;
将升序排列后的hugepage块按照物理地址是否连续进行分段并判断所有段中是否存在满足子***内存需求的段。
根据本发明的一个实施例,对排序后的段进行重映射以得到若干个段内虚实地址均连续的段包括:
获取段的大小和段内单个hugepage块的大小,并以只读方式打开/dev/zero文件;
将打开的文件使用非指定地址映射到进程虚拟地址空间,映射大小为段的大小并判断映射是否成功;
响应于映射成功,记录映射成功的地址为ADDR0和当前支持的最大地址范围;
将文件关闭并对段内各个hugepage块进行指定地址的重映射。
根据本发明的一个实施例,将文件关闭并对段内各个hugepage块进行指定地址的重映射包括:
设置指定映射地址初始值为ADDR0、映射长度为单个hugepage块大小、初始hugepage文件为段内第一个hugepage文件;
使用映射地址初始值配置映射地址MAP_ADDR、大小HUGEPAGE_SIZE及hugepage文件;
打开已配置的hugepage文件,并按照映射地址和大小进行映射;
更新映射地址MAP_ADDR为MAP_ADDR+HUGEPAGE_SIZE并更新hugepage文件;
重复上述步骤直到段的虚实地址均连续。
本发明的实施例的另一个方面,还提供了一种共享内存管理的设备,设备包括:
排序模块,排序模块配置为将***中的一个核设为主核,其余核设为从核,主核向***申请阈值数量空闲的hugepage块并将阈值数量空闲的hugepage块全部映射到主核的虚拟地址空间并按照hugepage块的物理地址大小升序排列;
判断模块,判断模块配置为将升序排列后的hugepage块按照物理地址是否连续进行分段并判断所有段中是否存在满足子***内存需求的段;
映射模块,映射模块配置为响应于所有段中存在满足子***内存需求的段,将满足子***内存需求的段按照长度大小进行降序排列并对排序后的段进行重映射以得到若干个段内虚实地址均连续的段;
释放模块,释放模块配置为响应于若干个段内虚实地址均连续的段中存在满足***内存需求的段,释放满足***内存需求的段以外的所有hugepage块;
启动模块,启动模块配置为申请控制面共享内存,将数据面共享内存的虚拟地址存入到控制面共享内存的相关数据指针,并设置主从初始化流程同步标记且基于所述同步标记启动从核的初始化。
根据本发明的一个实施例,启动模块还配置为:
响应于主从初始化流程同步标记置位,申请用于多核同步通信与控制的命名共享内存,并从该共享内存获取数据面共享内存的虚拟地址;
通过主从约定的hugepage命名,以读写方式打开主核创建的hugepage文件,并按照数据面共享内存地址进行指定地址映射以进行初始化;
通过设置主从同步标记向主核报告从核初始化的结果。
根据本发明的一个实施例,还包括申请模块,申请模块配置为:
响应于所有段中不存在满足子***内存需求的段,释放所有hugepage块;
主核向***申请2倍阈值数量空闲的hugepage块并将2倍阈值数量空闲的hugepage块全部映射到主核的虚拟地址空间并按照hugepage块的物理地址大小升序排列;
将升序排列后的hugepage块按照物理地址是否连续进行分段并判断所有段中是否存在满足子***内存需求的段。
根据本发明的一个实施例,映射模块还配置为:
获取段的大小和段内单个hugepage块的大小,并以只读方式打开/dev/zero文件;
将打开的文件使用非指定地址映射到进程虚拟地址空间,映射大小为段的大小并判断映射是否成功;
响应于映射成功,记录映射成功的地址为ADDR0和当前支持的最大地址范围;
将文件关闭并对段内各个hugepage块进行指定地址的重映射。
根据本发明的一个实施例,映射模块还配置为:
设置指定映射地址初始值为ADDR0、映射长度为单个hugepage块大小、初始hugepage文件为段内第一个hugepage文件;
使用映射地址初始值配置映射地址MAP_ADDR、大小HUGEPAGE_SIZE及hugepage文件;
打开已配置的hugepage文件,并按照映射地址和大小进行映射;
更新映射地址MAP_ADDR为MAP_ADDR+HUGEPAGE_SIZE并更新hugepage文件;
重复上述步骤直到段的虚实地址均连续。
本发明具有以下有益技术效果:本发明实施例提供的共享内存管理的方法,通过将***中的一个核设为主核,其余核设为从核,主核向***申请阈值数量空闲的hugepage块并将阈值数量空闲的hugepage块全部映射到主核的虚拟地址空间并按照hugepage块的物理地址大小升序排列;将升序排列后的hugepage块按照物理地址是否连续进行分段并判断所有段中是否存在满足子***内存需求的段;响应于所有段中存在满足子***内存需求的段,将满足子***内存需求的段按照长度大小进行降序排列并对排序后的段进行重映射以得到若干个段内虚实地址均连续的段;响应于若干个段内虚实地址均连续的段中存在满足***内存需求的段,释放满足***内存需求的段以外的所有hugepage块;申请控制面共享内存,将数据面共享内存的虚拟地址存入到控制面共享内存的相关数据指针,并设置主从初始化流程同步标记且基于所述同步标记启动从核的初始化的技术方案,能够使之前在专用设备才能使用的处理方案也能适用于现有的通用服务器等通用设备,能够降低共享内存在多核之间流转的管理复杂度,使得软件在内存管理方面更加简单,便于产品快速迭代。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
图1为根据本发明一个实施例的共享内存管理的方法的示意性流程图;
图2为根据本发明一个实施例的共享内存管理的设备的示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。
基于上述目的,本发明的实施例的第一个方面,提出了一种共享内存管理的方法的一个实施例。图1示出的是该方法的示意性流程图。
如图1中所示,该方法可以包括以下步骤:
S1将***中的一个核设为主核,其余核设为从核,主核向***申请阈值数量空闲的hugepage块并将阈值数量空闲的hugepage块全部映射到主核的虚拟地址空间并按照hugepage块的物理地址大小升序排列,主核根据软硬件并行处理子***的需求,通过创建hugepage命名文件的方式向宿主***申请足够多的空闲hugepage块,根据经验,所有hugepage块的内存大小的和大于1.5倍的子***所需内存即可,记本次申请的hugepage内存数为HUGEPAGE_NUM,如果宿主***不能满足,通过修改宿主***配置文件来获取更多的空闲hugepage内存块,主核将申请到的空闲hugepage内存块全部映射到本核的虚拟地址空间,并按照各个hugepage内存块的物理地址的大小进行升序排序;
S2将升序排列后的hugepage块按照物理地址是否连续进行分段并判断所有段中是否存在满足子***内存需求的段,将排序后的hugepage内存块按照物理地址是否连续进行分段,分段后前后物理地址连续的hugepage内存块称为一个段,由于各个hugepage内存块的物理地址可能不全部连续,划分后的段可能有多个,判断这些离散段中是否存在某个段的大小满足子***内存需求(大小满足,且实地址连续),如果存在,则进入下面的步骤,否则修改上面步骤中HUGEPAGE_NUM为2*HUGEPAGE_NUM,并释放已经申请的所有hugepage内存块,进入上述步骤重新申请,直到段中存在某个段的大小满足子***内存需求;
S3响应于所有段中存在满足子***内存需求的段,将满足子***内存需求的段按照长度大小进行降序排列并对排序后的段进行重映射以得到若干个段内虚实地址均连续的段,由于申请的hugepage内存块数比***需要的多,因此上面得到的段可能存在多个满足***内存需求的段,将这些段按照长度大小进行降序排序,对排序后的段进行重映射,得到若干个段内虚实地址均连续的段,然后判断得到的若干个离散段中是否存在满足***内存需求的段(大小满足且虚实地址均连续),如果存在则进入下面步骤,并且称这个满足***内存需求的段为数据面共享内存,否则修改HUGEPAGE_NUM为2*HUGEPAGE_NUM,并释放已申请的所有hugepage内存块,同时释放所有映射的虚拟地址,重新上述步骤;
S4响应于若干个段内虚实地址均连续的段中存在满足***内存需求的段,释放满足***内存需求的段以外的所有hugepage块,由于在前面的步骤中为了查找虚实地址均连续的hugepage块,申请了足够多的hugepage块,其中有些是不需要的,有些是不满条件的(虚实地址不连续),这些hugepage资源需要规范给操作***,以防资源泄露;
S5申请控制面共享内存,将数据面共享内存的虚拟地址存入到控制面共享内存的相关数据指针,并设置主从初始化流程同步标记且基于所述同步标记启动从核的初始化,按照命名约定,申请用于多核同步通信与控制的命名共享内存,该内存称之为控制面共享内存,控制面共享内存中一般含有数据指针,用于传递不同阶段的待处理的数据缓冲区地址,将数据面共享内存的虚拟地址存入到控制面共享内存的相关数据指针,设置主从初始化流程同步标记用于启动从核的初始化。
通过本发明的技术方案,能够使之前在专用设备才能使用的处理方案也能适用于现有的通用服务器等通用设备,能够降低共享内存在多核之间流转的管理复杂度,使得软件在内存管理方面更加简单,便于产品快速迭代。
在本发明的一个优选实施例中,申请控制面共享内存,将数据面共享内存的虚拟地址存入到控制面共享内存的相关数据指针并设置主从初始化流程同步标记用于启动从核的初始化包括:
响应于主从初始化流程同步标记置位,申请用于多核同步通信与控制的命名共享内存,并从该共享内存获取数据面共享内存的虚拟地址;
通过主从约定的hugepage命名,以读写方式打开主核创建的hugepage文件,并按照数据面共享内存地址进行指定地址映射以进行初始化;
通过设置主从同步标记向主核报告从核初始化的结果。任意时刻从核只需根据主核的调度信息处理,处理流水线的某一阶段,从核在初次启动后,根据共享内存在主核中的虚实地址映射关系映射到本从核的虚拟地址空间,这样从核与主核都可以通过相同的虚拟地址访问到同一块物理内存,省去了地址转换的***调用,并达到共享内存的目的。
在本发明的一个优选实施例中,还包括:
响应于所有段中不存在满足子***内存需求的段,释放所有hugepage块;
主核向***申请2倍阈值数量空闲的hugepage块并将2倍阈值数量空闲的hugepage块全部映射到主核的虚拟地址空间并按照hugepage块的物理地址大小升序排列;
将升序排列后的hugepage块按照物理地址是否连续进行分段并判断所有段中是否存在满足子***内存需求的段。如果还部存在满足子***内存需求的段可以再次增加申请hugepage块的数量,并重复该步骤直到段中存在某个段的大小满足子***内存需求。
在本发明的一个优选实施例中,对排序后的段进行重映射以得到若干个段内虚实地址均连续的段包括:
获取段的大小和段内单个hugepage块的大小,并以只读方式打开/dev/zero文件;
将打开的文件使用非指定地址映射到进程虚拟地址空间,映射大小为段的大小并判断映射是否成功;
响应于映射成功,记录映射成功的地址为ADDR0和当前支持的最大地址范围;
将文件关闭并对段内各个hugepage块进行指定地址的重映射。如果映射不成功,则将映射大小减去获取的单个hugepage块的大小后再重新进行映射直到映射成功。
在本发明的一个优选实施例中,将文件关闭并对段内各个hugepage块进行指定地址的重映射包括:
设置指定映射地址初始值为ADDR0、映射长度为单个hugepage块大小、初始hugepage文件为段内第一个hugepage文件;
使用映射地址初始值配置映射地址MAP_ADDR、大小HUGEPAGE_SIZE及hugepage文件;
打开已配置的hugepage文件,并按照映射地址和大小进行映射;
更新映射地址MAP_ADDR为MAP_ADDR+HUGEPAGE_SIZE并更新hugepage文件;
重复上述步骤直到段的虚实地址均连续。段重映射是用于测试当前进程还能够支持的最大连续虚拟地址空间,最坏的情况是只能保证一个hugepage块大小的虚拟地址的连续性(操作***对单个hugepage块能够保证其物理和虚拟地址均连续),因此经过多次循环一定会映射成功。段重映射前其组成便是由一系列物理地址连续且递增的hugepage块组成,因此只要顺序遍历段内文件即可保证最后生成的新段其虚实地址均连续。在64位操作***中,由于虚拟地址空间足够大(地址范围为0到264-1),对当前现有的任意物理内存大小(例如当前高配置服务器的物理内存也不会超过1TB,远小于64位***的寻址空间)一般都可以映射到指定的虚拟地址上。如果经过多次尝试仍不能重映射到指定地址上,可以尝试修改软件的链接配置脚本(lds文件)并关闭操作***的ASLR选项。
通过本发明的技术方案,能够使之前在专用设备才能使用的处理方案也能适用于现有的通用服务器等通用设备,能够降低共享内存在多核之间流转的管理复杂度,使得软件在内存管理方面更加简单,便于产品快速迭代。
需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,上述的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中存储介质可为磁碟、光盘、只读存储器(Read-Only Memory,ROM)或随机存取存储器(Random AccessMemory,RAM)等。上述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。
此外,根据本发明实施例公开的方法还可以被实现为由CPU执行的计算机程序,该计算机程序可以存储在计算机可读存储介质中。在该计算机程序被CPU执行时,执行本发明实施例公开的方法中限定的上述功能。
基于上述目的,本发明的实施例的第二个方面,提出了一种共享内存管理的设备,如图2所示,设备200包括:
排序模块,排序模块配置为将***中的一个核设为主核,其余核设为从核,主核向***申请阈值数量空闲的hugepage块并将阈值数量空闲的hugepage块全部映射到主核的虚拟地址空间并按照hugepage块的物理地址大小升序排列;
判断模块,判断模块配置为将升序排列后的hugepage块按照物理地址是否连续进行分段并判断所有段中是否存在满足子***内存需求的段;
映射模块,映射模块配置为响应于所有段中存在满足子***内存需求的段,将满足子***内存需求的段按照长度大小进行降序排列并对排序后的段进行重映射以得到若干个段内虚实地址均连续的段;
释放模块,释放模块配置为响应于若干个段内虚实地址均连续的段中存在满足***内存需求的段,释放满足***内存需求的段以外的所有hugepage块;
启动模块,启动模块配置为申请控制面共享内存,将数据面共享内存的虚拟地址存入到控制面共享内存的相关数据指针,并设置主从初始化流程同步标记且基于所述同步标记启动从核的初始化。
在本发明的一个优选实施例中,启动模块还配置为:
响应于主从初始化流程同步标记置位,申请用于多核同步通信与控制的命名共享内存,并从该共享内存获取数据面共享内存的虚拟地址;
通过主从约定的hugepage命名,以读写方式打开主核创建的hugepage文件,并按照数据面共享内存地址进行指定地址映射以进行初始化;
通过设置主从同步标记向主核报告从核初始化的结果。
在本发明的一个优选实施例中,还包括申请模块,申请模块配置为:
响应于所有段中不存在满足子***内存需求的段,释放所有hugepage块;
主核向***申请2倍阈值数量空闲的hugepage块并将2倍阈值数量空闲的hugepage块全部映射到主核的虚拟地址空间并按照hugepage块的物理地址大小升序排列;
将升序排列后的hugepage块按照物理地址是否连续进行分段并判断所有段中是否存在满足子***内存需求的段。
在本发明的一个优选实施例中,映射模块还配置为:
获取段的大小和段内单个hugepage块的大小,并以只读方式打开/dev/zero文件;
将打开的文件使用非指定地址映射到进程虚拟地址空间,映射大小为段的大小并判断映射是否成功;
响应于映射成功,记录映射成功的地址为ADDR0和当前支持的最大地址范围;
将文件关闭并对段内各个hugepage块进行指定地址的重映射。
在本发明的一个优选实施例中,映射模块还配置为:
设置指定映射地址初始值为ADDR0、映射长度为单个hugepage块大小、初始hugepage文件为段内第一个hugepage文件;
使用映射地址初始值配置映射地址MAP_ADDR、大小HUGEPAGE_SIZE及hugepage文件;
打开已配置的hugepage文件,并按照映射地址和大小进行映射;
更新映射地址MAP_ADDR为MAP_ADDR+HUGEPAGE_SIZE并更新hugepage文件;
重复上述步骤直到段的虚实地址均连续。
上述实施例,特别是任何“优选”实施例是实现的可能示例,并且仅为了清楚地理解本发明的原理而提出。可以在不脱离本文所描述的技术的精神和原理的情况下对上述实施例进行许多变化和修改。所有修改旨在被包括在本公开的范围内并且由所附权利要求保护。
Claims (8)
1.一种共享内存管理的方法,其特征在于,包括以下步骤:
将***中的一个核设为主核,其余核设为从核,所述主核向***申请阈值数量空闲的hugepage块并将所述阈值数量空闲的hugepage块全部映射到所述主核的虚拟地址空间并按照所述hugepage块的物理地址大小升序排列;
将升序排列后的hugepage块按照物理地址是否连续进行分段并判断所有段中是否存在满足子***内存需求的段;
响应于所有段中存在满足子***内存需求的段,将满足子***内存需求的段按照长度大小进行降序排列并对排序后的段进行重映射以得到若干个段内虚实地址均连续的段,其中满足子***内存需求的段为数据面共享内存;
响应于若干个段内虚实地址均连续的段中存在满足***内存需求的段,释放所述满足***内存需求的段以外的所有hugepage块;
申请控制面共享内存,将数据面共享内存的虚拟地址存入到控制面共享内存的相关数据指针,并设置主从初始化流程同步标记且基于所述同步标记启动从核的初始化,其中控制面共享内存为用于多核同步通信与控制的共享内存,其中申请控制面共享内存,将数据面共享内存的虚拟地址存入到控制面共享内存的相关数据指针,并设置主从初始化流程同步标记且基于所述同步标记启动从核的初始化包括响应于所述主从初始化流程同步标记置位,申请用于多核同步通信与控制的命名共享内存,并从该共享内存获取数据面共享内存的虚拟地址,通过主从约定的hugepage命名,以读写方式打开主核创建的hugepage文件,并按照数据面共享内存地址进行指定地址映射以进行初始化,通过设置主从同步标记向主核报告从核初始化的结果。
2.根据权利要求1所述的方法,其特征在于,还包括:
响应于所有段中不存在满足子***内存需求的段,释放所有hugepage块;
所述主核向***申请2倍阈值数量空闲的hugepage块并将所述2倍阈值数量空闲的hugepage块全部映射到所述主核的虚拟地址空间并按照所述hugepage块的物理地址大小升序排列;
将升序排列后的hugepage块按照物理地址是否连续进行分段并判断所有段中是否存在满足子***内存需求的段。
3.根据权利要求1所述的方法,其特征在于,对排序后的段进行重映射以得到若干个段内虚实地址均连续的段包括:
获取段的大小和段内单个hugepage块的大小,并以只读方式打开/dev/zero文件;
将打开的所述文件使用非指定地址映射到进程虚拟地址空间,映射大小为段的大小并判断映射是否成功;
响应于映射成功,记录映射成功的地址为ADDR0和当前支持的最大地址范围;
将所述文件关闭并对段内各个hugepage块进行指定地址的重映射。
4.根据权利要求3所述的方法,其特征在于,将所述文件关闭并对段内各个hugepage块进行指定地址的重映射包括:
设置指定映射地址初始值为ADDR0、映射长度为单个hugepage块大小、初始hugepage文件为段内第一个hugepage文件;
使用映射地址初始值配置映射地址MAP_ADDR、大小HUGEPAGE_SIZE及hugepage文件;
打开已配置的所述hugepage文件,并按照所述映射地址和大小进行映射;
更新映射地址MAP_ADDR为MAP_ADDR+HUGEPAGE_SIZE并更新hugepage文件;
重复上述步骤直到段的虚实地址均连续。
5.一种共享内存管理的设备,其特征在于,所述设备包括:
排序模块,所述排序模块配置为将***中的一个核设为主核,其余核设为从核,所述主核向***申请阈值数量空闲的hugepage块并将所述阈值数量空闲的hugepage块全部映射到所述主核的虚拟地址空间并按照所述hugepage块的物理地址大小升序排列;
判断模块,所述判断模块配置为将升序排列后的hugepage块按照物理地址是否连续进行分段并判断所有段中是否存在满足子***内存需求的段;
映射模块,所述映射模块配置为响应于所有段中存在满足子***内存需求的段,将满足子***内存需求的段按照长度大小进行降序排列并对排序后的段进行重映射以得到若干个段内虚实地址均连续的段,其中满足子***内存需求的段为数据面共享内存;
释放模块,所述释放模块配置为响应于若干个段内虚实地址均连续的段中存在满足***内存需求的段,释放所述满足***内存需求的段以外的所有hugepage块;
启动模块,所述启动模块配置为申请控制面共享内存,将数据面共享内存的虚拟地址存入到控制面共享内存的相关数据指针,并设置主从初始化流程同步标记且基于所述同步标记启动从核的初始化,其中控制面共享内存为用于多核同步通信与控制的共享内存,所述启动模块还配置为响应于所述主从初始化流程同步标记置位,申请用于多核同步通信与控制的命名共享内存,并从该共享内存获取数据面共享内存的虚拟地址,通过主从约定的hugepage命名,以读写方式打开主核创建的hugepage文件,并按照数据面共享内存地址进行指定地址映射以进行初始化,通过设置主从同步标记向主核报告从核初始化的结果。
6.根据权利要求5所述的设备,其特征在于,还包括申请模块,所述申请模块配置为:
响应于所有段中不存在满足子***内存需求的段,释放所有hugepage块;
所述主核向***申请2倍阈值数量空闲的hugepage块并将所述2倍阈值数量空闲的hugepage块全部映射到所述主核的虚拟地址空间并按照所述hugepage块的物理地址大小升序排列;
将升序排列后的hugepage块按照物理地址是否连续进行分段并判断所有段中是否存在满足子***内存需求的段。
7.根据权利要求5所述的设备,其特征在于,所述映射模块还配置为:
获取段的大小和段内单个hugepage块的大小,并以只读方式打开/dev/zero文件;
将打开的所述文件使用非指定地址映射到进程虚拟地址空间,映射大小为段的大小并判断映射是否成功;
响应于映射成功,记录映射成功的地址为ADDR0和当前支持的最大地址范围;
将所述文件关闭并对段内各个hugepage块进行指定地址的重映射。
8.根据权利要求7所述的设备,其特征在于,所述映射模块还配置为:
设置指定映射地址初始值为ADDR0、映射长度为单个hugepage块大小、初始hugepage文件为段内第一个hugepage文件;
使用映射地址初始值配置映射地址MAP_ADDR、大小HUGEPAGE_SIZE及hugepage文件;
打开已配置的所述hugepage文件,并按照所述映射地址和大小进行映射;
更新映射地址MAP_ADDR为MAP_ADDR+HUGEPAGE_SIZE并更新hugepage文件;
重复上述步骤直到段的虚实地址均连续。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011562692.0A CN112612623B (zh) | 2020-12-25 | 2020-12-25 | 一种共享内存管理的方法和设备 |
PCT/CN2021/121876 WO2022134723A1 (zh) | 2020-12-25 | 2021-09-29 | 一种共享内存管理的方法和设备 |
US18/025,635 US11989588B2 (en) | 2020-12-25 | 2021-09-29 | Shared memory management method and device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011562692.0A CN112612623B (zh) | 2020-12-25 | 2020-12-25 | 一种共享内存管理的方法和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112612623A CN112612623A (zh) | 2021-04-06 |
CN112612623B true CN112612623B (zh) | 2022-08-09 |
Family
ID=75247832
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011562692.0A Active CN112612623B (zh) | 2020-12-25 | 2020-12-25 | 一种共享内存管理的方法和设备 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11989588B2 (zh) |
CN (1) | CN112612623B (zh) |
WO (1) | WO2022134723A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112612623B (zh) * | 2020-12-25 | 2022-08-09 | 苏州浪潮智能科技有限公司 | 一种共享内存管理的方法和设备 |
CN113377703B (zh) * | 2021-06-23 | 2024-04-09 | 上海擎昆信息科技有限公司 | 一种核间通信方法 |
CN115357416B (zh) * | 2022-10-19 | 2023-03-24 | 南京芯驰半导体科技有限公司 | 一种跨***进行数据处理的方法及装置 |
CN116069530B (zh) * | 2023-04-03 | 2023-06-16 | 中国人民解放军国防科技大学 | 基于内存池的仿真引擎数据共享黑板*** |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009067950A1 (fr) * | 2007-11-29 | 2009-06-04 | Huawei Technologies Co., Ltd. | Procédé et dispositif de gestion de mémoire partagée dans un système multicœur |
CN102184142A (zh) * | 2011-04-19 | 2011-09-14 | 中兴通讯股份有限公司 | 一种利用巨页映射降低cpu资源消耗的方法和装置 |
CN107729159A (zh) * | 2017-09-29 | 2018-02-23 | 华为技术有限公司 | 一种共享内存的地址映射方法及装置 |
CN108829523A (zh) * | 2018-06-26 | 2018-11-16 | 迈普通信技术股份有限公司 | 内存资源分配方法、装置、电子设备及可读存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8769190B1 (en) * | 2010-09-15 | 2014-07-01 | Western Digital Technologies, Inc. | System and method for reducing contentions in solid-state memory access |
CN105893269B (zh) | 2016-03-31 | 2018-08-21 | 武汉虹信技术服务有限责任公司 | 一种Linux***下内存管理方法 |
WO2019161557A1 (zh) * | 2018-02-24 | 2019-08-29 | 华为技术有限公司 | 一种通信的方法及装置 |
US10896131B2 (en) * | 2019-01-28 | 2021-01-19 | Western Digital Technologies, Inc. | System and method for configuring a storage device based on prediction of host source |
CN111913893A (zh) * | 2020-06-22 | 2020-11-10 | 成都菁蓉联创科技有限公司 | 保留内存的映射方法和装置、设备和存储介质 |
CN112612623B (zh) * | 2020-12-25 | 2022-08-09 | 苏州浪潮智能科技有限公司 | 一种共享内存管理的方法和设备 |
-
2020
- 2020-12-25 CN CN202011562692.0A patent/CN112612623B/zh active Active
-
2021
- 2021-09-29 WO PCT/CN2021/121876 patent/WO2022134723A1/zh active Application Filing
- 2021-09-29 US US18/025,635 patent/US11989588B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009067950A1 (fr) * | 2007-11-29 | 2009-06-04 | Huawei Technologies Co., Ltd. | Procédé et dispositif de gestion de mémoire partagée dans un système multicœur |
CN102184142A (zh) * | 2011-04-19 | 2011-09-14 | 中兴通讯股份有限公司 | 一种利用巨页映射降低cpu资源消耗的方法和装置 |
CN107729159A (zh) * | 2017-09-29 | 2018-02-23 | 华为技术有限公司 | 一种共享内存的地址映射方法及装置 |
CN108829523A (zh) * | 2018-06-26 | 2018-11-16 | 迈普通信技术股份有限公司 | 内存资源分配方法、装置、电子设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US20230367637A1 (en) | 2023-11-16 |
CN112612623A (zh) | 2021-04-06 |
WO2022134723A1 (zh) | 2022-06-30 |
US11989588B2 (en) | 2024-05-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112612623B (zh) | 一种共享内存管理的方法和设备 | |
US11531625B2 (en) | Memory management method and apparatus | |
US7472252B2 (en) | Merging identical memory pages | |
US9086920B2 (en) | Device for managing data buffers in a memory space divided into a plurality of memory elements | |
CN106557427B (zh) | 共享内存数据库的内存管理方法及装置 | |
US8862834B2 (en) | Shared memory translation facility | |
CN111309649B (zh) | 一种数据传输和任务处理方法、装置及设备 | |
US11656779B2 (en) | Computing system and method for sharing device memories of different computing devices | |
US9063805B2 (en) | Method and system for enabling access to functionality provided by resources outside of an operating system environment | |
CN114327777B (zh) | 确定全局页目录的方法、装置、电子设备及存储介质 | |
CN110750356A (zh) | 适用于非易失性内存的多核交互方法、***及存储介质 | |
KR102326280B1 (ko) | 데이터 처리 방법, 장치, 기기 및 매체 | |
CN115756962A (zh) | 内存备份加速方法、装置、设备及计算机可读存储介质 | |
US7403887B1 (en) | Emulated memory management | |
CN110162395B (zh) | 一种内存分配的方法及装置 | |
US20140289739A1 (en) | Allocating and sharing a data object among program instances | |
CN115586943B (zh) | 一种智能网卡虚拟机脏页的硬件标记实现方法 | |
CN114518962A (zh) | 内存的管理方法及装置 | |
CN112860595A (zh) | Pci设备或pcie设备、数据存取方法及相关组件 | |
CN112445413A (zh) | 一种数据存储的方法、装置及相关设备 | |
CN112003860B (zh) | 适用于远程直接内存访问的内存管理方法、***及介质 | |
JPH09319653A (ja) | 情報処理装置、情報処理システム及びその制御方法 | |
US20240202031A1 (en) | Resource Management Method and Corresponding Apparatus | |
CN118316778A (zh) | 一种用于ib网卡的uar页面分配方法和装置 | |
CN117539627A (zh) | 基于SR-IOV协议的NVMe队列资源动态分配方法及寄存器 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |