专利名称:一种任务处理的方法和虚拟机的制作方法
技术领域:
本发明涉及计算机技术领域,特别涉及一种任务处理的方法和虚拟机。
背景技术:
在计算机技术领域中,虚拟技术是一种通过组合或分割现有的计算机资源,使得这些资源表现为一个或多个操作环境,从而提供优于原有资源配置的访问方式的技术。现有技术中通过软件的方式将多个X86系统聚合成一个虚拟的对称多处理机。使用一个虚拟机监视器或者虚拟机仿真器实现单个结点的物理资源的虚拟化,提供统一的运行环境。虚拟机对内存的管理是通过软件的方式实现的,将所有物理资源中的内存在逻辑上视为一个整体的内存,内存是按照虚拟页面划分的。当虚拟机在执行任务时,会随机选取等待队列中的任务,然后按照任务涉及的相关数据所需的内存空间,在逻辑内存中为任务按顺序的分配内存地址,是一种按需分配内存的机制。在实现本发明的过程中,发明人发现现有技术至少存在以下问题由于虚拟机系统是按照页面来划分是否存在数据冲突的,当两个不同的任务所涉及的数据被分配在同一个虚拟页面之后,两个任务同时访问该虚拟页面中的两个不同地址,虚拟机会认为两个任务访问的是同一个数据,因此会认为两个任务发生了数据共享冲突,会中端两个任务的执行过程,而事实上并未发生真正的共享冲突,即产生了假共享现象,影响任务的执行。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种任务处理的方法和虚拟机。所述技术方案如下第一方面,本发明实施例提供的一种任务处理的方法,包括当接收到虚拟指令层下发的创建任务的指令时,为所述任务选取一个用于执行所述任务的空闲资源,其中所述指令中至少包括所述任务运行时的起始地址,所述任务涉及的全局变量的地址信息和同步变量的地址信息;根据所述全局变量的地址信息获取与所述全局变量地址信息对应的全局变量状态息;根据全局变量状态信息为全局变量创建本地全局变量快照;根据所述本地全局变量快照在选取的所述空闲资源中预先分配的私有内存空间中执行所述任务;当所述任务执行完毕后,获取所述全局变量对应的新的全局变量快照,根据所述本地全局变量快照以及所述新的全局变量快照获取已更新的全局变量;判断同步任务等待队列中的待执行任务的同步变量是否包括了现在已更新的全局变量,如果有,把这个任务放入执行任务等待队列;其中所述同步任务等待队列中的任务是等待同步变量触发的任务所在的队列,当同步任务等待队列中的任务的同步变量触发后,将任务放入所述执行任务等待队列中排队等待调度;所述执行任务等待队列中的任务是等待调度执行的任务所在的队列。在第一方面的第一种可能的实现方式中,所述判断同步任务等待队列中的待执行任务的同步变量是否包括了现在已更新的全局变量,如果有,把这个任务放入执行任务等待队列,包括在执行任务等待队列中选取一个第一特定任务由第一空闲资源来运行,其中,所述第一特定任务涉及的全局变量的地址信息与当前执行的所有任务所涉及的全局变量的地址信息不冲突;或,在执行任务等待队列中选取一个第二特定任务由第二空闲资源来运行,其中,所述第二特定任务涉及的全局变量的地址信息与第二空闲资源已执行完毕的任务所涉及的全局变量的地址信息尽可能多的相同或相近,以增加数据亲和性。在第一方面的第二种可能的实现方式中,所述全局变量状态信息包括所述全局变量的内存地址,创建时间以及版本标记,所述根据全局变量状态信息为全局变量创建全局变量快照包括根据所述全局变量状态信息,将所述全局变量状态信息进行复制,生成所述全局变量的全局变量快照;相应的,所述根据所述本地全局变量快照以及所述新的全局变量快照获取已更新的全局变量包括判断所述本地全局变量快照中的版本标记与所述新的全局变量快照的版本标记是否相同,如果相同则表示所述全局变量未被其他任务更新;如果不相同则表示所述全局变量已被其他任务更新。根据第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述根据所述本地全局变量快照以及所述新的全局变量快照获取已更新的全局变量之后,所述方法还包括当全局变量未被其他任务更新时,在执行所述任务的资源中的公用内存空间中保存所述本地全局变量快照,并更新全局变量的内存地址为执行所述任务的资源中的公用内存空间中保存所述全局变量快照的内存地址,将所述本地全局变量快照更新为所述本地全局变量快照。结合第一方面或第一方面的第一种可能的实现方式或第二种可能的实现方式中任一项的实现方式,在第四种可能的实现方式中,所述根据所述全局变量快照在选取的所述空闲资源中预先分配的私有内存空间中执行所述任务之后,所述方法还包括执行所述任务发生缺页错误时,则查询所述全局变量快照的内存地址实际的状态;当所述任务对应的全局变量快照的内存地址在其他资源的公用内存空间中,将所述全局变量快照的内存地址对应的实际内容拷贝到本地;当所述任务对应的全局变量快照的内存地址在本地的公用内存空间中,则在本地的公用内存空间中进行获取。第二方面,本发明实施例提供的一种任务处理的虚拟机,包括调度器节点,分布式共享内存管理节点,任务执行容器节点;所述调度器节点包括
选取模块,用于当接收到虚拟指令层下发的创建任务的指令时,为所述任务选取一个用于执行所述任务的空闲资源,其中所述指令中至少包括所述任务运行时的起始地址,所述任务涉及的全局变量的地址信息和同步变量的地址信息;第一获取模块,用于当所述任务执行完毕后,获取所述全局变量对应的新的全局变量快照,根据所述本地全局变量快照以及所述新的全局变量快照获取已更新的全局变量;判断模块,用于判断同步任务等待队列中的待执行任务的同步变量是否包括了现在已更新的全局变量,如果有,把这个任务放入执行任务等待队列;其中所述同步任务等待队列中的任务是等待同步变量触发的任务所在的队列,当同步任务等待队列中的任务的同步变量触发后,将任务放入所述执行任务等待队列中排队等待调度;所述执行任务等待队列中的任务是等待调度执行的任务所在的队列;所述分布式共享内存管理节点包括第二获取模块,用于根据所述全局变量的地址信息获取与所述全局变量地址信息对应的全局变量状态信息;创建模块,用于根据全局变量状态信息为全局变量创建本地全局变量快照;所述任务执行容器节点包括执行模块,用于根据所述本地全局变量快照在选取的所述空闲资源中预先分配的私有内存空间中执行所述任务。在第二方面的第一种可能的实现方式中,所述判断模块,包括第一处理单元,用于在执行任务等待队列中选取一个第一特定任务由第一空闲资源来运行,其中,所述第一特定任务涉及的全局变量与当前执行的所有任务所涉及的全局变量不冲突;第二处理单元,用于在执行任务等待队列中选取一个第二特定任务由第二空闲资源来运行,其中,所述第二特定任务涉及的全局变量与第二空闲资源已执行完毕的任务所涉及的全局变量尽可能多的相同或相近,以增加数据亲和性。在第二方面的第二种可能的实现方式中,所述全局变量状态信息包括所述全局变量的内存地址,创建时间以及版本标记,所述创建模块包括根据所述全局变量状态信息,将所述全局变量状态信息进行复制,生成所述全局变量的全局变量快照;相应的,所述第一获取模块具体用于判断所述本地全局变量快照中的版本标记与所述新的全局变量快照的版本标记是否相同,如果相同则表示所述全局变量未被其他任务更新;如果不相同则表示所述全局变量已被其他任务更新。根据第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述调度器节点还包括更新模块,用于当全局变量未被其他任务更新时,在执行所述任务的资源中的公用内存空间中保存所述本地全局变量快照,并更新全局变量的内存地址为执行所述任务的资源中的公用内存空间中保存所述全局变量快照的内存地址,将所述本地全局变量快照更新为所述本地全局变量快照。
结合第二方面或第二方面的第一种可能的实现方式或第二种可能的实现方式中任一项的实现方式,在第四种可能的实现方式中,所述任务执行容器节点还包括查询模块,用于执行所述任务发生缺页错误时,则查询所述全局变量快照的内存地址实际的状态;拷贝模块,用于当所述任务对应的全局变量快照的内存地址在其他资源的公用内存空间中,将所述全局变量快照的内存地址对应的实际内容拷贝到本地;第三获取模块,用于当所述任务对应的全局变量快照的内存地址在本地的公用内存空间中,则在本地的公用内存空间中进行获取。本发明实施例提供的技术方案带来的有益效果是通过虚拟机在调度及执行任务时对各任务涉及的全局变量的感知,以及在调度任务时对任务涉及的全局变量合理的分配内存,尽可能使各任务之间所涉及的全局变量的内存地址不冲突,减少虚拟机系统为维护内存一致性所产生的开销,提高虚拟机系统的可扩展性。
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例一提供的任务处理的方法流程图;图2是本发明实施例一提供的任务处理的方法中虚拟机的整体架构的结构示意图;图3是本发明实施例一提供的任务处理的方法中虚拟机各节点的结构示意图;图4是本发明实施例二提供的任务处理的方法流程图;图5是本发明实施例三提供的任务处理的虚拟机结构示意图;图6为本发明实施例四提供的计算机设备的结构示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。实施例一本发明实施例提供了一种任务处理的方法,参见图1。需要说明的是,本发明基于应用层抽象虚拟化技术(指令集架构)在中间件级实现机群系统的单一系统映像,提出了一种任务层次的虚拟指令集,并基于该指令集建立一个单一的系统镜像。采用基于页面的分布式共享内存模型,并通过对任务的感知,建立一种松弛的事物内存一致性模型,通过对任务所需的内存分布进行合理优化,减少系统为维护内存一致性所产生的开销,提高系统的可扩展性。本发明实施例所进行处理任务的虚拟机的整体架构如图2所示,具体为数据中心虚拟机(DVM)包括数据中心虚拟机指令集架构(DISA)、数据中心虚拟机虚拟运行环境,数据中心虚拟机底层运行环境和上层应用。数据中心虚拟机指令集架构(DISA)即虚拟指令层,用于数据中心虚拟机架构(DVMArchitecture),可用于计算和控制数据中心虚拟机。它是数据中心虚拟机DVM提供给程序员以及编译器开发人员的编程接口。数据中心虚拟机底层运行环境,包括大规模计算结点的硬件平台、指令集和操作系统内核。数据中心虚拟机(DVM)系统各节点包括分布式共享内存管理节点(DSM),调度器节点,任务执行容器节点,如图3所示,具体为分布式共享内存管理(DSM home)节点,用于支持以基于任务的快照机制实现的部分事务内存来实现内存一致性的维护,为上层应用提供统一的逻辑地址空间。其中,快照是记录某个时间点以页面表示的内存使用状态,可以保证数据的事务隔离的一种数据结构,是共享变量在某一时间点的一份拷贝。事务内存是保证各任务对内存的写操作具有事务特性,是借鉴数据库中事物的思想,把对共享变量的读写封装到一个事物中,事务的执行过程中,当前任务所读的数据不会被其他线程写,写的数据则不会被其他线程读,在事务结束时,对共享变量的修改才为其他事务所见。为了支持对共享变量的并发读写以及降低数据副本一致性开销,本发明采用快照来实现对共享变量的并发读写,并采用延迟更新的方法降低一致性开销。分布式共享内存管理节点具体实现包括全局页元信息(页面的实际存储位置信息等)和拷贝信息的维护和管理;内存地址与页面的转化;本地页面信息的管理,页表信息更新、缺页处理;页面信息在结点间的复制和传输。创建内存快照、删除内存快照、内存修改提交等与快照相关的管理工作。调度器节点,用于完成任务的管理和数据、任务的同步。任务管理包括任务的调度、任务的初始化、任务的执行、任务执行结果处理。数据、任务同步包括使用本地的分布式共享内存模块完成内存数据的同步和任务的同步。该节点包括任务管理模块和内存模块。其中,内存模块的功能为内存地址与页面信息的转化,把任务管理模块的创建快照的请求,转发给分布式共享内存管理节点。任务准备执行时,通知对应的任务执行容器节点的内存模块更新相关的内存页表项。其中任务管理模块的功能主要是负责任务的管理以及数据和任务的同步。调度器节点具体的功能包括①任务调度通过一定的调度策略选择特定的任务在相应的任务执行容器上执行。②任务的执行准备通过调用本地的内存模块对任务涉及区域的内存空间创建快照。③任务派发。④对任务执行结果处理如处理提交的内存修改;为新建的任务建立快照。⑤通过内存模块透明地完成全局数据和任务的同步,维护内存的一致性。任务执行容器节点,用于完成任务的执行、执行结果的反馈、创建新任务的反馈等功能。该类节点包括任务执行模块和内存模块。任务执行模块的功能包括启动本地的内存模块,接收调度器派发的任务,为任务建立本地运行的上下文,执行任务。向调度器反馈执行结果,例如提交可能需要的内存修改;或者建立新任务。内存模块功能为本地页表信息的管理,包括页表信息更新、缺页处理。上层应用,用于数据中心虚拟机指令集架构编写的指令序列。方法流程包括101 :当接收到虚拟指令层下发的创建任务的指令时,为所述任务选取一个用于执行所述任务的空闲资源,其中所述指令中至少包括所述任务运行时的起始地址,所述任务涉及的全局变量的地址信息和同步变量的地址信息;102:根据所述全局变量的地址信息获取与所述全局变量地址信息对应的全局变量状态信息;103 :根据全局变量状态信息为全局变量创建本地全局变量快照;104:根据所述本地全局变量快照在选取的所述空闲资源中预先分配的私有内存空间中执行所述任务;105:当所述任务执行完毕后,获取所述全局变量对应的新的全局变量快照,根据所述本地全局变量快照以及所述新的全局变量快照获取已更新的全局变量;106:判断同步任务等待队列中的待执行任务的同步变量是否包括了现在已更新的全局变量,如果有,把这个任务放入执行任务等待队列;其中所述同步任务等待队列中的任务是等待同步变量触发的任务所在的队列,当同步任务等待队列中的任务的同步变量触发后,将任务放入所述执行任务等待队列中排队等待调度;所述执行任务等待队列中的任务是等待调度执行的任务所在的队列。本发明实施例通过虚拟机在调度及执行任务时对各任务涉及的全局变量的感知,以及在调度任务时对任务涉及的全局变量合理的分配内存,尽可能使得各任务之间涉及的全局变量的内存地址不冲突,减少虚拟机系统为维护内存一致性所产生的开销,提高虚拟机系统的可扩展性。实施例二本发明实施例提供了一种任务处理的方法,参见图4,需要说明的是,本发明实施例是通过调度器节点、分布式共享内存管理节点、任务执行容器节点具体执行对任务处理的整个过程。方法流程包括所述虚拟机包括调度器节点,分布式共享内存管理节点以及任务执行容器节点。401 :当接收到虚拟指令层下发的创建任务的指令时,为所述任务选取一个用于执行所述任务的空闲资源,其中所述指令中至少包括所述任务运行时的起始地址,所述任务涉及的全局变量的地址信息和同步变量的地址信息。具体的,当接收到虚拟指令层下发的创建任务的指令时,调度器节点在空闲的任务执行容器节点中选择一个空闲的任务执行容器节点,可以是整个任务执行容器节点处于空闲状态,也可以是任务执行容器节点中的私有内存空间中存在空闲内存,用于执行调度器节点分配的任务。并将任务分配给任务执行容器节点。指令中携带任务的相关信息,至少包括任务执行的起始地址,任务涉及的全局变量的地址信息和同步变量的地址信息,其中同步变量也是全局变量的一种,用于标识该任务是否需要和其他任务进行同步,当需要与其他任务同步时,则调度器节点将该任务放入同步任务等待队列中等待其他任务的完成对全局变量进行更新完毕,其中所述同步任务等待队列中的任务是等待同步变量触发的任务所在的队列,当同步任务等待队列中的任务的同步变量触发后,将任务放入所述执行任务等待队列中排队等待调度;所述执行任务等待队列中的任务是等待调度执行的任务所在的队列。调度器节点的任务管理模块是整个数据中心虚拟机系统的入口点,初始化后建立与各任务执行容器节点的任务执行模块之间的连接,从系统的第一个任务开始,通过一定的调度策略选择当前处于空闲状态的任务执行容器节点后,并将任务分配给选择的任务执行容器节点。任务执行容器节点在启动时,任务执行容器节点的任务执行模块首先初始化该节点的私有内存区域,然后开启两类服务器端,一类的功能是等待与调度器节点建立连接 ’另一类的功能是等待与其它任务执行容器节点建立连接。完成本地内存模块的初始化,将共享的内存区域设置为不可访问,当发生不同访问时,会引发不同的缺页错误,而激活本地的内存模块。402:根据所述全局变量的地址信息获取与所述全局变量地址信息对应的全局变量状态信息。其中全局变量状态信息包括所述全局变量的内存地址,创建时间以及版本标记。403 :所述根据全局变量状态信息为全局变量创建全局变量快照。创建快照的具体方式为根据所述全局变量状态信息,将所述全局变量状态信息进行复制,生成所述全局变量的全局变量快照。
具体实施方式
为调度器节点初始化所述任务涉及的运行数据,并调度分布式共享内存管理节点为所述任务涉及的全局变量创建快照。调度器节点的任务管理模块调用本地内存模块实现任务涉及的运行数据的内存地址到页面信息的转化,并通过本地内存模块发送数据包给分布式共享内存管理节点,完成任务涉及的全局变量快照的创建,其中任务所涉及的运行数据的为任务涉及的堆、栈中的初始数据,所访问的全局变量的内存地址,运行指令的起始地址等信息。通过本地内存模块将任务涉及的全局变量的内存地址对应的页面信息发送至所述分布式共享内存管理节点。 分布式共享内存管理节点为任务涉及的全局变量创建快照,并保存任务涉及的全局变量的内存地址所在页面对应的原始的页表信息。分布式共享内存管理节点创建全局变量快照后,调度器节点的任务管理模块再调用本地内存模块将快照以数据包的形式发送给之前已经选择好的任务执行容器节点的内存模块,任务执行容器节点的内存模块根据快照更新本地的页表信息。页表信息更新完毕后,调度器节点的任务管理模块通过已建立的连接将任务涉及的运行数据以消息形式发送给对应的任务执行容器节点的任务执行模块,并一直监听连接上的消息,至此完成一个任务的分发。404:根据所述本地全局变量快照在选取的所述空闲资源中预先分配的私有内存空间中执行所述任务。当接收到调度器节点通知执行所述任务的消息时,任务执行容器节点执行任务。在每一个任务执行容器节点中,都包含预先分配的私有内存空间和公用内存空间,其中私有内存空间是对外不可见的,为任务执行容器节点的本地内存模块,用于在任务执行容器节点被分配任务后执行任务以及任务执行容器节点自身需要执行的任务和程序;公用内存空间用于虚拟机系统整体根据需要进行调用。405:执行所述任务发生缺页错误时,则查询所述全局变量快照的内存地址实际的状态。任务执行容器节点的任务执行模块接收到消息后会执行任务。在执行任务过程中,当调用任务所涉及到的全局变量快照时,由于该全局变量快照仅保存了全局变量的地址信息,即内存地址,因此会导致调用全局变量时发现该全局变量可能不在本地任务执行容器节点的内存地址,由此会触发不同的页面错误。具体操作过程为任务执行容器节点向分布式共享内存管理节点发送查询信息,并接收分布式共享内存管理节点的反馈信息。406 :当所述任务对应的全局变量快照的内存地址在其他资源的公用内存空间中,将所述全局变量快照的内存地址对应的实际内容拷贝到本地。执行任务过程中发生缺页错误时,本地的内存模块通过向分布式共享内存管理节点发送消息,查询该全局变量快照对应的页面信息实际所在的位置,若页面信息在别的容器内,本地的内存模块通过任务执行容器节点之间的连接将页面信息实际内容拷贝到本地。具体操作过程为当反馈信息中所述任务对应的全局变量快照的页面信息在其他任务执行容器节点时,则本地的任务执行容器节点通过任务执行容器节点之间的连接将全局变量快照对应的页面信息对应的实际内容拷贝到本地。407 :当所述任务对应的全局变量快照的内存地址在本地的公用内存空间中,则在本地的公用内存空间中进行获取。具体操作过程为当反馈信息中任务对应的全局变量快照的页面信息在本地的任务执行容器节点时,则在本地的任务执行容器节点的公用内存空间的缓存中进行获取。408:当所述任务执行完毕后,获取所述全局变量对应的新的全局变量快照,根据所述本地全局变量快照以及所述新的全局变量快照获取已更新的全局变量。调度器节点通过获取任务执行完毕后的本地全局变量快照,以及该本地全局变量快照对应的全局变量在分布式共享内存管理节点中保存的新的全局变量快照,其中新的全局变量快照也是该全局变量对应的副本,由于可能存在其他任务执行对该全局变量进行了更新的情况,因此新的全局变量快照与本地的全局变量快照有可能不相同,这个对比是通过各个全局变量快照中的版本标记来进行比对后得到的,如果版本标记相同,那么说明没有其他任务对该全局变量进行修改,因此可以对该全局变量进行更新;如果版本标记不相同,那么说明其他任务已经在该任务修改本地全局变量快照前对全局变量进行了更新,因此此时的全局变量无法更新为本地的全局变量快照,因此在更新全局变量前需要通过新的全局变量快照和本地全局变量快照对比,查询一下是否可以进行更新。因此步骤408可以具体为判断所述本地全局变量快照中的版本标记与所述新的全局变量快照的版本标记是否相同,如果相同则表示所述全局变量未被其他任务更新;如果不相同则表示所述全局变量已被其他任务更新。进一步的,任务执行完毕后根据执行结果可以发送不同的消息,调度器节点会根据消息的类型对执行完的任务以及其所涉及的全局变量快照进行更新全局变量的操作或抛弃处理。调度器节点的任务管理模块接收到任务执行容器节点的任务执行模块返回的消息后,根据不同的消息内容做不同的处理。消息具体形式有如下几种正常退出;作废退出;创建子任务。
当消息类型为正常退出的任务时当所述任务执行完毕且发送正常退出的消息时,判断所述全局变量快照在所述任务执行后是否被修改。具体操作过程为当任务执行完毕,调度器节点接收所述任务执行容器节点发送的正常退出的消息。若所述全局变量快照被修改,判断所述全局变量快照中的全局变量的状态信息与该全局变量的当前状态信息是否相同,如果相同则在执行所述任务的资源中的公用内存空间中保存所述全局变量快照,并更新全局变量的内存地址为执行所述任务的资源中的公用内存空间中保存所述全局变量快照的内存地址;如果不相同则执行作废退出所述任务的步骤。若任务对应的全局变量快照被修改,首先判断此时该全局变量快照对应的原始全局变量是否已经被更新过,通过全局变量快照中的状态信息与原始全局变量的状态信息进行对比,如果相同则代表未更新,此时可以进行更新操作;如果不相同则代表已经有其他任务对该全局变量进行了更新,此时不可进行更新操作,需要对执行后的任务进行作废处理,重新进入等待队列,等待重新执行。保证了被更新的全局变量不会被其他同时并行执行的任务再一次进行更新,降低了全局变量并发读写时维护数据一致性的系统开销。对于可以更新的全局变量,调度器节点调度分布式共享内存管理节点更新原始全局变量的页面信息,并接收分布式共享内存管理节点更新后的全局变量的页面信息。具体操作过程为调度器节点向任务执行容器节点发送提交消息,提交消息使得任务执行容器节点将被修改全局变量快照在任务执行容器节点中进行保存,并通知任务执行容器节点上报被修改全局变量快照页面对应的页面信息。调度器节点接收任务执行容器节点发送的被修改的全局变量快照的页面信息,将任务执行容器的标识写入页面信息中,并将页面信息以及全局变量快照发送至分布式共享内存管理节点。分布式共享内存管理节点根据接收到的页面信息以及全局变量快照,删除建立全局变量快照。分布式共享内存管理节点判断当前是否只有一个任务执行容器节点对全局变量快照进行了修改。若只有一个任务执行容器节点执行的任务对所述任务对应的全局变量快照进行了修改,则分布式共享内存管理节点将被修改的全局变量快照所在页面信息替换原始全局变量的页面信息,并向调度器节点发送提交成功的消息,提交成功的消息中携带被修改的全局变量的页面信息。若所述全局变量快照未被修改,则删除所述全局变量快照。具体操作过程为若所述任务对应的全局变量快照未被修改,则所述调度器节点调度所述分布式共享内存管理节点删除所述任务对应的全局变量快照,并调度执行任务等待队列中等待的任务。当消息类型为创建子任务时当所述任务执行完毕且发送创建子任务的消息时,判断所述子任务的同步变量地址信息是否为空,其中所述创建子任务的消息中至少包括所述子任务的起始地址,所述子任务的全局变量的地址信息;当所述子任务需要和其他任务进行同步时,所述创建子任务的消息中还包括同步变量的地址信息。当所述任务执行完毕,所述调度器节点接收所述任务执行容器节点发送的创建子任务的消息。如果不为空,则所述子任务的同步变量观察区中添加所述子任务的同步变量的地址信息,并将所述子任务放入全局同步任务等待队列,等待其他任务对所述子任务涉及的同步变量更新完毕后进入执行所述子任务的流程。具体操作过程为调度器节点在同步变量观察区中添加所述子任务所涉及到的全局变量的内存地址范围,并将子任务放入全局同步任务等待队列,等待其他子任务对全局变量更新完毕。若同步变量观察区为空,则代表其他子任务对全局变量更新完毕,此时调度器节点将子任务放入全局任务等待队列,排队等待执行任务。当轮到执行该子任务时,调度器节点为子任务分配任务执行容器节点,以及创建快照等步骤。如果为空,则为所述子任务选择一个空闲资源,将所述子任务的全局变量的地址信息中的全局变量的状态信息和全局变量的内存地址进行复制,为所述子任务创建全局变量快照,并将所述子任务的全局变量快照与所述任务的全局变量快照合并,并在选取的所述空闲资源中执行所述子任务。本步骤的具体操作过程如其父任务执行过程相同,在此不再赘述。当消息类型为作废退出时当所述任务执行完毕且发送作废退出的消息时,删除所述全局变量快照。具体操作过程为调度器节点调度分布式共享内存管理节点删除任务对应的全局变量快照。409:判断同步任务等待队列中的待执行任务的同步变量是否包括了现在已更新的全局变量,如果有,把这个任务放入执行任务等待队列。其中所述同步任务等待队列中的任务是等待同步变量触发的任务所在的队列,当同步任务等待队列中的任务的同步变量触发后,将任务放入所述执行任务等待队列中排队等待调度;所述执行任务等待队列中的任务是等待调度执行的任务所在的队列。当任务执行完毕,此时无论该任务执行后是否为正常退出或者是作废退出,虚拟机系统在选取下一个执行的任务时,需要考虑到当前正在执行的所有任务以及执行完毕的任务涉及的全局变量的内存地址,根据这两类任务涉及的全局变量来确定调度哪一个在任务等待队列中等待的任务进入执行流程。执行本过程的为虚拟机系统中的调度器节点。根据当前执行的所有任务所涉及的全局变量的内存地址,执行完毕的任务涉及的全局变量的内存地址,存在两种调度机制。因此步骤409可以具体为4091 :在执行任务等待队列中选取一个第一特定任务由第一空闲资源来运行,其中,所述第一特定任务涉及的全局变量的地址信息与当前执行的所有任务所涉及的全局变量的地址信息不冲突。此种情况为优先选取当前正在执行任务所访问全局变量不冲突的任务执行。4092 :在执行任务等待队列中选取一个第二特定任务由第二空闲资源来运行,其中,所述第二特定任务涉及的全局变量的地址信息与第二空闲资源已执行完毕的任务所涉及的全局变量的地址信息尽可能多的相同或相近,以增加数据亲和性。
此种情况为采取数据就近的原则,其中地址信息的相近,具体为全局变量所在的内存地址相近,例如某全局变量的内存地址为0x0010,则可以认为0x0011,0x0012,或者OxOOOf等内存地址为“相近的”内存地址。在任务等待队列中选择的任务与之前结束的任务所涉及的全局变量的内存地址尽可能的相同或相近,其目的是为了增加数据亲和性,一方面可以增加Cache的命中率,另一方面当选择的任务与之前结束的任务所涉及的全局变量相同,那么在执行任务时则可以根据全局变量快照直接从当前的任务执行容器节点中获取该全局变量。本发明实施例通过虚拟机在调度及执行任务时对各任务涉及的全局变量的感知,以及在调度任务时对任务涉及的全局变量合理的分配内存,尽可能使得各任务之间涉及的全局变量的内存地址不冲突,减少虚拟机系统为维护内存一致性所产生的开销,提高虚拟机系统的可扩展性。实施例三本发明实施例提供了一种任务处理的虚拟机,参见图5,所述虚拟机包括调度器节点501,分布式共享内存管理节点502,任务执行容器节点503 ;所述调度器节点501包括选取模块5011,用于当接收到虚拟指令层下发的创建任务的指令时,为所述任务选取一个用于执行所述任务的空闲资源,其中所述指令中至少包括所述任务运行时的起始地址,所述任务涉及的全局变量的地址信息和同步变量的地址信息;第一获取模块5012,用于当所述任务执行完毕后,获取所述全局变量对应的新的全局变量快照,根据所述本地全局变量快照以及所述新的全局变量快照获取已更新的全局变量;判断模块5013,用于判断同步任务等待队列中的待执行任务的同步变量是否包括了现在已更新的全局变量,如果有,把这个任务放入执行任务等待队列;其中所述同步任务等待队列中的任务是等待同步变量触发的任务所在的队列,当同步任务等待队列中的任务的同步变量触发后,将任务放入所述执行任务等待队列中排队等待调度;所述执行任务等待队列中的任务是等待调度执行的任务所在的队列;所述分布式共享内存管理节点502包括第二获取模块5021,用于根据所述全局变量的地址信息获取与所述全局变量地址信息对应的全局变量状态信息;创建模块5022,用于根据全局变量状态信息为全局变量创建本地全局变量快照;所述任务执行容器节点503包括执行模块5031,用于根据所述本地全局变量快照在选取的所述空闲资源中预先分配的私有内存空间中执行所述任务。其中在具体实施方式
中,所述判断模块5013,包括第一处理单元50131,用于在执行任务等待队列中选取一个第一特定任务由第一空闲资源来运行,其中,所述第一特定任务涉及的全局变量与当前执行的所有任务所涉及的全局变量不冲突;第二处理单元50132,用于在执行任务等待队列中选取一个第二特定任务由第二空闲资源来运行,其中,所述第二特定任务涉及的全局变量与第二空闲资源已执行完毕的任务所涉及的全局变量尽可能多的相同或相近,以增加数据亲和性。其中,所述全局变量状态信息包括所述全局变量的内存地址,创建时间以及版本标记,所述创建模块5022包括根据所述全局变量状态信息,将所述全局变量状态信息进行复制,生成所述全局变量的全局变量快照;相应的,所述第一获取模块5012具体用于判断所述本地全局变量快照中的版本标记与所述新的全局变量快照的版本标记是否相同,如果相同则表示所述全局变量未被其他任务更新;如果不相同则表示所述全局变量已被其他任务更新。其中,所述调度器节点501还包括更新模块5014,用于当全局变量未被其他任务更新时,在执行所述任务的资源中的公用内存空间中保存所述本地全局变量快照,并更新全局变量的内存地址为执行所述任务的资源中的公用内存空间中保存所述全局变量快照的内存地址,将所述本地全局变量快照更新为所述本地全局变量快照。其中,所述任务执行容器节点503还包括查询模块5032,用于执行所述任务发生缺页错误时,则查询所述全局变量快照的内存地址实际的状态;拷贝模块5033,用于当所述任务对应的全局变量快照的内存地址在其他资源的公用内存空间中,将所述全局变量快照的内存地址对应的实际内容拷贝到本地;第三获取模块5034,用于当所述任务对应的全局变量快照的内存地址在本地的公用内存空间中,则在本地的公用内存空间中进行获取。本发明实施例通过虚拟机在调度及执行任务时对各任务涉及的全局变量的感知,以及在调度任务时对任务涉及的全局变量合理的分配内存,尽可能使得各任务之间涉及的全局变量的内存地址不冲突,减少虚拟机系统为维护内存一致性所产生的开销,提高虚拟机系统的可扩展性。实施例四参见图6,本实施例还提供了 一种计算机设备60,包括处理器61,存储器62,存储器中存储有代码,处理器用于读取代码,并执行上述各实施例中的方法;其中,本实施例中,处理器执行方法时,各个涉及的软件上的功能单元(或者在代码层面,可认为是几个不同功能的代码段)可以认为是实施例三中的各个模块,其具体执行的方法可参见上述各实施例,这里不再赘述。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种任务处理的方法,其特征在于,所述方法包括 当接收到虚拟指令层下发的创建任务的指令时,为所述任务选取一个用于执行所述任务的空闲资源,其中所述指令中至少包括所述任务运行时的起始地址,所述任务涉及的全局变量的地址信息和同步变量的地址信息; 根据所述全局变量的地址信息获取与所述全局变量地址信息对应的全局变量状态信息; 根据全局变量状态信息为全局变量创建本地全局变量快照; 根据所述本地全局变量快照在选取的所述空闲资源中预先分配的私有内存空间中执行所述任务; 当所述任务执行完毕后,获取所述全局变量对应的新的全局变量快照,根据所述本地全局变量快照以及所述新的全局变量快照获取已更新的全局变量; 判断同步任务等待队列中的待执行任务的同步变量是否包括了现在已更新的全局变量,如果有,把这个任务放入执行任务等待队列; 其中所述同步任务等待队列中的任务是等待同步变量触发的任务所在的队列,当同步任务等待队列中的任务的同步变量触发后,将任务放入所述执行任务等待队列中排队等待调度;所述执行任务等待队列中的任务是等待调度执行的任务所在的队列。
2.根据权利要求1所述的方法,其特征在于,所述判断同步任务等待队列中的待执行任务的同步变量是否包括了现在已更新的全局变量,如果有,把这个任务放入执行任务等待队列,包括 在执行任务等待队列中选取一个第一特定任务由第一空闲资源来运行,其中,所述第一特定任务涉及的全局变量的地址信息与当前执行的所有任务所涉及的全局变量的地址信息不冲突;或, 在执行任务等待队列中选取一个第二特定任务由第二空闲资源来运行,其中,所述第二特定任务涉及的全局变量的地址信息与第二空闲资源已执行完毕的任务所涉及的全局变量的地址信息尽可能多的相同或相近,以增加数据亲和性。
3.根据权利要求1所述的方法,其特征在于,所述全局变量状态信息包括所述全局变量的内存地址,创建时间以及版本标记,所述根据全局变量状态信息为全局变量创建全局变量快照包括根据所述全局变量状态信息,将所述全局变量状态信息进行复制,生成所述全局变量的全局变量快照; 相应的,所述根据所述本地全局变量快照以及所述新的全局变量快照获取已更新的全局变量包括 判断所述本地全局变量快照中的版本标记与所述新的全局变量快照的版本标记是否相同,如果相同则表示所述全局变量未被其他任务更新;如果不相同则表示所述全局变量已被其他任务更新。
4.根据权利要求3所述的方法,其特征在于,所述根据所述本地全局变量快照以及所述新的全局变量快照获取已更新的全局变量之后,所述方法还包括 当全局变量未被其他任务更新时,在执行所述任务的资源中的公用内存空间中保存所述本地全局变量快照,并更新全局变量的内存地址为执行所述任务的资源中的公用内存空间中保存所述全局变量快照的内存地址,将所述本地全局变量快照更新为所述本地全局变量快照。
5.根据权利要求1-3任一项所述的方法,其特征在于,所述根据所述全局变量快照在选取的所述空闲资源中预先分配的私有内存空间中执行所述任务之后,所述方法还包括 执行所述任务发生缺页错误时,则查询所述全局变量快照的内存地址实际的状态;当所述任务对应的全局变量快照的内存地址在其他资源的公用内存空间中,将所述全局变量快照的内存地址对应的实际内容拷贝到本地; 当所述任务对应的全局变量快照的内存地址在本地的公用内存空间中,则在本地的公用内存空间中进行获取。
6.一种任务处理的虚拟机,其特征在于,所述虚拟机包括 调度器节点,分布式共享内存管理节点,任务执行容器节点; 所述调度器节点包括 选取模块,用于当接收到虚拟指令层下发的创建任务的指令时,为所述任务选取一个用于执行所述任务的空闲资源,其中所述指令中至少包括所述任务运行时的起始地址,所述任务涉及的全局变量的地址信息和同步变量的地址信息; 第一获取模块,用于当所述任务执行完毕后,获取所述全局变量对应的新的全局变量快照,根据所述本地全局变量快照以及所述新的全局变量快照获取已更新的全局变量; 判断模块,用于判断同步任务等待队列中的待执行任务的同步变量是否包括了现在已更新的全局变量,如果有,把这个任务放入执行任务等待队列; 其中所述同步任务等待队列中的任务是等待同步变量触发的任务所在的队列,当同步任务等待队列中的任务的同步变量触发后,将任务放入所述执行任务等待队列中排队等待调度;所述执行任务等待队列中的任务是等待调度执行的任务所在的队列; 所述分布式共享内存管理节点包括 第二获取模块,用于根据所述全局变量的地址信息获取与所述全局变量地址信息对应的全局变量状态信息; 创建模块,用于根据全局变量状态信息为全局变量创建本地全局变量快照; 所述任务执行容器节点包括 执行模块,用于根据所述本地全局变量快照在选取的所述空闲资源中预先分配的私有内存空间中执行所述任务。
7.根据权利要求6所述的虚拟机,其特征在于,所述判断模块,包括 第一处理单元,用于在执行任务等待队列中选取一个第一特定任务由第一空闲资源来运行,其中,所述第一特定任务涉及的全局变量与当前执行的所有任务所涉及的全局变量不冲突; 第二处理单元,用于在执行任务等待队列中选取一个第二特定任务由第二空闲资源来运行,其中,所述第二特定任务涉及的全局变量与第二空闲资源已执行完毕的任务所涉及的全局变量尽可能多的相同或相近,以增加数据亲和性。
8.根据权利要求6所述的虚拟机,其特征在于,所述全局变量状态信息包括所述全局变量的内存地址,创建时间以及版本标记, 所述创建模块包括根据所述全局变量状态信息,将所述全局变量状态信息进行复制,生成所述全局变量的全局变量快照;相应的,所述第一获取模块具体用于 判断所述本地全局变量快照中的版本标记与所述新的全局变量快照的版本标记是否相同,如果相同则表示所述全局变量未被其他任务更新;如果不相同则表示所述全局变量已被其他任务更新。
9.根据权利要求8所述的虚拟机,其特征在于,所述调度器节点还包括 更新模块,用于当全局变量未被其他任务更新时,在执行所述任务的资源中的公用内存空间中保存所述本地全局变量快照,并更新全局变量的内存地址为执行所述任务的资源中的公用内存空间中保存所述全局变量快照的内存地址,将所述本地全局变量快照更新为所述本地全局变量快照。
10.根据权利要求6-8任一项所述的虚拟机,其特征在于,所述任务执行容器节点还包括 查询模块,用于执行所述任务发生缺页错误时,则查询所述全局变量快照的内存地址实际的状态; 拷贝模块,用于当所述任务对应的全局变量快照的内存地址在其他资源的公用内存空间中,将所述全局变量快照的内存地址对应的实际内容拷贝到本地; 第三获取模块,用于当所述任务对应的全局变量快照的内存地址在本地的公用内存空间中,则在本地的公用内存空间中进行获取。
全文摘要
本发明公开了一种任务处理的方法和虚拟机,属于计算机技术领域。所述方法包括为任务在选取一个空闲资源;为全局变量创建全局变量快照;在选取的空闲资源中的私有内存空间中执行任务;当任务执行完毕后,获取全局变量对应的新的全局变量快照,根据本地全局变量快照以及新的全局变量快照获取已更新的全局变量;判断同步任务等待队列中的待执行任务的同步变量是否包括了现在已更新的全局变量,如果有,把这个任务放入执行任务等待队列。本发明通过虚拟机执行任务时对任务涉及的全局变量的感知,以及在调度任务时对任务涉及的全局变量合理的分配内存,使各任务之间涉及的全局变量的内存地址不冲突,减少虚拟机系统为维护内存一致性所产生的开销。
文档编号G06F9/50GK103049334SQ201210543870
公开日2013年4月17日 申请日期2012年12月14日 优先权日2012年12月14日
发明者顾磷, 马志强, 盛中华, 文刘飞 申请人:华为技术有限公司