CN112099799B - Numa感知的smp系统只读代码段多副本优化方法及系统 - Google Patents
Numa感知的smp系统只读代码段多副本优化方法及系统 Download PDFInfo
- Publication number
- CN112099799B CN112099799B CN202010996761.2A CN202010996761A CN112099799B CN 112099799 B CN112099799 B CN 112099799B CN 202010996761 A CN202010996761 A CN 202010996761A CN 112099799 B CN112099799 B CN 112099799B
- Authority
- CN
- China
- Prior art keywords
- read
- code segment
- kernel
- smp
- smp system
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种NUMA感知的SMP系统只读代码段多副本优化方法及系统,本发明包括为每个SMP系统配置“局部地址”、“应用程序局部地址”;通过SMC服务将内核只读代码段拷贝到每一个SMP系统中的“局部地址”中;在应用程序二进制或者动态库加载过程中解析它们只读代码段部分并复制到每一个SMP系统中的“应用程序局部地址”中;当每一个SMP系统需要执行内核、应用程序二进制或者动态库只读代码段时,直接通过“局部地址”或“应用程序局部地址”本地取指。本发明能够解决NUMA感知的SMP系统中远端取指问题,利用地址局部化技术来实现软件性能优化,在片上网络以及跨路带宽、延迟受限时能够获得较好的性能提升。
Description
技术领域
本发明涉及计算机领域NUMA结构的服务器,具体涉及一种NUMA感知的SMP系统只读代码段多副本优化方法及系统。
背景技术
目前服务器基本是基于NUMA(非统一内存访问)架构多SMP系统,NUMA架构下每个SMP系统可以理解为一个节点(node),多个SMP系统组成的系统组成了我们通常所说的“socket”。本socket内部CPU访问远端节点带宽和延迟的性能指标往往比本地节点的性能较,对于多路由若干节点组成,每一个节点都有自己的CPU、内存和/或IO,多个socket之间通过互联总线联系在一起,组成更大的系统。但是由于互联总线发展缓慢,根本匹配不上CPU的指数级摩尔定律的发展,因此一旦涉及路内大量的并行计算或者大量的页面迁移,路内之间互联总线的带宽和延迟往往不能满足CPU跨路访问的带宽和延迟的需求,多核共享互联总线成为性能瓶颈的关键路径。
在由多个SMP系统组成的多路服务器远端访问过程中,如图1所示,路径②、路径③和路径④的SMP系统首次执行内核态某条指令时,都需要通过互联总线向保存在socket0的内存中读取内核正文段数据,完成远端取指后,才能完成后续的译码执行。对于用户态的程序,代码段加载的位置与进程地址空间的分配有关,它有可能分配到任意一个SMP系统的NUMA上,OS调度到其他NUMA上执行时,存在远端取指的情况,如此性能往往变得飘忽不定。究其根本原因,是该多路服务器OS对于代码段采用了单一镜像,而多路服务器采用的NUMA架构,会导致CPU访问本地内存和远端内存延迟和带宽存在不对称性。在互联总线、特别是路间互联总线性能受限的前提下,会导致远端取指存在较大的延迟,而且这种延迟与片上网络(NOC)链路的阻塞状态相关,因此在一定程度上给取指带来不确定性。此外,随着路数或者核数的增加,碎片化的取指,也会影响片上网络和互联总线的可用带宽。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,为了解决当前多SMP系统组成的多路服务器远端取指带来的性能开销,提供一种NUMA感知的SMP系统只读代码段多副本优化方法及系统,本发明通过复制内核、应用程序或者动态库的只读代码段部分,能够解决NUMA感知的SMP系统中远端取指问题,利用地址局部化技术来实现软件性能优化,在片上网络以及跨路带宽、延迟受限时能够获得较好的性能提升。
为了解决上述技术问题,本发明采用的技术方案为:
一种NUMA感知的SMP系统只读代码段多副本优化方法,包括:
1)预先为每个SMP系统配置两段局部地址空间,包括用于后续存放各自SMP系统的内核只读代码段的“局部地址”、用于存放应用程序只读代码段的“应用程序局部地址”;
2)通过SMC服务执行数据拷贝将内核只读代码段拷贝到每一个SMP系统中的“局部地址”中;且在应用程序二进制或者动态库加载过程中解析它们只读代码段部分,并将其复制到每一个SMP系统中的“应用程序局部地址”中;
3)当每一个SMP系统需要执行内核只读代码段时,直接通过“局部地址”进行本地取指;当每一个SMP系统需要执行应用程序二进制或者动态库的只读代码段时,直接通过“应用程序局部地址”进行本地取指。
可选地,步骤1)中“局部地址”的配置步骤包括:通过修改内核连接器脚本vmlinux.lds.S将“局部地址”的起始标号_stext对齐在第一位置,结束标志_etext对齐在第二地址空间处,这样保证有至少有指定大小的空间用于存放内核只读代码段。
可选地,所述将“局部地址”的起始标号_stext对齐在第一位置,结束标志_etext对齐在第二地址空间处具体是指将“局部地址”的起始标号_stext对齐在256M的位置,结束标志_etext对齐在16M地址空间处,使得“局部地址”至少有16M的空间用于存放内核只读代码段。
可选地,步骤1)中操作系统通过SMC服务执行数据拷贝将内核只读代码段拷贝到每一个SMP系统中的“局部地址”中的步骤包括:
S1)在操作系统C语言引导阶段建页表前,根据内核正文段的起始地址和代码段的大小,在每个SMP系统下对应的内核正文段数据局部缓存区申请对应的虚地址空间;在虚地址空间申请成功后,将除socket 0的SMP 0外的其他SMP 0的对应缓存区的地址预留起来以防止操作系统无意中使用其中的内存、从而破坏了内核只读代码段的数据;主核通过发送SMC服务,将主核陷入EL3级别,完成socket 0的SMP 0内核正文段到全局地址空间的拷贝;拷贝完成后,主核将向每个SMP系统的某个核发送事件,将处于wfe状态的该核唤醒,完成全局地址缓存区到各自SMP系统的内核正文段的拷贝,至此,使得每个SMP系统均已经具备从本地取指和执行的能力;
S2)在从核唤醒完成后,内核会根据cpu的特性,执行“内核热补丁”,所述“内核热补丁”为一系列的指令修正,执行“内核热补丁”会导致socket 0的SMP 0正文段的内容发生了变化,但是由于多核系统尚未调度起来,从核均处于空闲状态IDLE,因此其他SMP系统的正文段均未完成更新,主核通过调用SMC服务陷入EL3级别,完成socket 0SMP 0的正文段到全局地址缓存区的更新,但是由于从核均已经唤醒,因此无法立即通过发送事件通知其他SMP的CPU完成数据拷贝;
S3)在多核调度器初始化完成后、执行“内核热补丁”的指令前,完成其他SMP系统的内核只读代码段的更新:通过函数on_each_cpu调用函数rdonly_smc,所述函数rdonly_smc用于使得其他SMP系统的某个核调用SMC服务陷入EL3级别,完成全局缓存区到本SMP系统的内核只读代码段的更新,其他核则处于空闲状态IDLE,等待所有内核只读代码段数据更新完毕,进入操作系统按照正常引导流程。
可选地,步骤S3)中通过函数on_each_cpu调用函数rdonly_smc为并发执行的。
可选地,步骤1)之后、步骤2)之前还包括初始化“应用程序局部地址”的步骤:对每个SMP系统的“应用程序局部地址”进行统一的初始化和管理,使得后续每次对该空间的写操作,均会同时更新到每个SMP系统对于的区域中,且该“应用程序局部地址”某个页面用完后使得每个SMP系统对于该页面的区域均会释放掉。
此外,本发明还提供一种NUMA感知的SMP系统只读代码段多副本优化系统,包括:
固件地址划分程序模块,用于预先为每个SMP系统配置两段局部地址空间,包括用于后续存放各自SMP系统的内核只读代码段的“局部地址”、用于存放应用程序只读代码段的“应用程序局部地址”;
只读代码段拷贝程序模块,用于通过SMC服务执行数据拷贝将内核只读代码段拷贝到每一个SMP系统中的“局部地址”中;且在应用程序二进制或者动态库加载过程中解析它们只读代码段部分,并将其复制到每一个SMP系统中的“应用程序局部地址”中;
本地取指程序模块,用于当每一个SMP系统需要执行内核只读代码段时,直接通过“局部地址”进行本地取指;当每一个SMP系统需要执行应用程序二进制或者动态库的只读代码段时,直接通过“应用程序局部地址”进行本地取指。
此外,本发明还提供一种NUMA感知的SMP系统只读代码段多副本优化系统,包括计算机设备,所述计算机设备包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述NUMA感知的SMP系统只读代码段多副本优化方法的步骤。
此外,本发明还提供一种NUMA感知的SMP系统只读代码段多副本优化系统,包括计算机设备,所述计算机设备包括相互连接的微处理器和存储器,所述存储器中存储有被编程或配置以执行所述NUMA感知的SMP系统只读代码段多副本优化方法的计算机程序。
此外,本发明还提供一种计算机可读存储介质,该计算机可读存储介质中存储有被编程或配置以执行所述NUMA感知的SMP系统只读代码段多副本优化方法的计算机程序。
和现有技术相比,本发明为每个SMP系统配置“局部地址”、“应用程序局部地址”;通过SMC服务将内核只读代码段拷贝到每一个SMP系统中的“局部地址”中;在应用程序二进制或者动态库加载过程中解析它们只读代码段部分并复制到每一个SMP系统中的“应用程序局部地址”中;当每一个SMP系统需要执行内核、应用程序二进制或者动态库只读代码段时,直接通过“局部地址”或“应用程序局部地址”本地取指,本发明具有下述优点:
1、本发明从根本上解决了基于NUMA架构的多SMP系统远端取指问题,特别是多路服务器跨路取指问题。有效节省了片上网络以及互联总线的带宽,同时CPU本地取指使得节省了1000多个周期(cycle)的取指延迟。
2、本发明在两路环境下Unixbench性能提升了10%左右,spec2006性能提升了12%左右,随着路数和核数的增加,性能收益越来越明显。
因此,本发明能够解决NUMA感知的SMP系统中远端取指问题,利用地址局部化技术来实现软件性能优化,在片上网络以及跨路带宽、延迟受限时能够获得较好的性能提升。
附图说明
图1是现有技术中SMP架构的多路服务器远端取指示意图。
图2是本实施例方法的基本流程示意图。
图3是本实施例中SMP架构的多路服务器本地取指示意图。
图4是本实施例中固件对内核/应用程序只读代码段地址空间的划分和管理示意图。
图5是本实施例中OS和固件完成第一次内核只读代码段拷贝的示意图。
图6是本实施例中由于“内核热补丁”socket 0的SMP 0内核只读代码段更新示意图。
图7是本实施例中由于“内核热补丁”其他SMP系统内核只读代码段更新示意图。
图8是本实施例中应用程序只读代码段的实现示意图。
具体实施方式
如图2所示,本实施例NUMA感知的SMP系统只读代码段多副本优化方法包括:
1)预先为每个SMP系统配置两段局部地址空间,包括用于后续存放各自SMP系统的内核只读代码段的“局部地址”、用于存放应用程序只读代码段的“应用程序局部地址”;
2)通过SMC服务执行数据拷贝将内核只读代码段拷贝到每一个SMP系统中的“局部地址”中;且在应用程序二进制或者动态库加载过程中解析它们只读代码段部分,并将其复制到每一个SMP系统中的“应用程序局部地址”中;
3)当每一个SMP系统需要执行内核只读代码段时,直接通过“局部地址”进行本地取指;当每一个SMP系统需要执行应用程序二进制或者动态库的只读代码段时,直接通过“应用程序局部地址”进行本地取指。
为了解决当前多SMP系统组成的多路服务器远端取指带来的性能开销,本实施例NUMA感知的SMP系统只读代码段多副本优化方法能够解决NUMA感知的SMP系统中远端取指问题,利用地址局部化技术来实现软件性能优化,在片上网络以及跨路带宽、延迟受限时能够获得较好的性能提升。图3是本实施例方法中SMP架构的多路服务器本地取指示意图,该图显示了其他SMP系统通过复制socket0的SMP 0的内核只读代码段后,然后从本地取指、执行的流程。如图3所示,通过把socket0 smp0的内核正文段复制到其他每一个SMP内存中,或者应用程序加载过程中,将只读代码段的内容复制到其他每个SMP系统内存中。因此,每个SMP系统的CPU取指时,由于局部地址空间得出限制,不存在远端取指的可能,因此本实施例NUMA感知的SMP系统只读代码段多副本优化方法在片上网络以及跨路带宽、延迟受限的前提下,能够获得较好的性能提升。
本实施例中步骤1)是通过固件实现的。如图4所示,固件为每个SMP系统内配置两段局部地址空间,一段“局部地址”,用于后续存放各自SMP系统的内核只读代码段;另一段为“应用程序局部地址”,用于存放应用程序只读代码段。对于内核只读代码段的局部地址,通过修改内核连接器脚本,将内核正文段按照地址空间要求对齐后设置,后续该地址将保持不变。此外,由于地址空间局部化后,不能通过单个SMP系统的某个核完成其他SMP系统的只读代码段的拷贝,因此固件另外需要多配置了一块全局地址缓存区,socket 0的SMP0将正文段拷贝到全局地址缓存区后,其他SMP系统从该缓存区完成正文段的数据拷贝。
本实施例步骤1)中“局部地址”的配置步骤包括:通过修改内核连接器脚本vmlinux.lds.S将“局部地址”的起始标号_stext对齐在第一位置,结束标志_etext对齐在第二地址空间处,这样保证有至少有指定大小的空间用于存放内核只读代码段。
作为一种可选的实施方式,本实施例中将“局部地址”的起始标号_stext对齐在第一位置,结束标志_etext对齐在第二地址空间处具体是指将“局部地址”的起始标号_stext对齐在256M的位置,结束标志_etext对齐在16M地址空间处,使得“局部地址”至少有16M的空间用于存放内核只读代码段。毫无疑问,具体内核只读代码段的起始地址和大小,均可以通过修改该链接器脚本实现。
此外,对于“应用程序局部地址”的起始地址和大小,可以根据实际内存大小和应用程序规模设定一个最大值即可。
如图4所示,作为一种可选的实施方式,本实施例中固件会给每个SMP系统划分16MB的地址空间“局部地址”用于存放内核只读代码段,另外每个SMP系统会划分2GB的本地内存“应用程序局部地址”用于用户程序只读代码段的多副本实现。
本实施例中,步骤1)中操作系统通过SMC服务执行数据拷贝将内核只读代码段拷贝到每一个SMP系统中的“局部地址”中的步骤包括:
S1)在操作系统C语言引导阶段建页表前(paging_init函数中),根据内核正文段的起始地址和代码段的大小,在每个SMP系统下对应的内核正文段数据局部缓存区申请对应的虚地址空间;在虚地址空间申请成功后,将除socket 0的SMP 0外的其他SMP 0的对应缓存区的地址预留起来以防止操作系统无意中使用其中的内存、从而破坏了内核只读代码段的数据;主核通过发送SMC服务,将主核陷入EL3级别,完成socket 0的SMP 0内核正文段到全局地址空间的拷贝;拷贝完成后,主核将向每个SMP系统的某个核发送事件,将处于wfe状态的该核唤醒,完成全局地址缓存区到各自SMP系统的内核正文段的拷贝,至此,使得每个SMP系统均已经具备从本地取指和执行的能力;
S2)在从核唤醒完成后,内核会根据cpu的特性,执行“内核热补丁”,所述“内核热补丁”为一系列的指令修正,执行“内核热补丁”会导致socket 0的SMP 0正文段的内容发生了变化,但是由于多核系统尚未调度起来,从核均处于空闲状态IDLE,因此其他SMP系统的正文段均未完成更新,主核通过调用SMC服务陷入EL3级别,完成socket 0SMP 0的正文段到全局地址缓存区的更新,但是由于从核均已经唤醒,因此无法立即通过发送事件通知其他SMP的CPU完成数据拷贝;
S3)在多核调度器初始化完成后、执行“内核热补丁”的指令前,完成其他SMP系统的内核只读代码段的更新:通过函数on_each_cpu调用函数rdonly_smc,所述函数rdonly_smc用于使得其他SMP系统的某个核调用SMC服务陷入EL3级别,完成全局缓存区到本SMP系统的内核只读代码段的更新,其他核则处于空闲状态IDLE,等待所有内核只读代码段数据更新完毕,进入操作系统按照正常引导流程。
本实施例NUMA感知的SMP系统只读代码段多副本优化方法通过设计硬件的局部地址空间技术,将应用程序、动态库或者内核的只读代码段分离开来,存放在每个SMP系统的局部地址空间内,从而达到本地取指、减轻片上网络和互联压力,提升性能的目的。参见步骤S1)~步骤S3)可知,对于内核多副本的拷贝,本实施例中还涉及“内核热补丁”导致内核正文段发生改变所采取的更新技术。上述步骤S1)~步骤S3)分别为OS和固件之间三次内核只读代码段拷贝的过程。图5是步骤S1)中OS和固件第一次内核只读代码段拷贝的流程图,具体包括:第一步,如路径①所示,主核完成内核只读代码段到全局中间缓存的拷贝。第二步,如路径②所示,主核发送事件给每个SMP系统的0核。第三步,如路径③所示,其它SMP系统的0核完成全局中间缓存到本地局部地址空间的拷贝。图6是步骤S2)中OS和固件第二次内核只读代码段拷贝的流程图,即主核完成socket 0的SMP 0内核只读代码段更新的流程图,具体步骤包括:如路径①所示,从核唤醒进入空闲状态IDLE后,主核会执行“内核热补丁”,执行完成后,主核将内核只读代码段的内容拷贝到全局中间缓存中。图7是步骤S3)中OS和固件第三次内核只读代码段拷贝的流程图,即其他SMP系统完成内核只读代码段更新的流程图,具体步骤包括:第一步,如路径①所示,除socket0的SMP 0外其他SMP系统的0核将陷入EL3级别;第二步,如路径②所示,其他SMP系统的0核分别从全局地址空间的正文段数据拷贝到各自的局部地址空间中,完成正文段更新。
本实施例中,步骤S3)中通过函数on_each_cpu调用函数rdonly_smc为并发执行的,使得正文段更新时间不会太长。
本实施例中,步骤1)之后、步骤2)之前还包括初始化“应用程序局部地址”的步骤:对每个SMP系统的“应用程序局部地址”进行统一的初始化和管理,使得后续每次对该空间的写操作,均会同时更新到每个SMP系统对于的区域中,且该“应用程序局部地址”某个页面用完后使得每个SMP系统对于该页面的区域均会释放掉。本实施例步骤2)中通过修改程序加载器的相关代码,将二进制文件或者动态库的只读代码段解析出来,并调用上述针对只读代码段定制的内存管理函数,将只读代码段的数据复制到每一个SMP系统的局部地址空间中,后续应用取指时都能从本SMP系统取指。
图8是本实施例的应用程序只读代码段多副本的实现流程图,具体步骤包括:第一步:如路径①所示,二进制加载器或者动态库解析器加载二进制文件或者动态库。第二步:如路径②所示,二进制加载器或者动态库解析器解析应用程序只读代码段。第三步:如路径③所示,加载器或者解析器识别应用程序只读代码段后,向定制的内存管理模块提出申请,将只读部分复制到每个SMP系统的应用程序局部地址空间中。第四步:如路径④、⑤、⑥所示,应用程序执行完后,将上述申请到的局部内存地址返还给定制的内存管理器。
综上所述,本实施例NUMA感知的SMP系统只读代码段多副本优化方法通过固件对整个地址空间的划分和管理过程中,一方面会在每个SMP系统下预留一段局部地址空间给内核只读代码段使用,另一方面会在每一个SMP系统中预留另外一段局部地址空间供应用程序和动态库只读代码段使用。对于内核只读代码段的复制,在系统引导过程中,主核通过SMC服务,将内核只读代码段的内核存放到一个全局的中间缓存,然后主核发送事件通知其它SMP系统的核,完成全局中间缓存到每个SMP系统内核只读代码段局部地址空间的拷贝;在从核唤醒起来进入IDLE后,主核会执行内核热补丁内核完成正文段某些指令的修正,从而导致socket 0的SMP 0与其它SMP的内核只读代码段的内容发生了变化,因此需要将socket 0的SMP 0正文段的同步更新到其他SMP的正文段中,因此主核会第二次调用SMC服务将socket 0的SMP 0的内核只读代码段复制到全局中间缓存中;由于上述过程是只有主核在执行,因此多核起来后仍需要其他SMP系统的某个核调用SMC服务将全局缓冲区数据拷贝到各自的内核只读代码段中,最终完成数据更新,后续执行内核正文段时,每一个SMP系统都可以进行本地取指。因此对于内核只读代码段多副本整个方案,除固件需要完成地址空间的划分和管理外,操作系统需通过SMC服务完成三次数据拷贝。对于应用程序只读代码段多副本,OS首先将固件预留的供应用程序使用的内存,定制专门的内存管理器对该部分内存进行分配和管理;在应用程序二进制或者动态库加载过程中,解析它们只读代码段部分,并将其复制到每一个SMP系统中的局部地址空间中,因此后续应用程序取指时均能从本地SMP系统中取指。程序执行完成后,调用定制的内存管理器对不用的局部地址空间进行释放。相对内核只读代码段多副本,应用程序只读代码段多副本主要是少了两次SMP调用过程,多了针对局部地址空间进行管理的过程。本实施例NUMA感知的SMP系统只读代码段多副本优化方法能够解决NUMA感知的SMP系统中远端取指问题,利用地址局部化技术来实现软件性能优化,在片上网络以及跨路带宽、延迟受限时能够获得较好的性能提升。
本实施例还提供一种NUMA感知的SMP系统只读代码段多副本优化系统,包括:
固件地址划分程序模块,用于预先为每个SMP系统配置两段局部地址空间,包括用于后续存放各自SMP系统的内核只读代码段的“局部地址”、用于存放应用程序只读代码段的“应用程序局部地址”;
只读代码段拷贝程序模块,用于通过SMC服务执行数据拷贝将内核只读代码段拷贝到每一个SMP系统中的“局部地址”中;且在应用程序二进制或者动态库加载过程中解析它们只读代码段部分,并将其复制到每一个SMP系统中的“应用程序局部地址”中;
本地取指程序模块,用于当每一个SMP系统需要执行内核只读代码段时,直接通过“局部地址”进行本地取指;当每一个SMP系统需要执行应用程序二进制或者动态库的只读代码段时,直接通过“应用程序局部地址”进行本地取指。
本实施例还提供一种NUMA感知的SMP系统只读代码段多副本优化系统,包括计算机设备,所述计算机设备包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行前述NUMA感知的SMP系统只读代码段多副本优化方法的步骤。
本实施例还提供一种NUMA感知的SMP系统只读代码段多副本优化系统,包括计算机设备,所述计算机设备包括相互连接的微处理器和存储器,所述存储器中存储有被编程或配置以执行前述NUMA感知的SMP系统只读代码段多副本优化方法的计算机程序。
本实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有被编程或配置以执行前述NUMA感知的SMP系统只读代码段多副本优化方法的计算机程序。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (9)
1.一种NUMA感知的SMP系统只读代码段多副本优化方法,其特征在于,包括:
1)预先为每个SMP系统配置两段局部地址空间,包括用于后续存放各自SMP系统的内核只读代码段的“局部地址”、用于存放应用程序只读代码段的“应用程序局部地址”;
2)通过SMC服务执行数据拷贝将内核只读代码段拷贝到每一个SMP系统中的“局部地址”中;且在应用程序二进制或者动态库加载过程中解析它们只读代码段部分,并将其复制到每一个SMP系统中的“应用程序局部地址”中;
3)当每一个SMP系统需要执行内核只读代码段时,直接通过“局部地址”进行本地取指;当每一个SMP系统需要执行应用程序二进制或者动态库的只读代码段时,直接通过“应用程序局部地址”进行本地取指;
步骤1)中操作系统通过SMC服务执行数据拷贝将内核只读代码段拷贝到每一个SMP系统中的“局部地址”中的步骤包括:
S1)在操作系统C语言引导阶段建页表前,根据内核正文段的起始地址和代码段的大小,在每个SMP系统下对应的内核正文段数据局部缓存区申请对应的虚地址空间;在虚地址空间申请成功后,将除socket 0 的SMP 0外的其他SMP 0的对应缓存区的地址预留起来以防止操作系统无意中使用其中的内存、从而破坏了内核只读代码段的数据;主核通过发送SMC服务,将主核陷入EL3级别,完成socket 0 的SMP 0内核正文段到全局地址空间的拷贝;拷贝完成后,主核将向每个SMP系统的某个核发送事件,将处于wfe状态的该核唤醒,完成全局地址缓存区到各自SMP系统的内核正文段的拷贝,至此,使得每个SMP系统均已经具备从本地取指和执行的能力;
S2)在从核唤醒完成后,内核会根据cpu的特性,执行“内核热补丁”,所述“内核热补丁”为一系列的指令修正,执行“内核热补丁”会导致socket 0 的SMP 0正文段的内容发生了变化,但是由于多核系统尚未调度起来,从核均处于空闲状态IDLE,因此其他SMP系统的正文段均未完成更新,主核通过调用SMC服务陷入EL3级别,完成socket 0 SMP 0的正文段到全局地址缓存区的更新,但是由于从核均已经唤醒,因此无法立即通过发送事件通知其他SMP的CPU完成数据拷贝;
S3)在多核调度器初始化完成后、执行“内核热补丁”的指令前,完成其他SMP系统的内核只读代码段的更新:通过函数on_each_cpu调用函数rdonly_smc,所述函数rdonly_smc用于使得其他SMP系统的某个核调用SMC服务陷入EL3级别,完成全局缓存区到本SMP系统的内核只读代码段的更新,其他核则处于空闲状态IDLE,等待所有内核只读代码段数据更新完毕,进入操作系统按照正常引导流程。
2.根据权利要求1所述的NUMA感知的SMP系统只读代码段多副本优化方法,其特征在于,步骤1)中“局部地址”的配置步骤包括:通过修改内核连接器脚本vmlinux.lds.S将“局部地址”的起始标号_stext对齐在第一位置,结束标志_etext对齐在第二地址空间处,这样保证有至少有指定大小的空间用于存放内核只读代码段。
3.根据权利要求2所述的NUMA感知的SMP系统只读代码段多副本优化方法,其特征在于,所述将“局部地址”的起始标号_stext对齐在第一位置,结束标志_etext对齐在第二地址空间处具体是指将“局部地址”的起始标号_stext对齐在256M的位置,结束标志_etext对齐在16M地址空间处,使得“局部地址”至少有16M的空间用于存放内核只读代码段。
4.根据权利要求1所述的NUMA感知的SMP系统只读代码段多副本优化方法,其特征在于,步骤S3)中通过函数on_each_cpu调用函数rdonly_smc为并发执行的。
5.根据权利要求1所述的NUMA感知的SMP系统只读代码段多副本优化方法,其特征在于,步骤1)之后、步骤2)之前还包括初始化“应用程序局部地址”的步骤:对每个SMP系统的“应用程序局部地址”进行统一的初始化和管理,使得后续每次对该空间的写操作,均会同时更新到每个SMP系统对于的区域中,且该“应用程序局部地址”某个页面用完后使得每个SMP系统对于该页面的区域均会释放掉。
6.一种NUMA感知的SMP系统只读代码段多副本优化系统,其特征在于,包括:
固件地址划分程序模块,用于预先为每个SMP系统配置两段局部地址空间,包括用于后续存放各自SMP系统的内核只读代码段的“局部地址”、用于存放应用程序只读代码段的“应用程序局部地址”;
只读代码段拷贝程序模块,用于通过SMC服务执行数据拷贝将内核只读代码段拷贝到每一个SMP系统中的“局部地址”中;且在应用程序二进制或者动态库加载过程中解析它们只读代码段部分,并将其复制到每一个SMP系统中的“应用程序局部地址”中;
本地取指程序模块,用于当每一个SMP系统需要执行内核只读代码段时,直接通过“局部地址”进行本地取指;当每一个SMP系统需要执行应用程序二进制或者动态库的只读代码段时,直接通过“应用程序局部地址”进行本地取指;
所述固件地址划分程序模块中操作系统通过SMC服务执行数据拷贝将内核只读代码段拷贝到每一个SMP系统中的“局部地址”中的步骤包括:
S1)在操作系统C语言引导阶段建页表前,根据内核正文段的起始地址和代码段的大小,在每个SMP系统下对应的内核正文段数据局部缓存区申请对应的虚地址空间;在虚地址空间申请成功后,将除socket 0 的SMP 0外的其他SMP 0的对应缓存区的地址预留起来以防止操作系统无意中使用其中的内存、从而破坏了内核只读代码段的数据;主核通过发送SMC服务,将主核陷入EL3级别,完成socket 0 的SMP 0内核正文段到全局地址空间的拷贝;拷贝完成后,主核将向每个SMP系统的某个核发送事件,将处于wfe状态的该核唤醒,完成全局地址缓存区到各自SMP系统的内核正文段的拷贝,至此,使得每个SMP系统均已经具备从本地取指和执行的能力;
S2)在从核唤醒完成后,内核会根据cpu的特性,执行“内核热补丁”,所述“内核热补丁”为一系列的指令修正,执行“内核热补丁”会导致socket 0 的SMP 0正文段的内容发生了变化,但是由于多核系统尚未调度起来,从核均处于空闲状态IDLE,因此其他SMP系统的正文段均未完成更新,主核通过调用SMC服务陷入EL3级别,完成socket 0 SMP 0的正文段到全局地址缓存区的更新,但是由于从核均已经唤醒,因此无法立即通过发送事件通知其他SMP的CPU完成数据拷贝;
S3)在多核调度器初始化完成后、执行“内核热补丁”的指令前,完成其他SMP系统的内核只读代码段的更新:通过函数on_each_cpu调用函数rdonly_smc,所述函数rdonly_smc用于使得其他SMP系统的某个核调用SMC服务陷入EL3级别,完成全局缓存区到本SMP系统的内核只读代码段的更新,其他核则处于空闲状态IDLE,等待所有内核只读代码段数据更新完毕,进入操作系统按照正常引导流程。
7.一种NUMA感知的SMP系统只读代码段多副本优化系统,包括计算机设备,所述计算机设备包括相互连接的微处理器和存储器,其特征在于,所述微处理器被编程或配置以执行权利要求1~5中任意一项所述NUMA感知的SMP系统只读代码段多副本优化方法的步骤。
8.一种NUMA感知的SMP系统只读代码段多副本优化系统,包括计算机设备,所述计算机设备包括相互连接的微处理器和存储器,其特征在于,所述存储器中存储有被编程或配置以执行权利要求1~5中任意一项所述NUMA感知的SMP系统只读代码段多副本优化方法的计算机程序。
9.一种计算机可读存储介质,其特征在于,该计算机可读存储介质中存储有被编程或配置以执行权利要求1~5中任意一项所述NUMA感知的SMP系统只读代码段多副本优化方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010996761.2A CN112099799B (zh) | 2020-09-21 | 2020-09-21 | Numa感知的smp系统只读代码段多副本优化方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010996761.2A CN112099799B (zh) | 2020-09-21 | 2020-09-21 | Numa感知的smp系统只读代码段多副本优化方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112099799A CN112099799A (zh) | 2020-12-18 |
CN112099799B true CN112099799B (zh) | 2022-01-14 |
Family
ID=73754681
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010996761.2A Active CN112099799B (zh) | 2020-09-21 | 2020-09-21 | Numa感知的smp系统只读代码段多副本优化方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112099799B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113282344B (zh) * | 2021-05-25 | 2022-11-04 | 中国航空无线电电子研究所 | 在飞腾非对称双核处理器上实现天脉操作系统的方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5887138A (en) * | 1996-07-01 | 1999-03-23 | Sun Microsystems, Inc. | Multiprocessing computer system employing local and global address spaces and COMA and NUMA access modes |
CN101604263A (zh) * | 2009-07-13 | 2009-12-16 | 浪潮电子信息产业股份有限公司 | 一种实现操作系统核心代码段多副本运行的方法 |
CN102360345A (zh) * | 2011-10-11 | 2012-02-22 | 浪潮电子信息产业股份有限公司 | 一种实现可配置共享库多副本的方法 |
CN104536764A (zh) * | 2015-01-09 | 2015-04-22 | 浪潮(北京)电子信息产业有限公司 | 程序运行方法和装置 |
CN105718287A (zh) * | 2016-01-20 | 2016-06-29 | 中南大学 | 一种智能终端的程序流式执行方法 |
CN109375872A (zh) * | 2018-09-27 | 2019-02-22 | 腾讯科技(深圳)有限公司 | 数据访问请求的处理方法、装置和设备及存储介质 |
CN111247512A (zh) * | 2017-10-17 | 2020-06-05 | 华为技术有限公司 | 用于统一内存访问的计算机系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7765381B2 (en) * | 2003-04-04 | 2010-07-27 | Oracle America, Inc. | Multi-node system in which home memory subsystem stores global to local address translation information for replicating nodes |
CN101661397B (zh) * | 2008-08-29 | 2012-09-12 | 宇龙计算机通信科技(深圳)有限公司 | 实现程序动态加载的方法和生成映射文件的方法及设备 |
CN106354543B (zh) * | 2016-08-11 | 2019-11-26 | 上海交通大学 | 一种基于虚拟机和宿主机内存地址转换的numa内存迁页方法 |
-
2020
- 2020-09-21 CN CN202010996761.2A patent/CN112099799B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5887138A (en) * | 1996-07-01 | 1999-03-23 | Sun Microsystems, Inc. | Multiprocessing computer system employing local and global address spaces and COMA and NUMA access modes |
CN101604263A (zh) * | 2009-07-13 | 2009-12-16 | 浪潮电子信息产业股份有限公司 | 一种实现操作系统核心代码段多副本运行的方法 |
CN102360345A (zh) * | 2011-10-11 | 2012-02-22 | 浪潮电子信息产业股份有限公司 | 一种实现可配置共享库多副本的方法 |
CN104536764A (zh) * | 2015-01-09 | 2015-04-22 | 浪潮(北京)电子信息产业有限公司 | 程序运行方法和装置 |
CN105718287A (zh) * | 2016-01-20 | 2016-06-29 | 中南大学 | 一种智能终端的程序流式执行方法 |
CN111247512A (zh) * | 2017-10-17 | 2020-06-05 | 华为技术有限公司 | 用于统一内存访问的计算机系统 |
CN109375872A (zh) * | 2018-09-27 | 2019-02-22 | 腾讯科技(深圳)有限公司 | 数据访问请求的处理方法、装置和设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
【操作系统之十】内存分页管理与swap;cac2020;《https://www.cnblogs.com/cac2020/p/11778635.html》;20191101;全文 * |
Local and Remote Memory: Memory in a Linux NUMA System;HanBlogs;《https://blog.csdn.net/han2529386161/article/details/103429470》;20191206;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112099799A (zh) | 2020-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10169013B2 (en) | Arranging binary code based on call graph partitioning | |
US9996401B2 (en) | Task processing method and virtual machine | |
US7254676B2 (en) | Processor cache memory as RAM for execution of boot code | |
US8627051B2 (en) | Dynamically rewriting branch instructions to directly target an instruction cache location | |
US20050097305A1 (en) | Method and apparatus for using FPGA technology with a microprocessor for reconfigurable, instruction level hardware acceleration | |
CA3070006C (en) | Method for reading data stored in a non-volatile cache using rdma | |
US8793439B2 (en) | Accelerating memory operations using virtualization information | |
US9063805B2 (en) | Method and system for enabling access to functionality provided by resources outside of an operating system environment | |
US9116628B2 (en) | Apparatus and method for providing a multicore programming platform | |
CN114580344B (zh) | 测试激励生成方法、验证方法、验证系统及相关设备 | |
CN111666210A (zh) | 一种芯片验证方法及装置 | |
CN112099799B (zh) | Numa感知的smp系统只读代码段多副本优化方法及系统 | |
CN102467394A (zh) | 多核热补丁的实现方法及系统 | |
CN111247512B (zh) | 用于统一内存访问的计算机系统 | |
CN104714792A (zh) | 多进程共享数据处理方法和装置 | |
CN101425052B (zh) | 一种事务性内存的实现方法 | |
CN110018855A (zh) | 一种基于安卓系统开机优化方法、存储介质及智能终端 | |
WO2021082720A1 (zh) | 一种数据处理方法及装置 | |
US20120151153A1 (en) | Programmable Controller | |
Morisawa et al. | Flexible executor allocation without latency increase for stream processing in apache spark | |
CN114116222A (zh) | 一种嵌入式系统启动时内存布局动态规划的方法及装置 | |
JP2006215592A (ja) | 再構成可能な、命令レベルのハードウェアによる高速化のためにマイクロプロセッサとともにfpgaテクノロジを使用する方法および装置 | |
KR102456017B1 (ko) | 응용 프로그램간 파일 공유 장치 및 방법 | |
CN117251216B (zh) | 一种服务器固件启动优化方法、系统、服务器及存储介质 | |
US20240127034A1 (en) | Apparatus and method for distributed processing of neural network |
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 | ||
CB02 | Change of applicant information |
Address after: 300452 Building 5, Xin'an pioneer Plaza, Binhai New Area marine high tech Development Zone, Tianjin Applicant after: Feiteng Information Technology Co.,Ltd. Address before: 300452 Building 5, Xin'an pioneer Plaza, Binhai New Area marine high tech Development Zone, Tianjin Applicant before: TIANJIN FEITENG INFORMATION TECHNOLOGY Co.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |