CN101604263A - 一种实现操作系统核心代码段多副本运行的方法 - Google Patents

一种实现操作系统核心代码段多副本运行的方法 Download PDF

Info

Publication number
CN101604263A
CN101604263A CNA2009100167723A CN200910016772A CN101604263A CN 101604263 A CN101604263 A CN 101604263A CN A2009100167723 A CNA2009100167723 A CN A2009100167723A CN 200910016772 A CN200910016772 A CN 200910016772A CN 101604263 A CN101604263 A CN 101604263A
Authority
CN
China
Prior art keywords
cpu
core
internal memory
core code
cpun
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.)
Pending
Application number
CNA2009100167723A
Other languages
English (en)
Inventor
张东
吴楠
赵明
郭露
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Electronic Information Industry Co Ltd
Original Assignee
Langchao Electronic Information Industry Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Langchao Electronic Information Industry Co Ltd filed Critical Langchao Electronic Information Industry Co Ltd
Priority to CNA2009100167723A priority Critical patent/CN101604263A/zh
Publication of CN101604263A publication Critical patent/CN101604263A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明提供一种操作系统代码段多副本运行的方法,该方法是针对传统NUMA系统下的操作系统无法兼顾CPU并行度和访存效率的缺点,在多个CPU的本地内存中,建立核心代码段的多个副本使核心代码段局部化;当系统需要陷入核心态时,可以选择当前进程所运行的CPU,或者发生中断的硬件亲近的CPU运行核心代码;CPU在运行核心的过程中,可以直接访问本地内存中的核心代码段数据,从而提高了访问内存的效率,达到提升系统整体性能的目的。

Description

一种实现操作系统核心代码段多副本运行的方法
技术领域
本发明涉及计算机操作系统软件技术领域,具体涉及一种在NUMA体系结构计算机上,实现操作系统核心代码段多副本运行的方法。
技术背景
目前对于多处理器计算机系统的设计而言,通常有以下三种体系结构可以采用:对称多处理器SMP模式、大规模并行处理器MPP模式和非一致存储器访问NUMA模式。
SMP模式将多个处理器与一个集中的存储器相连。在SMP模式下,所有处理器都可以访问同一个系统物理存储器。SMP系统通常只运行操作系统的一个副本。因此SMP系统有时也被称为一致存储器访问(UMA)结构体系,一致性意指无论在什么时候,处理器只能为内存的每个数据保持或共享唯一一个数值。SMP的缺点是可伸缩性有限,因为在存储器接口达到饱和的时候,增加处理器并不能获得更高的性能。SMP体系结构如附图1所示。
MPP模式则是一种分布式存储器模式,能够将更多的处理器纳入一个系统的存储器。一个分布式存储器模式具有多个节点,每个节点都有自己的存储器,可以配置为SMP模式,也可以配置为非SMP模式。单个的节点相互连接起来就形成了一个总系统。与单一SMP模式相比,在SMP模式中,数据一致性是由硬件专门管理的,这样做比较容易实现,但成本较高;在MPP模式中,节点之间的一致性是由软件来管理,因此,它的速度相对较慢,但成本却低得多。MMP体系结构如图2所示。
NUMA模式也采用了分布式存储器模式,不同的是所有节点中的处理器都可以访问全部的系统物理存储器。每个处理器访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少。即,访问不同存储器的时间是不一致的,因此这种模式被称为“NUMA”(非一致存储器访问)。如附图3所示,我们定义CPU和直接连接在其上的物理内存之间的关系为“亲近的”,与需要经过其它CPU“间接”访问的物理内存之间的关系是“非亲近的”。相应的,我们定义CPU直接连接的物理内存为“本地内存”,或“局部内存”,其他的物理内存为“全局内存”。NUMA既保持了SMP模式单一操作系统副本、简便的应用程序编程模式以及易于管理的特点,又继承了MPP模式的可扩充性,可以有效地扩充系统的规模。因此,面向事务处理的大型计算机系统多采用NUMA模式。
在多CPU的计算机系统中,每个CPU都可以进入核心态执行。现在的计算机系统,包括X86、IA64、Power、SPARC等,都采用中断、异常或者系统调用门的方式陷入核心。对于SMP架构的多CPU系统中,会按照负载均衡的原则将进程分布在不同的CPU上;当某个进程出现缺页故障,或者系统调用时,需要从用户态进入核心态,此时系统会选择该进程当前运行的CPU来执行核心代码;当出现硬件中断时,系统会按照某种策略选择一个CPU来执行核心中的中断处理过程,譬如选择当前最空闲的CPU。
选择进程当前运行的CPU执行核心代码,而不是固定某个CPU执行核心代码的优点是:
●可以减少CPU之间进行切换的开销;
●现代的操作系统核心都是支持重复陷入的,即可以并行运行。允许多个CPU陷入核心,可以有效提高CPU的利用率。
NUMA体系的计算机系统略微有所不同。由于在NUMA体系下,CPU访问非亲近的物理内存,和访问亲近的物理内存的时间是不一致的,而且这种时间延迟往往是比较大的(通常在几倍)。因此,在NUMA体系计算机上运行的操作系统通常会将一个进程绑定在某个CPU上,并且尽量保证该进程所用的物理内存与该CPU亲近。这样可以最大程度避免进程出现跨CPU的物理内存访问,降低访存延迟,提高系统运行效率。而操作系统核心的情况与用户进程不同。在传统的NUMA计算机系统中,只运行一个操作系统核心副本。即,操作系统核心的代码段在物理内存中只存在一个副本,而且这个副本通常只会在某个CPU亲近的物理内存中。这是与传统的UNIX类操作系统的体系结构设计相关的。
如附图4所示,以只有两个CPU的NUMA结构为例,说明了传统情况下,分别在两个CPU上运行的进程,其用户态地址空间和核心态地址空间,与机器物理内存之间的映射关系。不同进程的用户态空间(包括代码和数据)被映射到了不同的物理地址(也有可能是相同的物理地址,譬如共享库、共享内存等。实际上在NUMA体系下,为了降低访存延迟,共享库等也应尽量局部化),而核心态空间则被映射到相同的物理地址,譬如,CPU1的亲近物理内存中。
当系统发生中断、异常或者系统调用,需要从用户态陷入到核心态的时候,传统系统有两种方法可以选择:
方法1:当发生系统调用或缺页异常等,从用户态陷入核心时,选择当前进程所在的CPU执行核心代码;或者当发生硬件中断时,选择该硬件连接的CPU执行中断处理例程;
方法2:选择核心代码段所在物理内存亲近的CPU作为核心的执行者,如在附图4的例子中,每次都是选择CPU1执行核心代码。
方法1是SMP体系也会采用的方法(不太相同的是,对于硬件中断,所有CPU都是对等的,选择任何一个都是可以的),优点也是同样的,但是却有一个很大的缺点:就是除了核心代码段所在物理内存亲近的CPU之外,其他CPU访问核心代码段都是存在延迟的。如附图4所示,CPU2访问核心代码段就比访问本地内存要慢很多。而一个真实的NUMA系统往往有16个、32个以上,甚至多至几千个CPU,即绝大部分CPU访问核心代码段都是全局访问,访存延迟是很大的;特别是,当多数CPU并行进入核心态时,它们对核心代码段的访问,都需要经过CPU1“中转”到同样的物理内存地址,CPU1的负载会急剧加大,效率下降也非常明显。虽然我们通过CPU硬件的“缓冲区”(如安腾II处理器,采用L1、L2、L3三级cache),减少全局访问物理内存的次数。但是CPU的cache,相对于核心代码段,总是小了很多,而且不可能完全用于存放核心代码段。
采用方法2可以避免CPU访问非亲近的物理内存,减小访存延迟,但是前面提到的不需要CPU切换、CPU并行运行等优点也就不存在了。对于16个以上CPU的NUMA系统而言,只有1个CPU运行核心代码所带来的“低效”也是显而易见的。
因此,无论是方法1,还是方法2,都无法同时兼顾提高CPU并行度和提高访存效率这两个目标,从而使系统的整体性能下降。本发明针对传统方法的弊端,采用在多个CPU的本地内存中建立核心代码的多个副本的方法,既能够实现CPU的并行运行,减少CPU切换次数,又可以避免CPU对核心代码段的全局访问,提高系统访存效率,从能有效提升系统的整体性能。
1、发明内容
本发明针对传统NUMA系统下的操作系统无法兼顾CPU并行度和访存效率的缺点,设计了在多个CPU的本地内存中,建立核心代码段的多个副本的方法,简单来讲,就是核心代码段的局部化;当系统需要陷入核心态时,可以选择当前进程所运行的CPU,或者发生中断的硬件亲近的CPU运行核心代码;CPU在运行核心的过程中,可以直接访问本地内存中的核心代码段数据,从而提高了访问内存的效率,达到提升系统整体性能的目的。
为了实现以上目的,本发明设计的操作系统代码段多副本运行的方法包含以下步骤:
1)多CPU的NUMA体系结构的计算机启动时,系统固件(如BIOS)指定系统中的某个CPU(以下记为CPU0),将操作系统核心代码加载(Load)到CPU0的本地内存中,并使用该CPU开始运行核心初始化代码;
2)CPU0在完成操作系统核心初始化后,唤醒其他所有CPU,并在CPU0上启动系统的第一个用户态进程(以下记为进程0),将控制权交给进程0;此时,其他所有CPU进入idle状态;
3)当首次有进程(记为进程n0)被调度到某个CPU(记为CPUn)上运行时,在CPUn的本地内存中分配一段内存,将核心代码段复制到该段内存中;并为进程n0建立新的核心代码段页表,使其指向CPUn的这段内存中,形成如附图5所示的情形;(实际上,不只是核心代码段,进程n0的用户态空间也尽量会被映射到CPUn的本地内存中)
4)在CPUn的本地内存中分配一段内存,建立中断向量表的副本,其中所有的中端向量地址均指向本地核心代码段副本中的中断处理函数;并修改CPUn的中端向量入口寄存器,使其指向本地中断向量表副本的物理地址;
5)对于使用系统调用门等方法陷入核心的硬件,还需要参照中断向量表的处理方式,建立系统调用入口表的本地副本,并修改CPUn的入口寄存器;
6)当再次有进程(记为进程nm)被调度到CPUn上运行时,只需要修改进程nm的核心代码段页表,使其指向CPUn中的核心代码段副本。
此后,当系统因为用户进程的系统调用、软中断、异常或者硬件中断进入核心态时,CPU会根据中断向量表的内容,自动调用本地内存中的核心代码执行,从而实现核心代码段的局部化。
本发明的有益效果是:在NUMA体系结构的多CPU计算机中,既能够充分发挥多CPU并行执行核心所带来的并行性的提高,又能够避免传统操作系统核心需要频繁访问全局内存或非本地I/O所带来的访存损失,有效提高了系统总体处理性能。
附图说明
附图1为SMP体系结构示意图;
附图2为MMP体系结构示意图;
附图3为NUMA体系结构示意图;
附图4为传统的针对NUMA体系结构下操作系统中进程地址空间的映射方法;
附图5为本发明的方法针对NUMA体系结构的操作系统中进程地址空间的映射方法。
具体实施方式
下面参照附图,对本发明的内容以一个具体实例来描述其实现方式。
如附图5所示,以两个CPU所组成的NUMA体系的计算机为例。需要对现有操作系统核心的进程调度和存储管理模块进行修改,增加以下处理步骤:
0)计算机启动时,系统固件(如BIOS)指定系统中的某个CPU(以下记为CPU0),将操作系统核心代码加载(Load)到CPU0的本地内存中,并使用该CPU开始运行核心初始化代码;
1)操作系统核心在完成初始化后,唤醒其他所有CPU,并在CPU0上启动系统的第一个用户态进程(以下记为进程0),并将控制权交给进程0;此时,其他所有CPU进入idle状态;
2)当操作系统核心发现首次有进程(记为进程n0)被调度到某个CPU(记为CPUn)上运行时,进程调度模块将调用存储管理模块,在CPUn的本地内存中分配一段内存,将核心代码段复制到该段内存中;并为进程n0建立新的核心代码段页表,使其指向CPUn的这段内存中,形成如附图5所示的情形;(实际上,不只是核心代码段,进程n0的用户态空间也尽量会被映射到CPUn的本地内存中)
3)进程调度模块还将在CPUn的本地内存中分配一段内存,建立中断向量表的副本,其中所有的中端向量地址均指向本地核心代码段副本中的中断处理函数;并修改CPUn的中端向量入口寄存器,使其指向本地中断向量表副本的物理地址;
4)对于使用系统调用门等方法陷入核心的硬件,还需要参照中断向量表的处理方式,建立系统调用入口表的本地副本,并修改CPUn的入口寄存器;
5)当再次有进程(记为进程nm)被调度到CPUn上运行时,进程调度模块,只需要调用存储管理模块,修改进程nm的核心代码段页表,使其指向CPUn中的核心代码段副本。
针对超过两个CPU的NUMA体系的计算机,可以参照以上步骤进行扩展。实际上,真实的NUMA体系计算机可能采用多个CPU为一组,CPU组内采用类似SMP方式共享物理内存的结构构成。此时,并不需要为所有的CPU都建立核心代码段本地内存副本,而只需要为一个CPU组建立一个核心代码段副本即可。
以上所述的实例对本发明的实现方式作了详细的说明,但是本发明的具体实现形式并不局限于此,对于本技术领域的一般技术人员来说,在不背离本发明所述方法的精神和权利要求范围的情况下对它进行的各种显而易见的改变都在本发明的保护范围之内。

Claims (1)

1、一种实现操作系统核心代码段多副本运行的方法,其特征在于:在多个CPU的本地内存中建立核心代码段的多个副本,即核心代码段的局部化;当系统需要陷入核心态时,选择当前进程所运行的CPU或者发生中断的硬件亲近的CPU运行核心代码;CPU在运行核心的过程中,直接访问本地内存中的核心代码段数据,用以提高访问内存的效率,达到提升系统整体性能的目的,代码段多副本运行步骤如下:
1)多CPU的NUMA体系结构的计算机启动时,系统固件BIOS指定系统中的某个CPU以下记为CPUO,将操作系统核心代码加载到CPUO的本地内存中,并使用该CPUO开始运行核心初始化代码;
2)CPUO在完成操作系统核心初始化后,唤醒其他所有CPU,并在CPUO上启动系统的第一个用户态进程,以下记为进程0,将控制权交给进程0;此时,其他所有CPU进入idele状态;
3)当首次有进程,记为进程n0被调度到某个CPU,记为CPUn上运行时,在CPUn的本地内存中分配一段内存,将核心代码段复制到该段内存中;并为进程n0建立新的核心代码段页表,使其指向CPUn的这段内存中,被映射到CPUn的本地内存中的还有进程n0的用户态空间;
4)在CPUn的本地内存中分配一段内存,建立中断向量表的副本,其中所有的中端向量地址均指向本地核心代码段副本中的中断处理函数;并修改CPUn的中端向量入口寄存器,使其指向本地中断向量表副本的物理地址;
5)对于使用系统调用门方法陷入核心的硬件,还需要参照中断向量表的处理方式,建立系统调用入口表的本地副本,并修改CPUn的入口寄存器;
6)当再次有进程,记为进程nm,被调度到CPUn上运行时,只需要修改进程nm的核心代码段页表,使其指向CPUn中的核心代码段副本。
CNA2009100167723A 2009-07-13 2009-07-13 一种实现操作系统核心代码段多副本运行的方法 Pending CN101604263A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNA2009100167723A CN101604263A (zh) 2009-07-13 2009-07-13 一种实现操作系统核心代码段多副本运行的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNA2009100167723A CN101604263A (zh) 2009-07-13 2009-07-13 一种实现操作系统核心代码段多副本运行的方法

Publications (1)

Publication Number Publication Date
CN101604263A true CN101604263A (zh) 2009-12-16

Family

ID=41470004

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2009100167723A Pending CN101604263A (zh) 2009-07-13 2009-07-13 一种实现操作系统核心代码段多副本运行的方法

Country Status (1)

Country Link
CN (1) CN101604263A (zh)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101901174A (zh) * 2010-07-28 2010-12-01 西安交通大学 基于代码段多副本对比机制提高程序可靠性方法
CN102163176A (zh) * 2011-04-15 2011-08-24 汉王科技股份有限公司 内存分配、中断消息处理的方法和装置
WO2011123991A1 (zh) * 2010-04-07 2011-10-13 福州福昕软件开发有限公司 并行计算的内存访问方法
CN102239478A (zh) * 2011-04-19 2011-11-09 华为技术有限公司 数据访问处理方法和设备
CN102289390A (zh) * 2010-06-01 2011-12-21 微软公司 系统管理程序调度器
CN102360345A (zh) * 2011-10-11 2012-02-22 浪潮电子信息产业股份有限公司 一种实现可配置共享库多副本的方法
CN102725746A (zh) * 2011-07-20 2012-10-10 华为技术有限公司 对分布式计算机系统中内存的管理方法和装置
CN103197957A (zh) * 2013-03-20 2013-07-10 无锡江南计算技术研究所 一种用户程序执行时页面复制方法
CN105786613A (zh) * 2014-12-25 2016-07-20 联芯科技有限公司 提高内存利用效率的方法
CN109032510A (zh) * 2018-06-29 2018-12-18 山石网科通信技术有限公司 基于分布式结构的处理数据的方法和装置
US10353609B2 (en) 2014-09-16 2019-07-16 Huawei Technologies Co., Ltd. Memory allocation method and apparatus
CN112099799A (zh) * 2020-09-21 2020-12-18 天津飞腾信息技术有限公司 Numa感知的smp系统只读代码段多副本优化方法及系统
CN114090086A (zh) * 2021-11-23 2022-02-25 西安微电子技术研究所 一种基于ZynqMP平台嵌入式操作系统快速启动方法
CN115599530A (zh) * 2022-11-25 2023-01-13 北京国科环宇科技股份有限公司(Cn) 一种基于Linux内核的硬实时优化改造方法

Cited By (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9448857B2 (en) 2010-04-07 2016-09-20 Foxit Corporation Memory access method for parallel computing
WO2011123991A1 (zh) * 2010-04-07 2011-10-13 福州福昕软件开发有限公司 并行计算的内存访问方法
CN102289390A (zh) * 2010-06-01 2011-12-21 微软公司 系统管理程序调度器
CN102289390B (zh) * 2010-06-01 2016-11-02 微软技术许可有限责任公司 系统管理程序调度器
CN101901174A (zh) * 2010-07-28 2010-12-01 西安交通大学 基于代码段多副本对比机制提高程序可靠性方法
CN102163176A (zh) * 2011-04-15 2011-08-24 汉王科技股份有限公司 内存分配、中断消息处理的方法和装置
CN102239478A (zh) * 2011-04-19 2011-11-09 华为技术有限公司 数据访问处理方法和设备
WO2011107040A3 (zh) * 2011-04-19 2011-12-29 华为技术有限公司 数据访问处理方法和设备
US8862857B2 (en) 2011-04-19 2014-10-14 Huawei Technologies Co., Ltd. Data access processing method and apparatus
CN102725746A (zh) * 2011-07-20 2012-10-10 华为技术有限公司 对分布式计算机系统中内存的管理方法和装置
CN102360345A (zh) * 2011-10-11 2012-02-22 浪潮电子信息产业股份有限公司 一种实现可配置共享库多副本的方法
CN103197957B (zh) * 2013-03-20 2016-06-08 无锡江南计算技术研究所 一种用户程序执行时页面复制方法
CN103197957A (zh) * 2013-03-20 2013-07-10 无锡江南计算技术研究所 一种用户程序执行时页面复制方法
US10353609B2 (en) 2014-09-16 2019-07-16 Huawei Technologies Co., Ltd. Memory allocation method and apparatus
US10990303B2 (en) 2014-09-16 2021-04-27 Huawei Technologies Co., Ltd. Memory allocation method and apparatus
CN105786613A (zh) * 2014-12-25 2016-07-20 联芯科技有限公司 提高内存利用效率的方法
CN109032510A (zh) * 2018-06-29 2018-12-18 山石网科通信技术有限公司 基于分布式结构的处理数据的方法和装置
CN112099799A (zh) * 2020-09-21 2020-12-18 天津飞腾信息技术有限公司 Numa感知的smp系统只读代码段多副本优化方法及系统
CN112099799B (zh) * 2020-09-21 2022-01-14 飞腾信息技术有限公司 Numa感知的smp系统只读代码段多副本优化方法及系统
CN114090086A (zh) * 2021-11-23 2022-02-25 西安微电子技术研究所 一种基于ZynqMP平台嵌入式操作系统快速启动方法
CN114090086B (zh) * 2021-11-23 2023-05-30 西安微电子技术研究所 一种基于ZynqMP平台嵌入式操作系统快速启动方法
CN115599530A (zh) * 2022-11-25 2023-01-13 北京国科环宇科技股份有限公司(Cn) 一种基于Linux内核的硬实时优化改造方法

Similar Documents

Publication Publication Date Title
CN101604263A (zh) 一种实现操作系统核心代码段多副本运行的方法
Dubois et al. Memory access dependencies in shared-memory multiprocessors
Dubois et al. Synchronization, coherence, and event ordering in multiprocessors
Schwarzkopf et al. The seven deadly sins of cloud computing research
US9229878B2 (en) Memory page offloading in multi-node computer systems
EP0901659B1 (en) Parallel processor with redundancy of processor pairs and method
CN108885586B (zh) 用于以有保证的完成将数据取出到所指示的高速缓存层级的处理器、方法、系统和指令
TW201802668A (zh) 可中斷及可重啟矩陣乘法指令、處理器、方法和系統
Park et al. Tera-scale 1D FFT with low-communication algorithm and Intel® Xeon Phi™ coprocessors
DE112013004751T5 (de) Prozessor mit mehreren Kernen, gemeinsam genutzter Kernerweiterungslogik und gemeinsam genutzten Kernerweiterungsnutzungsbefehlen
US9575806B2 (en) Monitoring accesses of a thread to multiple memory controllers and selecting a thread processor for the thread based on the monitoring
CN110647404A (zh) 用于多线程处理器中的屏障同步的系统、设备和方法
DE112012007115T5 (de) Wahlweise Logikprozessor-Zählung und Typauswahl für eine gegebene Arbeitsbelastung basierend auf Wärme- und Leistungsbudget-Einschränkungen der Plattform
KR101804677B1 (ko) 트랜잭션적인 전력 관리를 수행하기 위한 하드웨어 장치들 및 방법들
CN110659115A (zh) 具有硬件辅助任务调度的多线程处理器核
WO2022227671A1 (zh) 处理器微架构、SoC芯片及低功耗智能设备
CN101008921A (zh) 基于总线侦听的嵌入式异构多核缓存一致性方法
Dehyadegari et al. A tightly-coupled multi-core cluster with shared-memory HW accelerators
CN110262884B (zh) 一种基于申威众核处理器的核组内多程序多数据流分区并行的运行方法
CN102360345A (zh) 一种实现可配置共享库多副本的方法
Pitter et al. Towards a Java multiprocessor
Mauroner et al. Task priority aware SoC-bus for embedded systems
Ghose General-Purpose Multicore Architectures
Kang AI Drives Domain Specific Processors
Tornero et al. An Open-Source FPGA Platform for Shared-Memory Heterogeneous Many-Core Architecture Exploration

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Open date: 20091216