基于多处理器系统的处理器数据访问方法及管理装置
文献发布时间:2023-06-19 10:38:35
技术领域
本发明涉及处理器数据访问的技术领域,特别涉及一种基于多处理器系统的处理器数据访问方法及管理装置。
背景技术
随着芯片技术的发展,多处理器系统早已成为中高端应用领域的主流,广泛应用于桌面电脑、消费电子、视像安防、服务器等领域。多处理器系统运行过程中,每个CPU都会有一些通用的数据,需要实时访问和保存,称为处理器数据。这些数据用于描述各个CPU的运行状态,比如CPU实时负载率、CPU处于就绪状态的任务数、CPU带电状态、CPU当前任务等。其中负载率反映CPU的实时繁忙程度;就绪任务数反映CPU上任务的饱和状况;带电状态包括正常工作、正在掉电、已掉电等;当前任务表示CPU正在运行的任务。系统正常运行过程中,会频繁地访问处理器数据,为任务调度和其他活动提供依据。因此,如何高效地访问处理器数据,对于系统整体性能具有非常重要的意义。
处理器数据的种类较多,不同类别的数据可用不同的结构体类型来描述。传统的方法,对于每一类处理器数据,分别用一个全局的结构体数组来描述,数组长度为处理器的个数。而使用数组的访问方式,可能导致多处理器之间出现Cache颠簸效应,从而降低系统整体性能。某一类的处理器数据的数组中包含了各个CPU的同一类型的处理数据,这些数据紧密相连,因此它们很有可能处于同一个缓存行(Cache Line)中。假设CPU1修改了CPU1DATA1的内存单元,那么该缓存行状态会变为Dirty(见术语解释),此后若CPU2修改CPU2DATA1的内存,就会引发Cache同步操作。系统会先将该缓存行回写到主存,再修改CPU2DATA1在该缓存行中的位置,最后将缓存行状态重新置为Dirty。这个过程自动增加了一次回写主存的耗时操作。若各个CPU频繁地交叉读写DATA1数组,则会导致频繁地回写主存,引起Cache颠簸效应,降低系统的整体性能。
发明内容
本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种基于多处理器系统的处理器数据访问方法,能够高效地访问处理器数据,防止Cache颠簸。
本发明还提出一种具有上述基于多处理器系统的处理器数据访问方法的基于多处理器系统的处理器数据访问管理装置。
本发明还提出一种具有上述基于多处理器系统的处理器数据访问方法的计算机可读存储介质。
根据本发明的第一方面实施例的基于多处理器系统的处理器数据访问方法,包括以下步骤:S100,在程序中定义处理器特定的代码段,将所述代码段添加至链接脚本文件,并通过编译选项,将所有的处理器数据被链接至所述代码段;S200,系统启动,分别为多个处理器分配处理器数据内存空间,并记录所述处理器数据内存空间的偏移值;S300,系统运行时,处理器根据标识号获取所述处理器数据内存空间的所述偏移值,对所述处理器数据进行访问。
根据本发明实施例的基于多处理器系统的处理器数据访问方法,至少具有如下有益效果:通过对处理器数据内存进行布局,将不同CPU的处理器数据区域之间彼此分隔,使它们不处于同一缓存行,从而有效地防止了Cache颠簸造成的效率低下,提高了数据访问效率;各cpu在访问各自的处理器数据(影响系统运行的关键数据)时,互相不受干扰,从而将数组越界等误操作可能导致的问题降至最低,提高了系统稳定性。
根据本发明的一些实施例,所述步骤S100还包括:编译链接后,通过所述链接脚本文件获取的述代码段的起始和结束位置,得到第一处理器的所述处理器数据内存空间,所述第一处理器用于系统启动。
根据本发明的一些实施例,所述步骤S200包括:S210,系统启动,根据启动顺序为多个第二处理器分配所述处理器数据内存空间,所述第二处理器为系统中除所述第一处理器以外的处理器;S220,根据所述第一处理器的所述处理器数据内存空间的起始地址,计算得到所述第二处理器对应的所述处理器数据内存空间的所述偏移值。
根据本发明的一些实施例,所述第二处理器对应的所述处理器数据内存空间的偏移值的计算方法为:所述第二处理器的所述处理器数据内存空间的起始地址减去所述第一处理器的所述处理器数据内存空间的起始地址。
根据本发明的一些实施例,所述步骤S200还包括:将所述处理器内存空间的所述偏移值按所述处理器的标识号保存至全局数组中。
根据本发明的一些实施例,所述步骤S200还包括:为所述处理器分配所述处理器数据内存空间时,使不同的所述处理器的所述处理器数据内存空间之间存在一定的间隔。
根据本发明的一些实施例,还包括:根据所述处理器数据内存空间之间的间隔,对所述处理器数据的访问进行内存越界检测。
根据本发明的一些实施例,所述步骤S300还包括:所述处理器通过宏定义方式,对所述处理器数据进行访问。
根据本发明的第二方面实施例的基于多处理器系统的处理器数据访问管理装置,包括:编译链接模块,用于在程序中定义处理器特定的代码段,将所述代码段添加至链接脚本文件,并通过编译选项,将所有的处理器数据被链接至所述代码段;启动分配模块,用于在系统启动时,分别为多个处理器分配处理器数据内存空间,并记录所述处理器数据内存空间的偏移值;访问控制模块,用于在系统运行时,根据处理器标识号获取所述处理器数据内存空间的所述偏移值,对所述处理器数据进行访问。
根据本发明实施例的基于多处理器系统的处理器数据访问管理装置,至少具有如下有益效果:通过对处理器数据内存进行布局,将不同CPU的处理器数据区域之间彼此分隔,使它们不处于同一缓存行,从而有效地防止了Cache颠簸造成的效率低下,提高了数据访问效率;各cpu在访问各自的处理器数据(影响系统运行的关键数据)时,互相不受干扰,从而将数组越界等误操作可能导致的问题降至最低,提高了系统稳定性。
根据本发明的第三方面实施例的计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据本发明的第一方面实施例的方法。
根据本发明实施例的计算机可读存储介质,至少具有与本发明的第一方面实施例的方法同样的有益效果。
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明实施例的方法的流程示意图;
图2为本发明实施例的方法中的处理数据布局示意图;
图3为本发明实施例的系统的模块示意框图。
附图标记:
编译链接模块100、启动分配模块200、访问控制模块300。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个及两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
参照图1,本发明的实施例的方法包括:S100,在程序中定义处理器特定的代码段,将代码段添加至链接脚本文件,并通过编译选项,将所有的处理器数据被链接至代码段;S200,系统启动,分别为多个处理器分配处理器数据内存空间,并记录处理器数据内存空间的偏移值;S300,系统运行时,处理器根据标识号获取处理器数据内存空间的偏移值,对处理器数据进行访问。
本发明实施例的处理器数据的内存布局,参照图2。首先,程序中定义处理器数据特定的代码段,比如命名CPU_DATA_SECTION,并将该代码段添加到链接脚本文件(ScatterFile)中。通过编译器选项,将所有的处理器数据存放到该段中。编译链接阶段,所有处理器数据都将被链接进CPU_DATA_SECTION段,即存储至如图2所示的CPU1 DATA AREA区间。该代码段的起始和结束位置可以通过链接文件读取,即可得到第一处理器(即用于系统启动的CPU,第一个上电运行的CPU,本发明实施例中的CPU1)对应的处理数据内存空间CPU1 DATAAREA的起始地址。
系统启动阶段,为其他CPU动态分配对应的处理器数据内存空间,如图2所示的CPU2 DATA AREA、CPU3 DATA AREA、...CPUN DATA AREA,并计算得到各CPU对应的处理器数据内存空间的起始地址与CPU1 DATA AREA起始地址之间的偏移,其中,OFFSET2表示CPU2与CPU1 DATA AREA的偏移,OFFSETN表示CPUN与CPU1 DATA AREA的偏移。然后将OFFSET2、OFFSET3、...OFFSETN按照CPU序号保存到全局数组中,使得数组索引刚好对应CPU序号。
系统正常运行时,若某个CPU如需访问它的处理器数据,首先获得CPU1 DATA AREA中对应类型处理器数据的地址,然后根据CPU编号,得到该CPU与CPU1的处理器数据区域之间的偏移,最后将二者相加得到该处理器数据的访问地址。若CPUN需要访问它的DATA1数据,首先得到CPU1的DATA1数据地址,然后加上该CPU的处理器数据区域的偏移OFFSETN即可。其中,CPU1的DATA1是普通变量,可通过取地址符号(即“&”)直接获取其地址;OFFSETN为启动阶段计算好的偏移地址,保存在全局数组中,可通过CPU编号直接获取到。通过两个地址简单相加,即可得到CPUN的DATA1数据地址,从而进行访问。并可通过宏定义的方式,将整个访问步骤封装成一条普通语句,使得程序非常简洁:
#define GET_CPU_DATA(cpu_id,DATA)(Addr(DATA)+OFFSET(cpu_id))
本发明的实施例,通过以上内存布局和代码流程,使得不同CPU的处理器数据区域之间彼此分隔,它们不可能处于同一缓存行,因此能有效地防止Cache颠簸造成的效率低下问题。
本发明的实施例中,在为处理器分配处理器数据内存空间时,使不同的处理器的处理器数据内存空间之间存在一定的间隔;以及,根据处理器数据内存空间之间的间隔,对处理器数据的访问进行内存越界检测,防止内存越界造成系统风险。
本发明实施例的系统,参照图3,包括:编译链接模块100,用于在程序中定义处理器特定的代码段,将代码段添加至链接脚本文件,并通过编译选项,将所有的处理器数据被链接至代码段;启动分配模块200,用于在系统启动时,分别为多个处理器分配处理器数据内存空间,并记录处理器数据内存空间的偏移值;访问控制模块300,用于在系统运行时,根据处理器标识号获取处理器数据内存空间的偏移值,对处理器数据进行访问。
尽管本文描述了具体实施方案,但是本领域中的普通技术人员将认识到,许多其它修改或另选的实施方案同样处于本公开的范围内。例如,结合特定设备或组件描述的功能和/或处理能力中的任一项可以由任何其它设备或部件来执行。另外,虽然已根据本公开的实施方案描述了各种例示性具体实施和架构,但是本领域中的普通技术人员将认识到,对本文所述的例示性具体实施和架构的许多其它修改也处于本公开的范围内。
上文参考根据示例性实施方案所述的系统、方法、系统和/或计算机程序产品的框图和流程图描述了本公开的某些方面。应当理解,框图和流程图中的一个或多个块以及框图和流程图中的块的组合可分别通过执行计算机可执行程序指令来实现。同样,根据一些实施方案,框图和流程图中的一些块可能无需按示出的顺序执行,或者可以无需全部执行。另外,超出框图和流程图中的块所示的那些部件和/或操作以外的附加部件和/或操作可存在于某些实施方案中。
因此,框图和流程图中的块支持用于执行指定功能的装置的组合、用于执行指定功能的元件或步骤的组合以及用于执行指定功能的程序指令装置。还应当理解,框图和流程图中的每个块以及框图和流程图中的块的组合可以由执行特定功能、元件或步骤的专用硬件计算机系统或者专用硬件和计算机指令的组合来实现。
本文所述的程序模块、应用程序等可包括一个或多个软件组件,包括例如软件对象、方法、数据结构等。每个此类软件组件可包括计算机可执行指令,所述计算机可执行指令响应于执行而使本文所述的功能的至少一部分(例如,本文所述的例示性方法的一种或多种操作)被执行。
软件组件可以用各种编程语言中的任一种来编码。一种例示性编程语言可以为低级编程语言,诸如与特定硬件体系结构和/或操作系统平台相关联的汇编语言。包括汇编语言指令的软件组件可能需要在由硬件架构和/或平台执行之前由汇编程序转换为可执行的机器代码。另一种示例性编程语言可以为更高级的编程语言,其可以跨多种架构移植。包括更高级编程语言的软件组件在执行之前可能需要由解释器或编译器转换为中间表示。编程语言的其它示例包括但不限于宏语言、外壳或命令语言、作业控制语言、脚本语言、数据库查询或搜索语言、或报告编写语言。在一个或多个示例性实施方案中,包含上述编程语言示例中的一者的指令的软件组件可直接由操作系统或其它软件组件执行,而无需首先转换成另一种形式。
软件组件可存储为文件或其它数据存储构造。具有相似类型或相关功能的软件组件可一起存储在诸如特定的目录、文件夹或库中。软件组件可为静态的(例如,预设的或固定的)或动态的(例如,在执行时创建或修改的)。
上面结合附图对本发明实施例作了详细说明,但是本发明不限于上述实施例,在所属技术领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。
- 基于多处理器系统的处理器数据访问方法及管理装置
- 基于多核多处理器并行系统的全局数据存储器管理方法