CN102662730B - 并行多核虚拟机的原子指令模拟方法及虚拟机装置 - Google Patents
并行多核虚拟机的原子指令模拟方法及虚拟机装置 Download PDFInfo
- Publication number
- CN102662730B CN102662730B CN201210127348.8A CN201210127348A CN102662730B CN 102662730 B CN102662730 B CN 102662730B CN 201210127348 A CN201210127348 A CN 201210127348A CN 102662730 B CN102662730 B CN 102662730B
- Authority
- CN
- China
- Prior art keywords
- cpu
- thread
- virtual machine
- threads
- cpu thread
- 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
Landscapes
- Debugging And Monitoring (AREA)
- Advance Control (AREA)
Abstract
本发明公开了一种并行多核虚拟机的原子指令模拟方法及虚拟机装置。虚拟机根据目标CPU的内核个数,创建与CPU内核个数相等的多个CPU线程,方法步骤包括:所述多个CPU线程中的第一CPU线程向其他CPU线程发送请求等待信号;接收到所述请求等待信号的其它CPU线程在原执行地址暂停,并返回确认信号;第一CPU线程接收到所有其他CPU线程的确认信号后执行原子访存指令;向处于原执行地址暂停的CPU线程发送撤消等待信号;接收到所述撤消等待信号的CPU线程由原执行地址继续执行。本发明具有较高的通用性和执行效率。
Description
技术领域
本发明涉及虚拟机技术领域,特别涉及一种并行多核虚拟机的原子指令模拟方法及虚拟机装置。
背景技术
虚拟机(Virtual Machine)是对一种硬件设备进行模拟仿真的软件系统。近年来随着多核CPU的普及,虚拟机也开始增加对于多核CPU的模拟功能。早期主要采用串行的方法模拟多核CUP的运行,即虚拟机是单进程,在微观上以分时间片的方式轮询调度多个CPU,在宏观上模拟多个CPU的并行行为。在开源虚拟机系统(例如Bochs、QEMU、Simple-scalar等)中,均以串行方法模拟执行目标系统中多个CPU。这种方式实现简单,但是所有被模拟的CPU只能共享使用本地的一个CPU资源,每个模拟CPU可利用的CPU资源与总的模拟个数成反比,扩展性差。采用以这种结构实现的多核虚拟机一般难以支持几十个以上的模拟CPU。
并行多核虚拟机有效克服了串行结构的局限性。在并行多核虚拟机中,创建多个线程,每个线程分别模拟一个目标CPU。这种方式能够充分利用本地CPU资源。在本地物理CPU个数大于被模拟的CPU个数时,能够得到接近线性的加速比。目前采用这种结构的虚拟机能够以较好的效率模拟几百甚至上千个CPU。
并行多核虚拟机需要解决的一个问题是原子访存指令的模拟。原子访存指令是在硬件上实现互斥访存的支持机制,用于为多线程之间的自旋锁、互斥量等同步原语提供最底层的支持。例如,在X86指令中提供了lock指令缀,CPU保证带有lock前缀的指令以原子方式实现对内存的一次读写操作。在串行结构的多核虚拟机中无需模拟lock的语义,而在并行多核虚拟机中必须保证模拟lock的原子语义,目前主要有三种手段:
1、加锁:即在访存动作之前加锁,访存动作之后解锁。这种手段要求所有访存动作都要包含加锁行为,使得每次访存模拟代价较高,整体效率较低。
2、采用本地CPU支持的原子访存指令:例如X86的lock,MIPS的11/sc,等等。这种方式只能针对特定的硬件平台,可移植性受到限制。
3、以数学算法模拟原子指令:例如并行研究领域中的CASN等算法。该算法对于使用环境有各方面限制,例如需要提供额外存储空间保存描述符(descriptor)、必须使用特殊函数读写内存等,通用性受到限制。
发明内容
本发明的目的在于提供一种可移植性强、执行效率高的原子访存指令的模拟方法和装置。
为实现上述目的,一方面,本发明提供了一种并行多核虚拟机的原子指令模拟方法,该虚拟机根据目标CPU的内核个数,创建与CPU内核个数相等的多个CPU线程。该方法步骤包括:所述多个CPU线程中的第一CPU线程向其他CPU线程发送请求等待信号;接收到所述请求等待的其它CPU线程在原执行地址暂停,并返回确认信号;第一CPU线程接收到所有其他CPU线程的确认信号后执行原子访存指令;向处于原执行地址暂停的CPU线程发送撤消等待信号;接收到所述撤消等待信号的CPU线程由原执行地址继续执行。
另一方面,本发明提供了一种虚拟机装置,包括线程创建模块、线程调度模块和执行模块。线程创建模块用于根据目标CPU的内核个数,创建与所述CPU内核个数相等的多个CPU线程,所述多个CPU线程包括第一CPU线程和其他CPU线程;线程调度模块用于所述多个CPU线程间的信息交互,其中,所述第一CPU线程向其他CPU线程发送请求等待信号,接收到所述请求等待信号的其它CPU线程在原执行地址暂停,并返回确认信号,所述第一CPU线程在执行原子访存指令后,向处于原执行地址暂停的CPU线程发送撤消等待信号;执行模块用于当所述第一CPU线程接收到所有其他CPU线程的确认信号后执行原子访存指令。
本发明具有下列优点:
1.方法通用性好,移植性高。本发明只使用本地操作系统支持的标准线程间通讯机制,不依赖于特定目标指令集,不依赖于特定的平台,对于访存宽度、位置不做任何限制。能够克服加锁、本地原子指令、CASN算法等方式的不足。
2.执行效率高。本发明的开销主要体现在线程之间发送消息的代价,据实验测试效率较好,平均每次原子访存模拟代价低于毫秒级。
附图说明
图1是本发明实施例一种并行多核虚拟机的原子指令模拟方法流程图;
图2是本发明实施例一种并行多核虚拟机的原子指令模拟方法示意图;
图3是本发明实施例一种虚拟机装置示意图。
具体实施方式
下面结合附图和具体实施方式对本发明作进一步详细描述。
图1是本发明实施例一种并行多核虚拟机的原子指令模拟方法流程图。该方法适用的虚拟机根据目标CPU的内核个数,创建与CPU内核个数相等的多个CPU线程。如图1所示,该方法包括步骤101-105。
在步骤101,多个CPU线程中的第一CPU线程向其他CPU线程发送请求等待信号。
具体地,虚拟机在模拟执行原子访存指令时,首先由多个CPU线程中请求执行原子访存指令的一个CPU线程,如第一CPU线程,向其他CPU线程发送请求等待信号。
在步骤102,接收到所述请求等待信号的其它CPU线程在原执行地址暂停,并返回确认信号。
具体地,接收到来自第一CPU线程的请求等待信号的其它CPU线程可以采用忙等待方式或阻塞等待方式在原执行地址暂停,同时向第一CPU线程返回确认信号。
在步骤103,第一CPU线程接收到所有其他CPU线程的确认信号后执行原子访存指令。
具体地,当第一CPU线程在接收到所有其他CPU线程返回的确认信号后,执行原子访存指令。第一CPU线程在执行原子访存指令的过程中,其它CPU线程均处于暂停状态,当前只有第一CPU线程可以访问内存,保证了本次内存访问的原子性。
在步骤104,向处于原执行地址暂停的CPU线程发送撤消等待信号。
具体地,当第一CPU线程执行原子访存指令结束后,则向处于原执行地址暂停的其它CPU线程发送撤消等待信号。
在步骤105,接收到所述撤消等待信号的CPU线程由原执行地址继续执行。
具体地,接收到来自第一CPU线程的撤消等待信号的其他CPU线程由原执行地址继续执行。
上述步骤执行结束后,内存单元中的数值与被模拟的实际系统中原子指令执行结束后的内存数值保持一致。本发明实施例保证在任一时刻虚拟机中只有一个CPU线程获取原子指令的访问权。如果在某一时刻有多个CPU线程执行对同一内存单元的原子访问指令,则上述步骤保证最先发出请求等待信号的CPU线程获取内存访问权。直到有某一个CPU线程执行访存结束,向其它CPU线程发出撤消等待信号之后,其他CPU线程才再次竞争内存访问权。各CPU线程的原子指令将以串行方式执行。
虚拟机提供了在CPU线程间发送消息的线程通讯机制,例如消息处理函数机制、socket通讯机制、消息队列机制、共享内存机制和windows的消息机制。
以下针对线程通讯机制中的消息处理函数机制和socket通讯机制进行描述。
在一个例子中,以在Linux操作系统平台上运行的X86虚拟机为例,说明以消息处理函数实现原子访存指令模拟的方法。
Linux操作系统提供了线程的基本调用原语,包括线程创建函数(pthread_create)、线程间发送消息函数(pthread_kill)等,满足本方法适用的前提条件。
假设虚拟机要模拟4核的X86CPU,则调用pthread_create创建4个独立的CPU线程(编号0~3),每个CPU线程用于模拟一个目标CPU。在每个CPU线程中,调用signal()函数注册三种不同信号(WAIT_REQ、WAIT_ACK、WAIT_END)的处理函数。Linux操作系统一般均提供32种以上的信号供程序使用,CPU线程可以选用任意3个空闲信号代表上述信号类型,例如使用SIGUSR1代表WAIT_REQ信号、SIGUSR2代表WAIT_ACK信号和SIGUSR3代表WAIT_END信号。
假设在某个目标CPU的执行过程中出现一条原子访存指令:
LOCK INC[Ox80000002]
其语义为:取出地址Ox80000002的数据,做加1操作,再存回原处。这一“读取-修改-写回”过程必须具有原子性,即在执行写回操作之前没有其它CPU修改该内存单元的原始值。
根据本发明实施例,各CPU线程调用pthread_kill函数以实现信号发送。在pthread_kill函数的参数中指定不同的信号,用以区分三种不同的信号类型。
对于发起WAIT_REQ信号的CPU线程,在执行内存访问动作时只需模拟目标指令的读、写语义,例如以C语言实现的INC指令的模拟语义:
int*p=Ox80000002;
*p++;
对于接收WAIT_REQ信号的CPU线程,Linux操作系统以中断方式暂停原来CPU线程的执行,自动转入消息处理函数。CPU线程在消息处理函数中执行暂停动作,直到退出消息处理函数之后,在Linux操作系统支持下自动跳回WAIT_REQ信号到来之前的中断位置,继续原来的执行线索。至此,基于消息处理函数机制的一次线程间通信方法执行结束。
在另一例子中,Windows/Linux操作系统中均支持SOCKET通讯机制,本发明实施例的线程间通信方法同样可以基于这种SOCKET通讯机制来实现。
同样假设虚拟机要模拟4核的X86CPU,则创建4个独立的CPU线程(编号0~3),每个CPU线程用于模拟一个目标CPU。虚拟机在两个CPU线程中使用网络报文来传递线程间的通讯内容,在通讯内容中以不同的数据类型代表三种不同信号(WAIT_REQ、WAIT_ACK、WAIT_END)。
各个CPU线程通过调用SOCKET函数以实现消息监听:调用socket()函数创建一个用于监听的SOCKET,再调用bind()函数绑定到某一个网络端口,最后调用listen()函数开始监听来自这一网络端口的全部数据请求。
各CPU线程通过调用SOCKET函数以实现消息发送:调用connect()函数向目标CPU线程已经监听的网络端口建立连接,调用send()函数向目标线程的网络端口发送数据通讯内容。在数据通讯内容中指定不同的标识,用以区分三种不同的信号(WAIT_REQ、WAIT_ACK、WAIT_END)类型。
目标CPU线程在接收到连接请求时,调用accpet()函数确认连接请求,再调用recv()函数接收数据通讯内容。至此,基于SOCKET通讯机制的一次线程间通信方法执行结束。
在本发明实施例中,以消息处理函数机制和socket通讯机制为例来说明本发明的线程间通讯方法,应当理解,依照本发明方法,可以采用其它任何形式的线程间通讯(例如Windows的消息,Unix/Linux的消息队列、共享内存等),其都具有同样的结构和方式,这对于本领域技术人员来说是可以胜任的。
图2是本发明实施例一种并行多核虚拟机的原子指令模拟方法示意图。如图2所示,CPU执行多个线程(CPU线程0、CPU线程1,......,CPU线程n),每个CPU线程模拟一个目标CPU上的指令执行任务。目标CPU的指令集中包含原子访存指令。
在图2中,1表示在一次原子访存模拟过程中,发起者CPU线程的执行步骤;2表示发起者CPU线程向其他CPU线程发送请求等待信号(WAIT_REO);3表示发起者CPU线程等待其他CPU线程返回确认信号(WAIT_ACK);4表示其他CPU线程返回的确认信号(WAIT_ACK);5表示返回确认信号(WAIT_ACK)的CPU线程处于原执行地址暂停;6表示发起者CPU线程执行原子访问动作;7表示发起者向其他CPU线程发送撤消等待信号(WAIT_END)。
以伪代码描述发起者CPU线程和其它CPU线程的执行行为如下:
通过上述实施例的描述,验证了本发明实施例具有适用于并行多核虚拟机的完善功能,以及高可移植性、高效率的明显优点,可行性好。
图3是本发明实施例一种虚拟机装置示意图。如图3所示,虚拟机装置包括线程创建模块21、线程调度模块22和执行模块23。
线程创建模块21用于根据目标CPU的内核个数,创建与CPU内核个数相等的多个CPU线程,所述多个CPU线程包括请求执行原子访存指令的第一CPU线程和其他CPU线程。
线程调度模块22用于调度由线程创建模块21创建的多个CPU线程,其中,第一CPU线程向其他CPU线程发送请求等待信号,接收到请求等待信号的其它CPU线程在原执行地址暂停,并向第一CPU线程返回确认信号,并向处于原执行地址暂停的CPU线程发送撤消等待信号。
线程调度模块22可以采用忙等待方式或阻塞等待方式使用接收到请求等待信号的其他CPU线程在原执行地址暂停。
线程调度模块22可以采用消息处理函数机制、socket通讯机制、消息队列机制、共享内存机制和windows的消息机制等来实现CPU线程间的通讯。有关CPU线程间的通讯机制在上文已介绍,在此不再赘述。
执行模块23用于当第一CPU线程接收到所有其他CPU线程的确认信号后执行原子访存指令。
最后应说明的是:以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
Claims (5)
1.一种并行多核虚拟机的原子指令模拟方法,所述虚拟机根据目标CPU的内核个数,创建与所述CPU内核个数相等的多个CPU线程,其特征在于,所述方法包括以下步骤:
所述多个CPU线程中的第一CPU线程向其他CPU线程发送请求等待信号;
接收到所述请求等待信号的其它CPU线程在原执行地址暂停,并返回确认信号;
所述第一CPU线程接收到所有其他CPU线程的确认信号后执行原子访存指令;
当所述第一CPU线程执行所述原子访存指令结束后,向处于原执行地址暂停的CPU线程发送撤消等待信号;
接收到所述撤消等待信号的CPU线程由原执行地址继续执行;
其中,虚拟机提供在CPU线程间发送消息的通讯机制,所述发送消息的通讯机制包括消息队列机制、共享内存机制、windows的消息机制和socket通讯机制中的一种。
2.根据权利要求1所述的一种并行多核虚拟机的原子指令模拟方法,其特征在于,所述接收到请求等待信号的CPU线程以忙等待方式或者以阻塞等待方式在原执行地址暂停。
3.根据权利要求1所述的一种并行多核虚拟机中基于线程同步的原子指令模拟方法,其特征在于,所述CPU线程在执行原子访存指令时,其它CPU线程处于暂停状态。
4.一种虚拟机装置,其特征在于,包括:
线程创建模块,用于根据目标CPU的内核个数,创建与所述CPU内核个数相等的多个CPU线程,所述多个CPU线程包括第一CPU线程和其他CPU线程;
线程调度模块,用于调度所述多个CPU线程,其中,所述第一CPU线程向其他CPU线程发送请求等待信号,接收到所述请求等待信号的其它CPU线程在原执行地址暂停,并返回确认信号,所述第一CPU线程在执行原子访存指令后,向处于原执行地址暂停的CPU线程发送撤消等待信号;
执行模块,用于当所述第一CPU线程接收到所有其他CPU线程的确认信号后执行原子访存指令;
其中,线程调度模块采用的通讯机制是消息队列机制、共享内存机制、windows的消息机制和socket通讯机制中的一种。
5.根据权利要求4所述的一种虚拟机装置,其特征在于,所述线程调度模块采用忙等待方式或者阻塞等待方式使接收到所述请求等待信号的CPU线程在原执行地址暂停。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210127348.8A CN102662730B (zh) | 2012-04-26 | 2012-04-26 | 并行多核虚拟机的原子指令模拟方法及虚拟机装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210127348.8A CN102662730B (zh) | 2012-04-26 | 2012-04-26 | 并行多核虚拟机的原子指令模拟方法及虚拟机装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102662730A CN102662730A (zh) | 2012-09-12 |
CN102662730B true CN102662730B (zh) | 2015-05-27 |
Family
ID=46772230
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210127348.8A Active CN102662730B (zh) | 2012-04-26 | 2012-04-26 | 并行多核虚拟机的原子指令模拟方法及虚拟机装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102662730B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113472557A (zh) * | 2020-03-31 | 2021-10-01 | 亚信科技(中国)有限公司 | 一种虚拟网元处理方法、装置及电子设备 |
CN114327815A (zh) * | 2021-12-10 | 2022-04-12 | 龙芯中科技术股份有限公司 | 原子性保持方法、处理器及电子设备 |
CN116070565B (zh) * | 2023-03-01 | 2023-06-13 | 摩尔线程智能科技(北京)有限责任公司 | 一种模拟多核处理器的方法及装置、电子设备和存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101183315A (zh) * | 2007-12-10 | 2008-05-21 | 华中科技大学 | 一种并行多处理器虚拟机系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8892821B2 (en) * | 2003-12-10 | 2014-11-18 | International Business Machines Corporation | Method and system for thread-based memory speculation in a memory subsystem of a data processing system |
-
2012
- 2012-04-26 CN CN201210127348.8A patent/CN102662730B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101183315A (zh) * | 2007-12-10 | 2008-05-21 | 华中科技大学 | 一种并行多处理器虚拟机系统 |
Non-Patent Citations (1)
Title |
---|
《一种基于令牌的新的互斥算法分析与设计》;李云鹤;《计算机科学》;20080430;第35卷(第04期);第119-121页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102662730A (zh) | 2012-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Gilge | IBM system blue gene solution blue gene/Q application development | |
US8572159B2 (en) | Managing device models in a virtual machine cluster environment | |
US7406699B2 (en) | Enhanced runtime hosting | |
CN100573456C (zh) | 一种并行多处理器虚拟机系统 | |
CN106462395B (zh) | 多线程处理器架构中的线程等待 | |
US20070150895A1 (en) | Methods and apparatus for multi-core processing with dedicated thread management | |
CN105074671B (zh) | 用于在内核模块和设备驱动程序中检测并发编程错误的方法和系统 | |
CN104750603B (zh) | 一种多核dsp软件仿真器及其物理层软件测试方法 | |
US9141173B2 (en) | Thread consolidation in processor cores | |
CN105893126A (zh) | 一种任务调度方法及装置 | |
CN102279766B (zh) | 并行模拟多个处理器的方法及系统、调度器 | |
CN104978261A (zh) | 应用程序的测试方法、装置及系统 | |
CN103744716A (zh) | 一种基于当前vcpu调度状态的动态中断均衡映射方法 | |
CN104094224A (zh) | 超虚拟化非对称gpu处理器 | |
CN102567090A (zh) | 在计算机处理器中创建执行线程的方法和系统 | |
CN111857669A (zh) | 软硬件解耦合软件化雷达系统、实时性设计方法和服务器 | |
CN102331961B (zh) | 并行模拟多个处理器的方法及系统、调度器 | |
CN102662730B (zh) | 并行多核虚拟机的原子指令模拟方法及虚拟机装置 | |
CN105957131B (zh) | 图形处理系统及其方法 | |
US11467946B1 (en) | Breakpoints in neural network accelerator | |
CN116724292A (zh) | 线程组的并行处理 | |
US9164813B2 (en) | Using a debug engine to identify threads that wait for a mutex | |
CN109739666A (zh) | 单例方法的跨进程调用方法、装置、设备及存储介质 | |
CN112559336B (zh) | 自适应调试异构计算芯片的方法、装置、系统及主板芯片 | |
CN108073389A (zh) | 一种基于脚本语言的引擎系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee after: Loongson Zhongke Technology Co.,Ltd. Address before: 100190 No. 10 South Road, Zhongguancun Academy of Sciences, Haidian District, Beijing Patentee before: LOONGSON TECHNOLOGY Corp.,Ltd. |
|
CP03 | Change of name, title or address |