CN109117416A - 插槽间的数据迁移或交换的方法和装置以及多处理器系统 - Google Patents
插槽间的数据迁移或交换的方法和装置以及多处理器系统 Download PDFInfo
- Publication number
- CN109117416A CN109117416A CN201811134279.7A CN201811134279A CN109117416A CN 109117416 A CN109117416 A CN 109117416A CN 201811134279 A CN201811134279 A CN 201811134279A CN 109117416 A CN109117416 A CN 109117416A
- Authority
- CN
- China
- Prior art keywords
- slot
- source
- destination
- data
- translation layer
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/17—Interprocessor communication using an input/output type connection, e.g. channel, I/O port
Abstract
本公开提供了一种插槽间的数据迁移或交换的方法和装置以及多处理器系统。其中,插槽间的数据迁移方法包括锁住对源插槽的一个或多个源缓存行地址中的数据的读写操作,并对源缓存行地址进行刷新,使得源缓存行地址中的脏数据被写回至源插槽的源内存中;在将源插槽的源内存中的数据迁移到目的地插槽中的目的地内存之后,在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层,所述目的地地址翻译层和源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
Description
技术领域
本公开涉及一种NUMA系统中的数据迁移和交换方法和装置、以及对应的多处理器系统。
背景技术
考虑到芯片成品率、功耗等因素,单个大芯片已经不符合当下芯片设计需求。多路处理器因其相对成品率高、功耗和成本相对较低等因素,成为未来多处理器发展趋势。由多路处理器构成的多处理器系统也叫做多插槽系统(multi-socket system)。例如,多插槽系统可以具有两个插槽,每个插槽中有4个处理器核P(Processor)。在多处理器系统中,因为内存控制器(MC,Memory Controller)也是分布式连接在处理器周围,每个处理器访问不同内存时的延迟不同,因此这样的访问方式又称为非一致性内存访问(NUMA,Non-UniformMemory Access)方式。
为了方便用户使用NUMA系统,通常需要由硬件维护缓存一致性,即成为缓存一致性的非一致性内存访问(ccNUMA,Cache Coherent Non-Uniform Memory Access)系统。
在当前系统中,维护缓存一致性的方式主要有两种,即目录方式和侦听方式。相比于侦听方式,目录方式减少了系统中为了维护一致性而带来的数据流量,在处理器核较多的系统应用的更为广泛。而侦听方式相比于目录方式设计更为简单,更适合于处理器核数目相对较少的系统。
发明内容
技术方案
根据本公开的一个实施例,提供了一种插槽间的数据迁移方法,其包括:锁住对源插槽的一个或多个源缓存行地址中的数据的读写操作;对源缓存行地址进行刷新,使得源缓存行地址中的脏数据被写回至源插槽的源内存中;将源插槽的源内存中的数据迁移到目的地插槽中的目的地内存;在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层,所述目的地地址翻译层和源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
可选地,根据本公开的一个实施例的插槽间的数据迁移方法,其中,在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层还包括:目的地插槽代理在目的地插槽代理处设置目的地地址翻译层,所述目的地地址翻译层将目的地插槽中的一个或多个目的地插槽家节点发送的、访问源缓存行地址的请求转换成访问目的地插槽内的目的地缓存行地址的请求。
可选地,根据本公开的一个实施例的插槽间的数据迁移方法,其中,在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层还包括:源插槽家节点在源插槽家节点处设置源地址翻译层,所述源地址翻译层将源插槽中的一个或多个源插槽家节点发送的、访问源缓存行地址的请求转换成访问目的地插槽内目的地缓存行地址的请求。
可选地,根据本公开的一个实施例的插槽间的数据迁移方法,其中,所述方法还包括:由目的地插槽代理发起数据迁移过程,源插槽代理配合目的地插槽代理进行数据迁移过程。
可选地,根据本公开的一个实施例的插槽间的数据迁移方法,其中,锁住对源插槽的一个或多个源缓存行地址中的数据的读写操作,还包括:目的地插槽代理停止转发目的地插槽的处理器对源插槽的源缓存行地址中的数据进行读写的请求,并将向发出读写请求的处理器发送重传请求。
可选地,根据本公开的一个实施例的插槽间的数据迁移方法,其中,锁住对源插槽的一个或多个源缓存行地址中的数据的读写操作,还包括:目的地插槽代理经由插槽链向源插槽代理发送停止读写源缓存行地址中的数据的命令;源插槽代理向源插槽家节点转发指示停止读写源缓存行地址中的数据的命令,以使得源插槽的处理器停止对源缓存行地址中的数据的读写。
可选地,根据本公开的一个实施例的插槽间的数据迁移方法,其中,对源缓存行地址进行刷新,还包括:源插槽代理向源插槽家节点发送指示刷新源缓存行地址的命令,所述源插槽家节点并对源缓存行地址进行刷新;其中,所述刷新使得源缓存行地址的有效位失效,同时将源缓存行地址中的脏数据写回源插槽的源内存中;源插槽家节点在完成对源缓存行地址刷新之后,经由插槽链,通过源插槽代理向目的地插槽代理发送完成刷新操作响应。
可选地,根据本公开的一个实施例的插槽间的数据迁移方法,所述方法还包括:预留目的地内存以接收源缓内存的数据;其中,目的地插槽代理向目的地插槽的家节点发送预留目的地内存的命令,目的地插槽的家节点预留目的地内存以接收源插槽的源内存中的数据;目的地插槽的家节点在完成预留操作后,向目的地插槽代理发送完成预留操作的响应。
可选地,根据本公开的一个实施例的插槽间的数据迁移方法,所述方法还包括:目的地插槽代理基于完成刷新操作响应和预留操作的响应确定是否进行数据迁移;响应于确定进行数据迁移,源插槽家节点将源插槽的源内存中的数据从源插槽的源内存、通过源插槽代理、经由插槽链发送到目的地插槽代理,再经由目的地插槽代理将该数据发送到目的地插槽内存所预留的位置处。
可选地,根据本公开的一个实施例的插槽间的数据迁移方法,所述方法还包括:在目的地插槽代理完成目的地地址翻译层的设置之后,经由插槽链并通过源插槽代理向源插槽家节点发送已完成目的地地址翻译层的建立的消息、以及指示源插槽家节点设置源地址翻译层的命令。
可选地,根据本公开的一个实施例的插槽间的数据迁移方法,所述方法还包括:源插槽家节点接收指示设置源地址翻译层的命令,并进行源地址翻译层的设置;在源插槽家节点完成源地址翻译层的设置之后,源插槽家节点使能源缓存行地址的有效位,并放开对源缓存行地址的读写操作。
可选地,根据本公开的一个实施例的插槽间的数据迁移方法,所述方法还包括:在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层之后,目的地插槽中的第一目的地家节点发出对源缓存行地址的读写请求;目的地插槽代理将对源缓存行地址的读写请求翻译为对于目的地缓存行地址的请求,并向管理目的地缓存行地址的第二目的地家节点转发读写请求;第二目的地家节点在接收到读写请求后,经由目的地插槽代理将数据返回至第一目的地家节点。
根据本公开的另一实施例,提供了一种插槽间的交换数据的方法,其包括:分别锁住对源插槽的一个或多个源缓存行地址中的数据和对目的地插槽的一个或多个目的地缓存行地址中的数据的读写操作;分别对一个或多个源缓存行地址和一个或多个目的地缓存行地址进行刷新,使得所述一个或多个源缓存行地址和一个或多个目的地缓存行地址中的脏数据分别被写回至源插槽的源内存以及目的地插槽的目的地内存中;将源插槽的源内存中的数据与目的地插槽中的目的地内存中的数据交换;在目的地插槽代理处和源插槽家节点处分别设置第一目的地地址翻译层和第一源地址翻译层,其中,第一目的地地址翻译层和第一源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
可选地,根据本公开的另一实施例的插槽间的交换数据的方法,其中,在目的地插槽代理处和源插槽家节点处分别设置第一目的地地址翻译层和第一源地址翻译层还包括:目的地插槽代理在目的地插槽代理处设置第一目的地地址翻译层,第一目的地地址翻译层将目的地插槽中的一个或多个目的地插槽家节点发送的、访问源缓存行地址的请求转换成访问目的地插槽内的目的地缓存行的请求。
可选地,根据本公开的另一实施例的插槽间的交换数据的方法,其中,在目的地插槽代理处和源插槽家节点处分别设置第一目的地地址翻译层和第一源地址翻译层还包括:源插槽家节点在源插槽家节点处设置第一源地址翻译层,第一源地址翻译层将源插槽中的一个或多个源插槽家节点发送的、访问源缓存行地址的请求转换成访问目的地插槽内目的地缓存行的请求。
可选地,根据本公开的另一实施例的插槽间的交换数据的方法,其中,所述方法还包括:在源插槽代理处和目的地插槽家节点处分别设置第二源地址翻译层和第二目的地地址翻译层,其中,第二源地址翻译层和第二目的地地址翻译层将访问目的地缓存行地址的请求转换成访问源缓存行的请求。
可选地,根据本公开的另一实施例的插槽间的交换数据的方法,其中,在源插槽代理处和目的地插槽家节点处分别设置第二源地址翻译层和第二目的地地址翻译层还包括:源插槽代理在源插槽代理处设置第二源地址翻译层,第二源地址翻译层将源插槽中的一个或多个源插槽家节点发送的、访问目的地缓存行地址的请求转换成访问源插槽内的源缓存行的请求。
可选地,根据本公开的另一实施例的插槽间的交换数据的方法,其中,在源插槽代理处和目的地插槽家节点处分别设置第二源地址翻译层和第二目的地地址翻译层还包括:目的地插槽家节点在目的地插槽家节点处设置第二目的地地址翻译层,所述第二目的地地址翻译层将目的地插槽中的一个或多个目的地插槽家节点发送的、访问目的地缓存行地址的请求转换成访问源插槽内的源缓存行的请求。
可选地,根据本公开的另一实施例的插槽间的交换数据的方法,其中,所述方法还包括:由目的地插槽代理发起数据交换过程,源插槽代理配合目的地插槽代理进行数据交换过程,其中,目的地插槽代理通知源插槽代理将开始数据交换以及要进行数据交换的源缓存行地址的范围。
可选地,根据本公开的另一实施例的插槽间的交换数据的方法,其中,分别锁住对源插槽的一个或多个源缓存行地址中的数据和对目的地插槽的一个或多个目的地缓存行地址中的数据的读写操作还包括:目的地插槽代理锁住目的地插槽和源插槽中的一个或多个处理器对所述一个或多个源缓存行地址中的数据读写操作;其中,目的地插槽代理停止转发目的地插槽的处理器对所述一个或多个源缓存行地址中的数据进行读写的请求,并停止转发源插槽的一个或多个处理器对所述一个或多个目的地缓存行地址中的数据进行读写的请求,同时,目的地插槽代理向发出读写请求的处理器发送重传请求。
可选地,根据本公开的另一实施例的插槽间的交换数据的方法,其中,分别锁住对源插槽的一个或多个源缓存行地址中的数据和对目的地插槽的一个或多个目的地缓存行地址中的数据的读写操作还包括:目的地插槽的家节点锁住目的地插槽的一个或多个处理器对所述一个或多个目的地缓存行地址中的数据的读写操作;其中,目的地插槽的家节点向发出读写请求的处理器发送重传请求;源插槽家节点锁住源插槽的一个或多个处理器对所述一个或多个源缓存行地址中的数据的读写操作;其中,源插槽家节点向发出读写请求的处理器发送重传请求。
可选地,根据本公开的另一实施例的插槽间的交换数据的方法,其中,分别对一个或多个源缓存行地址和一个或多个目的地缓存行地址进行刷新,还包括:将一个或多个源缓存行地址和一个或多个目的地缓存行地址的有效位失效;同时将所述一个或多个源缓存行地址中的脏数据写回源插槽的源内存中,并将所述一个或多个目的地缓存行地址中的脏数据写回目的地插槽的内存中。
可选地,根据本公开的另一实施例的插槽间的交换数据方法,还包括:源插槽家节点将源插槽的源内存中的数据从源插槽的源内存通过源插槽代理经由插槽链发送到目的地插槽代理;经由目的地插槽代理将该数据发送到目的地插槽内存相应位置处。
可选地,根据本公开的另一实施例的插槽间的交换数据方法,还包括:在源插槽家节点完成源地址翻译层的设置之后;分别将所述一个或多个源缓存行地址和所述一个或多个目的地缓存行地址解锁;其中,将一个或多个源缓存行地址和所述一个或多个目的地缓存行地址的有效位使能,并放开对所述一个或多个源缓存行地址和所述一个或多个目的地缓存行地址中的数据的读写权限。
根据本公开的又一实施例,提供了一种多处理器系统,包括:目的地插槽,该目的地插槽包括:目的地插槽代理,被配置为发起数据迁移过程,并在数据迁移过程完成之后,设置目的地地址翻译层;目的地插槽家节点,被配置为控制与目的地缓存行地址相对应的目的地内存接收并存储要迁移的数据。该多处理器系统还包括源插槽,该源插槽包括:源插槽代理,被配置为配合目的地插槽代理进行数据迁移过程;源插槽家节点,被配置为控制与源缓存行地址相对应的源插槽内存发送要迁移的数据,并在数据迁移过程完成之后,设置源地址翻译层;其中,所述目的地地址翻译层和源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
根据本公开的再一实施例,提供了一种多处理器系统,包括:目的地插槽,包括:目的地插槽代理,被配置为发起数据交换过程,并在数据交换过程完成之后,设置第一目的地地址翻译层;目的地插槽家节点,被配置为控制与目的地缓存行地址相对应的目的地内存发送要交换的目的插槽交换数据,接收并存储要交换的源插槽交换数据。该多处理器系统还包括源插槽,该源插槽,包括:源插槽代理,被配置为配合目的地插槽代理进行数据交换过程;源插槽家节点,被配置为控制与源缓存行地址相对应的源插槽内存中发送要交换的源插槽交换数据,接收并存储要交换的目的地插槽交换数据,并在数据交换过程完成之后,设置第一源地址翻译层;其中,第一目的地地址翻译层和第一源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
根据本公开的再一实施例,提供了一种处理插槽之间的数据迁移的装置,该装置包括:锁定装置,其被配置为锁住对源插槽的一个或多个源缓存行地址中的数据的读写操作;刷新装置,其被配置为对源缓存行地址进行刷新,使得源缓存行地址中的脏数据被写回至源插槽的源内存中;迁移装置,其被配置为将源插槽的源内存中的数据迁移到目的地插槽中的目的地内存;地址翻译层设置装置,其被配置为在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层,所述目的地地址翻译层和源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
根据本公开的再一实施例,提供了一种处理插槽之间的数据交换的装置,该装置包括:锁定装置,其被配置为分别锁住对源插槽的一个或多个源缓存行地址中的数据和对目的地插槽的一个或多个目的地缓存行地址中的数据的读写操作;刷新装置,其被配置为分别对一个或多个源缓存行地址和一个或多个目的地缓存行地址进行刷新,使得所述一个或多个源缓存行地址和一个或多个目的地缓存行地址中的脏数据分别被写回至源插槽的源内存以及目的地插槽的目的地内存中;交换装置,其被配置为将源插槽的源内存中的数据与目的地插槽中的目的地内存中的数据交换;地址翻译层设置装置,其被配置为在目的地插槽代理处和源插槽家节点处分别设置第一目的地地址翻译层和第一源地址翻译层,其中,所述第一目的地地址翻译层和第一源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
有益效果
根据本公开的至少一个实施例,本公开提供了一种插槽之间的数据迁移或交换方法,其至少可以实现:
(1)在插槽之间动态迁移家节点。将跨插槽的请求变为插槽内部的请求,从而减少跨插槽的带宽占用,降低跨插槽访问的延迟。
(2)迁移目录的同时,对目录所对应的内存按需进行迁移,也即是只针对可缓存的地址进行迁移。
(3)搬移过程中动态修改映射,而不需要进行页表的重映射,也不需要等待页表项中该页被引用的计数为0,避免了TLB刷新,简化了数据迁移和交换的过程,提高了迁移的成功率。
(4)该迁移以缓存行为粒度,每个缓存行搬移完成即可放开其访问权限,使得在迁移过程中仍然能够访问其他还未迁移的地址,提高了其他地址的使用效率,大大减少了进程等待的时间。
(5)可以通过硬件自动完成,相比于软件而言,完成速度更快。
附图说明
图1是现有技术中的多插槽(multi-socket)系统的示意图。
图2是示出在现有技术中的NUMA系统正常访问远程数据的过程的示意图。
图3是现有技术中将远程数据通过软件迁移的方式拷贝到本地的过程的示意图。
图4是根据本公开的第一实施例的数据迁移方法的流程图。
图5A和图5B是根据本公开的第二实施例的数据迁移方法的流程图。
图6是根据本公开的在插槽之间执行第二实施例的数据迁移方法的示意图。
图7是根据本公开第一实施例和第二实施例的经过本申请迁移过程后访问远程数据的示意图。
图8是根据本公开的第三实施例的数据交换方法的流程图。
图9A和图9B是根据本公开的第四实施例的数据交换方法的流程图。
图10A是根据本公开的第四实施例的数据交换方法的示意图。
图10B是根据本公开的第四实施例的数据交换方法的家节点的目录变化示意图。
图11是根据本公开的第五实施例的多处理器系统的结构图。
图12是根据本公开的第六实施例的多处理器系统的结构图。
图13是根据本公开的第七实施例的处理插槽之间的数据迁移的装置的示意图。
图14是根据本公开的第八实施例的处理插槽之间的数据迁移的装置的示意图。
具体实施方式
以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
另外,为了更好的说明本发明,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有这些具体细节,本发明同样可以实施。在另外一些实例中,对于大家熟知的方法、手段、元件和电路未作详细描述,以便于凸显本发明的主旨。
虽然本公开以目录方式描述,但同样适用于侦听方式的ccNUMA系统。
图1是现有技术中的多插槽系统的示意图。
如图1所示,图1中的NUMA系统中具有两个插槽(socket)A和B,假设系统中物理内存地址有6T空间,其中插槽A管理并存储第0-3T的物理地址及相关数据,插槽B管理并存储第4-7T的物理地址及相关数据。
插槽(socket)A和B内部的物理地址PA(Physical AddreS)通常以交织(interleave)的方式散落在各个插槽内及插槽之间。为了优化系统性能,现有技术的NUMA系统中,管理内存和缓存一致性的目录通常也是分布式地散落在系统中。
更具体地,在插槽内部,通常将内部物理地址平均分配在插槽内部的各个家节点的内存中(家节点是NUMA系统中的一种节点,通常包括内存、处理器和目录)。而在插槽之间,则静态地分配不同地址范围的物理地址,比如对于插槽A分配0-3T范围的物理地址,而对于插槽B分配4-7T范围的物理地址。
由于插槽内部和插槽之间通常以缓存行(cacheline)为粒度通过交织方式分配了物理地址,所以访问和读写请求可以以固定的规律被均匀分到各个内存控制器MC或者家节点中。通过这样的方式,可以均衡对每个家节点的访问量,从而充分利用了每个处理器的处理能力。
然而,因为NUMA系统中这样均衡的物理地址分配方式,使得插槽A中的节点可能频繁地访问远程数据(插槽B中的数据),给系统带来了较大的开销。
以下将进一步描述在现有技术中插槽A中的节点是如何访问远程数据的。
图2是示出在现有技术中的NUMA系统正常访问远程数据的过程的示意图。
如图2所示,假设插槽A中的家节点N2希望访问插槽B中的数据,则需要经过如下步骤:
S201:由于家节点N2的处理器P2并不知道插槽B中的物理地址是如何分布的,家节点N2的处理器P2只能随机向插槽B中的一个家节点(假设该节点是管理处理器P3的家节点N3)发出读写请求。
S202:家节点N3通过查询目录,发现该数据并未存储在自己管理的物理地址中。此时,家节点N3向插槽B中的各个家节点发出轮询,请求各个家节点插槽查找该地址。假设家节点N4在其所管理的目录中找到了该物理地址,便向家节点N3返回其所有者id。家节点N3在接收到该信息后向家节点N2返回家节点N4的所有者id(owner id)。
S203:家节点N2利用处理器P2向家节点N4发出读写数据的请求。
S204:家节点N4在接收到读写请求之后,将自己缓存中的数据返回给处理器P2。
S205:如果家节点N4中的缓存数据有所改变,家节点N4还需要将缓存中的数据写回内存中。
S206:家节点N4将该缓存地址对应的数据返回给家节点N3中的目录,以便于下次查找时,家节点N3可以直接找到该地址的数据从而获取数据。
可以看到家节点N2访问远程数据可能导致4次跨插槽的访问。
插槽链(socket-link)是非常宝贵的系统资源,频繁访问远程数据会导致系统性能下降。
在本次访问之后,由于原始数据仍然仅存在于插槽B中,下一次插槽A想要访问这样的数据还需要再经历上述过程。为此,现有技术中的NUMA系统中会有远程缓存(RemoteCache)加速远程内存访问,用来缓存远程插槽的数据(也即是将插槽A所获取的数据保存在插槽A的缓存中)。
再次参考图1,图1中的插槽代理A和B即远程缓存。在有远程缓存的情况下,如果读取共享(ReadShare)类的命令命中缓存中的数据,就不需要通过插槽链访问插槽B的目录。
但是由于远程缓存的容量有限,如果发生远程缓存未命中(RemoteCache miss),则不可避免地要访问插槽B的目录。而某些特定访问远程内存的命令,诸如写入(Write)和ReadUnique则必须经过远程目录。所以就算在远程缓存中命中了数据,也只能避免一部分插槽之间的业务(traffic)。
在多路ccNUMA系统中,如果本地插槽因某些情况(内存不够等)需要使用远程插槽内存的情况下,请求必须跨插槽传输,同时数据也跨插槽传输。跨插槽的请求的延迟会比插槽内部大,且带宽有限。频繁进行跨插槽访问会降低系统吞吐率,增加功耗等。
为了进一步提高性能,在有必要的情况下,现有操作系统使用NUMA内存迁移方式把远程数据迁移到本地使用。通常,需要迁移的情况包括:
(1)进程新建(malloc)/进程切换等时,新分配的其他插槽内存是空闲内存,为提高插槽的利用率,在分配的同时进行家节点迁移。
(2)OS或硬件自行决定或触发数据迁移。
(3)迁移开销小于OS进程切换的开销。
现有技术中的数据迁移的方式是通过软件迁移的方式将数据从远程拷贝到本地。这种迁移方式需要进行内存重映射,进而导致TLB刷新(Translation Lookaside Buffershootdown,TLB shootdown),降低系统性能。TLB刷新是指,如果某个页表被多个CPU共享,当该页表要进行迁移时或者对该页表的地址映射进行修改时,则需要通知使用该页表的CPU刷新他们的TLB,并且此时不能访问该页表。
以下进一步描述现有技术中的数据迁移方法。
图3是现有技术中将远程数据通过软件迁移的方式拷贝到本地的过程的示意图。
软件在分配NUMA内存时,通常采用诸如将内容默认分配就在线程所在的处理器(core)上、优先分配本地、或者在所有内存控制器上平均分配等方式。因此,在利用软件迁移数据时,为了在软件分布式共享内存中利用软件将家节点进行迁移,需要通过运行在多个节点上的一个操作系统对于某个页面的家节点进行动态修改。这个过程仅是对家节点进行迁移,而不是对数据进行迁移,由此其粒度只能是软件页面(最少4K),并需要操作系统进行操作。此外,该迁移操作还需要将同一个页面主页面分为动态和静态,并基于动态和静态的节点进行迁移操作。
如图3所示,现有技术中,通过软件方式进行NUMA页面迁移来解决远程访问的问题,其过程如下。
S301:将被迁移的页面从内核最近最少使用(Least Recent Used,LRU)列表(活动和非活动的)中移除。由于已经决定迁移该页面,也不需要对被迁移的页面进行交换(swap)或者重新使用(reclaim),并且即使页面迁移失败也不会再次把页面加入LRU,所以该移除操作是安全的。
S302:将所有指向被迁移页面的页表项替换为特殊页表项。此时,如果有进程再次访问该页表项,会将使该进程进入睡眠模式,直到迁移完成。本次迁移完成后该进程可以被唤醒,或者在一定时间后继续尝试访问该页表项。
S303:确认页面对应的页表项中该页被引用的计数是否为0。由于无法阻止其他内核线程使用该页面,也无法发现是哪个内核线程仍然引用该页面,因此,在引用计数不为0的情况下,取消迁移,在一定时间后继续尝试。
S304:在页面引用计数为0的情况下,进行迁移操作。具体的迁移操作包括:对迁移目的地页面设置新的引用、移除页表中特殊页表项、唤醒睡眠进程。
由于迁移之后目的地的插槽和源插槽中的各个节点的目录并未随之更新,因此,当需要访问远程数据时,本地的处理器仍然需要经历跨插槽发出请求从而获取新的地址的过程,因此地址重映射带来的开销不可避免。
通过上述描述,可以知道利用软件进行数据的迁移方法仍然无法避免地址重映射及带来的TLB刷新开销。
综上所述,现有技术中的通过软件方式进行数据迁移至少需要数据拷贝、修改页表、完成TLB刷新等步骤,给系统造成了过多的开销。如果被迁移的数据不被频繁访问,会造成迁移开销大于所得性能提升收益的问题。
因此,需要一种更方便的数据迁移方法。
现根据本公开的附图来描述本公开的一个或多个实施例。
图4是根据本公开的第一实施例的数据迁移方法的流程图。
如图4所示,根据本公开第一实施例的数据迁移方法如下。
S401:锁住对源插槽的一个或多个源缓存行地址中的数据的读写操作;
S402:对源缓存行地址进行刷新,使得源缓存行地址中的脏数据被写回至源插槽的源内存中;
S403:将源插槽的源内存中的数据迁移到目的地插槽中的目的地内存;
S404:在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层,所述目的地地址翻译层和源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
通过上述过程可知,本次迁移以缓存行(cacheline)大小的内存块为粒度,操作过程中仅锁住了部分缓存行。在迁移过程中,粒度越小,则对于系统性能的影响就越小。同时,对于还没迁移完成的缓存行,则可以继续使用原来的目录和内存地址进行操作,从而进一步地减少了请求等待的时间。
可选地,在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层还可以包括:目的地插槽代理在目的地插槽代理处设置目的地地址翻译层,所述目的地地址翻译层将目的地插槽中的一个或多个目的地插槽家节点发送的、访问源缓存行地址的请求转换成访问目的地插槽内的目的地缓存行地址的请求。
由此,通过设置目的地地址翻译层,当目的插槽中的节点希望访问原来存储在源插槽的节点中的数据时,可以通过目的地地址翻译层获知该数据已经被迁移到了目的插槽的内存中,从而快速的获取了数据,而不需跨插槽访问。
可选地,在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层还可包括:源插槽家节点在源插槽家节点处设置源地址翻译层,所述源地址翻译层将源插槽中的一个或多个源插槽家节点发送的、访问源缓存行地址的请求转换成访问目的地插槽内目的地缓存行地址的请求。
而通过设置源地址翻译层,当源插槽中的节点希望原来存储在源插槽的节点中的数据时,可以通过源地址翻译层获知该数据已经被迁移到了目的插槽的内存中,从而在源插槽之内就能获得该数据所在的正确地址,而不需通过跨插槽的轮询来获知该数据所在的地址。
图5A和图5B是根据本公开的第二实施例的数据迁移方法的流程图。图6是根据本公开的在插槽之间执行第二实施例的数据迁移方法的示意图。现参考图5A、图5B和图6描述本公开的第二实施例。
如图5A和图5B所示,根据本公开第二实施例的数据迁移的方法至少包括图4中所示的S401-S404,具体地,该迁移方法可以包括如下的步骤S401至S404。
S401:锁住对源插槽的一个或多个源缓存行地址中的数据的读写操作;
S402:对源缓存行地址进行刷新,使得源缓存行地址中的脏数据被写回至源插槽的源内存中;
S501:预留目的地内存以接收源缓内存的数据,并目的地插槽的家节点在完成预留操作后,向目的地插槽代理发送完成预留操作的响应;
S403:将源插槽的源内存中的数据迁移到目的地插槽中的目的地内存;
S404:在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层,所述目的地地址翻译层和源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
以下进一步描述每个步骤的示例性实施方式。
可选地,如图5A所示,根据本公开第二实施例的数据迁移的方法还可包括:由目的地插槽代理发起数据迁移过程,源插槽代理配合目的地插槽代理进行数据迁移过程。
如图6所示,假设需要将源插槽中的一定地址范围内的数据迁移到目的地插槽中。并假设与源插槽中的地址0x50000000000相对应的内存地址属于待迁移的地址范围,而目的地插槽中的地址0x20000000000则是地址0x50000000000中的数据即将迁入的地址。
参考图6中的S601,假设家节点N2通知目的地插槽SA需要进行迁移,并告知目的地插槽代理需要迁移的地址范围。目的地插槽代理SA收到迁移命令和待迁移的数据的地址范围后,开始整个数据迁移的过程。因为发起者属于目的地插槽,所以目的地插槽代理SA将要完成整个操作。
由此,单一的插槽代理就能够启动整个数据迁移过程,而不需通过软件系统通过软件指令的发送解析等步骤才能进行迁移过程的发起。
可选地,如图5A所示,根据本公开第二实施例的数据迁移的方法中的S401还可包括:S401a:目的地插槽代理停止转发目的地插槽的处理器对源插槽的源缓存行地址中的数据进行读写的请求,并将向发出读写请求的处理器发送重传请求;S401b:目的地插槽代理经由插槽链向源插槽代理发送停止读写源缓存行地址中的数据的命令;S401c:源插槽代理向源插槽家节点转发指示停止读写源缓存行地址中的数据的命令,以使得源插槽的处理器停止对源缓存行地址中的数据的读写。
参考图6,目的地插槽代理SA首先锁住目的地插槽中的各个节点对于地址0x50000000000的请求。作为示例,该锁定操作为:目的地插槽代理SA将向发出读写请求的节点发送重传请求,以告知这些节点稍后再重新尝试访问地址0x50000000000。此时,假设家节点N1希望调用地址0x50000000000中的数据,当家节点N1向目的地插槽代理SA发送读写请求时,目的地插槽代理SA将不再向源插槽代理转发家节点N1的读写请求,而是直接向家节点N1返回重传请求,告知家节点N1稍后再重新尝试访问。
在迁移操作之前,还需要锁住源插槽中的各个节点对于地址0x50000000000的请求。如图6所示,参见S2a:目的地插槽代理SA经由插槽链向源插槽代理SB发送向发送停止对地址0x50000000000读写操作并对该缓存行进行刷新的命令,源插槽中向管理该地址的家节点N4转发该命令(假设是由源插槽的家节点N4(处理器P4所在的节点)维护地址中的数据)。家节点N4在接收到停止该缓存行地址读写操作并对该缓存行进行刷新的命令之后,向对其发送读写请求的源插槽中的节点发送重传请求,以告知这些节点稍后再重新尝试访问地址0x50000000000。
由于在执行数据迁移之前,锁住了对源插槽内的一个或多个缓存行的读写操作,从而保证了在迁移过程中没有进程对该缓存行进行写入或修改操作,保证了缓存行中的数据的正确性。
可选地,如图5A所示,根据本公开第二实施例的数据迁移的方法中的S402,还可包括:S402a:源插槽代理向源插槽家节点发送指示刷新源缓存行地址的命令,所述源插槽家节点并对源缓存行地址进行刷新。其中,所述刷新使得源缓存行地址的有效位失效,同时将源缓存行地址中的脏数据写回源插槽的源内存中;S402b:源插槽家节点在完成对源缓存行地址刷新之后,经由插槽链,通过源插槽代理向目的地插槽代理发送完成刷新操作响应。
参见图6,家节点N4在接收到了停止读写命令的同时,还接收到了对地址0x50000000000进行刷新操作命令(S602a)。家节点执行刷新操作,该操作包括使该地址的有效位失效,并将该地址中脏数据写回该缓存行地址对应的内存中。参见S602b,家节点N4在完成对地址0x50000000000处缓存行的刷新后,向目的地插槽代理SA返回完成刷新操作的响应。
通过将缓存行中的脏数据刷新回与该缓存行相对应的内存地址中,从而保证缓存行中的数据与内存中的数据的一致性,进一步地保证了迁移的数据的正确性。
可选地,如图5A所示,根据本公开第二实施例的数据迁移的方法中的S501,还可包括:S501a:预留目的地内存以接收源缓内存的数据。其中,目的地插槽代理向目的地插槽的家节点发送预留目的地内存的命令,目的地插槽的家节点预留目的地内存以接收源插槽的源内存中的数据;S501b:目的地插槽的家节点在完成预留操作后,向目的地插槽代理发送完成预留操作的响应。
预留操作确保了在目的地插槽中有足够的空间来存储要被迁移的数据,进一步地提高了迁移操作的成功率。
可选地,所预留目的地内存的数据空间可以大于存储源缓内存中的数据的数据空间。
可选地,所预留目的地内存的数据空间可以大于存储源缓内存中的数据的数据空间与管理该数据的目录空间的大小之和。
可选地,可以在目的地家节点的目录中预留出一定的目录空间以在该目录空间中动态的重建迁移后的数据的目录。从而无需拷贝目录数据,进一步减小开销。
可选地,可以将在目的地家节点的目录中预留出一定的目录空间以将源插槽家节点的目录拷贝至目的地家节点的目录中。
参见图6的S603a,目的地插槽代理SA向管理目的地插槽地址的0x20000000000的家节点N1(假设家节点N1的目录维持该缓存行0x20000000000的地址和与其向对应的内存的一致性)发送预留数据空间的命令。可选地,目的地插槽代理SA还可以向家节点N1发送预留目录空间的命令。家节点N1在接收到该命令后,进行数据空间的操作。如果家节点N1接收到了预留目录空间的命令,还应进行预留目录空间的操作。
该预留操作不涉及硬件资源的改变,仅是将在内存中预留出一定的目录空间,从而在保证了有足够的目录空间的情况下,降低了操作的复杂度。
参见图6的S603b,家节点N1在完成预留数据空间的操作之后,向目的地插槽代理S1返回完成预留地址操作的响应。
可选地,源缓内存的数据不仅可包括物理地址中所存储的、用于读写的信息,还可以包括目录信息。由此,需预留的目的地内存的大小不仅可以大于迁移的地址范围的大小,还可以大于迁移的地址范围的大小和目录的大小之和。相应地,可以将目录信息连同数据一起迁移到目的地插槽的内存中并可以在迁移完成之后,动态地建立该数据的目录。可替换地,还可以直接将该目录拷贝至目的地内存中。这样,迁移完成之后的数据寻址更加高效。
可选地,如图5B所示,根据本公开第二实施例的数据迁移的方法中的S403,还包括:
S403a:目的地插槽代理基于完成刷新操作响应和预留操作的响应确定是否进行数据迁移;
S403b:响应于确定进行数据迁移,源插槽家节点将源插槽的源内存中的数据从源插槽的源内存、通过源插槽代理、经由插槽链发送到目的地插槽代理,再经由目的地插槽代理将该数据发送到目的地插槽内存所预留的位置处。
可选地,还可以在目的地内存接收到数据和目录之后,在缓存中缓存该数据和目录。
如图6所示,在S604中,目的地插槽代理S1根据家节点N0、N4返回的响应后来确定是否可以进行数据迁移操作。确定能够进行数据迁移操作之后,则可以开始进行数据迁移。也即是把数据从源插槽的缓存行地址0x50000000000对应的内存中的数据拷贝到目的地插槽的缓存行地址0x20000000000对应的内存。
同时,将管理地址0x50000000000的目录通过代理的方式在家节点N1处进行重建。
可选地,家节点N1在接收到完整的数据之后,向目的地插槽代理SA发送完成数据拷贝的响应。在迁移完成之后,家节点N1由于具有地址0x50000000000的完整目录,家节点N1将作为地址0x50000000000的家节点。
目的地插槽代理通过完成刷新操作响应确认了源插槽内存和源插槽缓存中的数据一致性,并根据预留操作响应确认了目的地插槽中有足够的地址空间以容纳待迁移的数据,进而可以开始数据的迁移工作,从而提高了迁移操作的成功率,避免了由于迁移失败导致的插槽链资源的浪费。
可选地,如图5B所示,根据本公开第二实施例的数据迁移的方法中的S404,还可包括:S404a:目的地插槽代理进行目的地地址翻译层的设置;S404b:经由插槽链并通过源插槽代理向源插槽家节点发送已完成目的地地址翻译层的设置的消息、以及指示源插槽家节点设置源地址翻译层的命令;S404c:源插槽家节点接收指示设置源地址翻译层的命令;S404d:源插槽进行源地址翻译层的设置;S405e:源插槽家节点使能源缓存行地址的有效位,并放开对源缓存行地址的读写操作。
如图6所示,目的地插槽代理SA在目的地插槽代理SA处设置目的地地址翻译层。该地址翻译层可以将目的地插槽发送的访问源插槽的地址0x50000000000的请求转换成访问目的地插槽的地址0x20000000000的请求,并将该请求转发给家节点N0。同时,在S605b中,目的地插槽代理SA向家节点N4通知在目的地插槽代理SA处已经完成了目的地地址翻译层的设置,并命令家节点N4设置源地址翻译层。
而家节点N4在收到目的地插槽代理SA的命令之后,设置对于地址0x50000000000的源地址翻译层。源地址翻译层将访问地址0x50000000000的请求,全部转为访问地址0x20000000000的请求。由于此时家节点N4关于该地址的目录已经迁移至家节点N0,此时的家节点N4的目录针对该地址仅起到地址翻译转换的作用,并不再起到维护该地址的缓存和内存的一致性的作用。
家节点N4在完成源地址翻译层的设置之后,使地址0x50000000000的有效位使能并放开对该地址的读写权限。
整个数据迁移过程就此完成。
根据本公开第二实施例的数据迁移方法,在完成数据迁移之后,在源插槽家节点处设置了源地址翻译层,并在目的地插槽代理处设置目的地地址翻译层,之后便放开缓存行地址的读写权限完成迁移。所述目的地地址翻译层和源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。这样,当目的插槽中的节点希望访问原来存储在源插槽的节点中的数据时,可以通过目的地地址翻译层获知该数据已经被迁移到了目的插槽的内存中,从而快速的获取了数据,而不需跨插槽访问。
通过上述过程可知,本次迁移以缓存行大小的内存块为粒度。在迁移过程中,粒度越小,则对于系统性能的影响就越小。同时,对于还没迁移完成的缓存行,则可以继续使用原来的目录和内存地址进行操作,从而进一步地减少了请求等待的时间。
下文中,参照图7进一步说明经过数据迁移后的访问数据的方法。
图7是根据本公开第一实施例和第二实施例的经过本申请迁移过程后访问远程数据的示意图。
具体地,在经过本申请迁移过程后访问远程数据的方法可包括:
(1)在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层之后,目的地插槽中的第一目的地家节点发出对源缓存行地址的读写请求(参见图7中的S701);
(2)目的地插槽代理将对源缓存行地址的读写请求翻译为对于目的地缓存行地址的请求,并向管理目的地缓存行地址的第二目的地家节点转发读写请求(参见图7中的S702);
(3)第二目的地家节点在接收到读写请求后,经由目的地插槽代理将数据返回至第一目的地家节点(参见图7中的S703和S704)。
如图7所示,假设家节点N2的处理器P2希望访问源地址0x50000000000(地址A)中的数据,而该地址中的数据连同目录已经迁移至目的地地址0x20000000000(地址B),其过程如下:
S701:家节点N2处理器P2向目的地插槽代理SA发送访问地址A的请求。
S702:目的地插槽代理SA将访问地址0x50000000000的请求翻译成访问地址0x20000000000的请求,并向管理地址0x20000000000的家节点N1转发访问请求。
S703:管理地址0x20000000000的家节点N1在接收到读写请求后,将数据从对应的内存中提取出来,并将数据返回至目的地插槽代理SA。可选地,该家节点还将该数据存储至缓存中以便下一次更快地读写。
S704:目的地插槽代理S1将数据转发给处理器P3。
由此,整个访问操作完成。
可见通过地址翻译层,本地的处理器不再需要经历跨插槽发出请求从而获取新的地址的过程,从而避免了地址重映射带来的开销。并且,在迁移过程中也不需要刷新TLB,提高了整个系统的使用效率。迁移过程以缓存行大小的内存块为粒度,将对系统性能的影响降至最低。对于还没迁移完成的缓存行,则可以继续使用原来的目录和内存地址进行操作,从而进一步地减少了请求等待的时间。
综上所述,根据本公开的第一和第二实施例,本公开所提供插槽之间的数据迁移方法至少可以实现:
(1)在插槽之间动态迁移家节点。将跨插槽的请求变为插槽内部的请求,从而减少跨插槽的带宽占用,降低跨插槽访问的延迟。
(2)迁移目录的同时,对目录所对应的内存按需进行迁移,也即是只针对可缓存的地址进行迁移。
(3)搬移过程中动态修改映射,而不需要进行页表的重映射,也不需要等待页表项中该页被引用的计数为0,避免了TLB刷新,简化了数据迁移和交换的过程,提高了迁移的成功率。
(4)整个迁移过程以缓存行为粒度,每个缓存行搬移完成即可放开其访问权限,使得在迁移过程中仍然能够访问其他还未迁移的地址,提高了其他地址的使用效率,大大减少了进程等待的时间。
(5)可以通过硬件自动完成,相比于软件而言,完成速度更快。
本公开还提供了一种插槽间的数据交换方法。现参考附图描述根据本申请一个或多个实施例的数据交换方法。
图8是根据本公开的第三实施例的数据交换方法的流程图。
现根据图8说明根据本公开的第三实施例的数据交换方法。
如图8所示,根据本公开第三实施例的数据交换方法如下:
S801:分别锁住对源插槽的一个或多个源缓存行地址中的数据和对目的地插槽的一个或多个目的地缓存行地址中的数据的读写操作;
S802:分别对一个或多个源缓存行地址和一个或多个目的地缓存行地址进行刷新,使得所述一个或多个源缓存行地址和一个或多个目的地缓存行地址中的脏数据分别被写回至源插槽的源内存以及目的地插槽的目的地内存中;
S803:将源插槽的源内存中的数据与目的地插槽中的目的地内存中的数据交换;
S804:在目的地插槽代理处和源插槽家节点处分别设置第一目的地地址翻译层和第一源地址翻译层,其中,第一目的地地址翻译层和第一源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
通过上述过程可知,本次数据交换以缓存行大小的内存块为粒度,操作过程中仅锁住了部分缓存行。在数据交换过程中,粒度越小,则对于系统性能的影响就越小。同时,对于还没迁移完成的缓存行,则可以继续使用原来的目录和内存地址进行操作,从而进一步地减少了请求等待的时间。
可选地,在目的地插槽代理处和源插槽家节点处分别设置第一目的地地址翻译层和第一源地址翻译层还包括:目的地插槽代理在目的地插槽代理处设置目的地地址翻译层,所述目的地地址翻译层将目的地插槽中的一个或多个目的地家节点发送的、访问源缓存行地址的请求转换成访问目的地插槽内的目的地缓存行地址的请求。
由此,通过设置第一目的地地址翻译层,当目的插槽中的节点希望访问原来存储在源插槽的节点中的数据时,可以通过目的地地址翻译层获知该数据已经被迁移到了目的插槽的内存中,从而快速的获取了数据,而不需跨插槽访问。
可选地,在目的地插槽代理处和源插槽家节点处分别设置第一目的地地址翻译层和第一源地址翻译层还包括:源插槽家节点在源插槽家节点处设置源地址翻译层,所述源地址翻译层将源插槽中的一个或多个源插槽家节点发送的、访问源缓存行地址的请求转换成访问目的地插槽内目的地缓存行地址的请求。
而通过设置第一源地址翻译层,当源插槽中的节点希望原来存储在源插槽的节点中的数据时,可以通过源地址翻译层获知该数据已经被迁移到了目的插槽的内存中,从而在源插槽之内就能获得该数据所在的正确地址,而不需通过跨插槽的轮询来获知该数据所在的地址。
现参照图9A、图9B、图10A和图10B,描述根据本公开的第四实施例的数据交换方法。
图9A和9B是根据本公开的第四实施例的数据交换方法的流程图。图10A是根据本公开的第四实施例的数据交换方法的示意图。图10B是根据本公开的第四实施例的数据交换方法的家节点的目录变化示意图。现参考图9A、图9B、图10A和图10B描述本公开的第四实施例。
如图9A和图9B所示,根据本公开第四实施例的数据交换的方法至少包括图9A和图9B中所示的S901-S904,其中步骤S901-S904与图8中所示的S801-S804相同或类似,因此不再赘述。
以下进一步描述S901-S904中的每一个步骤的示例性实施方式。
可选地,如图9A所示,根据本公开第四实施例的数据迁移的方法还包括:由目的地插槽代理发起数据交换过程,源插槽代理配合目的地插槽代理进行数据交换过程,其中,目的地插槽代理通知源插槽代理将开始数据交换以及要进行数据交换的源缓存行地址的范围。
如图10A所示,假设需要将源插槽中的一定地址范围内的数据与目的地插槽中相应的地址范围内的数据进行交换。并假设与源插槽中的地址0x50000000000将与目的地插槽中的地址0x20000000000中的数据进行交换。
参考图10A中的S1001,假设家节点N2向目的地插槽SA通知目的地插槽将与源插槽进行数据交换,并告知目的地插槽代理需要交换的地址范围。目的地插槽代理SA收到数据交换命令和待交换的数据的地址范围后,开始整个数据交换的过程。由于待交换的数据的地址范围可以包括多个缓存行地址,因此可以同时发起多个缓存行的迁移。因为发起者属于目的地插槽,所以目的地插槽代理SA将要完成整个操作。
由此,单一的插槽代理就能够启动整个数据交换过程,而不需通过软件系统通过软件指令的发送解析等步骤才能进行迁移过程的发起。
可选地,如图9A所示,根据本公开第四实施例的数据交换的方法中的S901,还包括:
S901a:目的地插槽代理锁住目的地插槽和源插槽中的一个或多个处理器对一个或多个源缓存行地址中的数据读写操作。其中,目的地插槽代理停止转发目的地插槽的处理器对所述一个或多个源缓存行地址中的数据进行读写的请求,并停止转发源插槽的一个或多个处理器对所述一个或多个目的地缓存行地址中的数据进行读写的请求,同时,目的地插槽代理向发出读写请求的处理器发送重传请求。
S901b:目的地插槽的家节点锁住目的地插槽的一个或多个处理器对所述一个或多个目的地缓存行地址中的数据的读写操作。其中,目的地插槽的家节点向发出读写请求的处理器发送重传请求。源插槽家节点锁住源插槽的一个或多个处理器对所述一个或多个源缓存行地址中的数据的读写操作。其中,源插槽家节点向发出读写请求的处理器发送重传请求。
参考图10A,目的地插槽代理SA锁住目的地插槽中的各个节点对于源插槽的地址0x50000000000的跨插槽访问的请求。更具体地,该锁定操作为:目的地插槽代理SA将向发出读写请求的节点发送重传请求,以告知这些节点稍后再重新尝试访问地址0x50000000000。此时,假设家节点N1希望调用地址0x50000000000中的数据,当家节点N1向目的地插槽代理SA发送读写请求时,目的地插槽代理SA将不再向源插槽代理转发家节点N1的读写请求,而是直接向家节点N1返回重传请求,告知家节点N1稍后再重新尝试访问。
目的地插槽代理SA还要锁住源插槽中的各个节点对于目的地插槽的地址0x20000000000的跨插槽访问的请求。具体地,该锁定操作为,目的地插槽代理SA不再转发源插槽中的各个节点对于地址0x20000000000的跨插槽访问的请求,并将向发出读写请求的节点发送重传请求,以告知这些节点稍后再重新尝试访问地址0x20000000000。
在交换操作之前,还需要锁住(1)源插槽中的各个节点对于地址0x50000000000的读写请求;(2)目的地插槽中的各个节点对于地址0x20000000000的读写请求。因此,参考图10A中的步骤1002a,目的地插槽代理SA向家节点N1发送了停止读写命令和刷新命令。同时,目的地插槽代理SA也经由插槽链、通过插槽代理B向家节点N4发送了停止读写命令和刷新命令。家节点N1和N4在接收到停止读写的命令后,家节点N1将向发出读写请求的目的地插槽的处理器发送重传请求,家节点N4也将向发出读写请求的源插槽的处理器发送重传请求。
由于在执行数据交换之前,锁住了对源插槽和目的地插槽内的一个或多个缓存行的读写操作,从而保证了在数据交换过程中没有进程对该缓存行进行写入或修改操作,保证了源插槽和目的地插槽的缓存行中的数据的正确性。
可选地,如图9A所示,根据本公开第四实施例的数据交换的方法中的S902,还包括:
S902a:将一个或多个源缓存行地址和一个或多个目的地缓存行地址的有效位失效;
S902b:同时将所述一个或多个源缓存行地址中的脏数据写回源插槽的源内存中,并将所述一个或多个目的地缓存行地址中的脏数据写回目的地插槽的内存中。
参见图10A,家节点N1和N4在接收到了停止读写命令的同时,还接收到了对地址0x20000000000和0x50000000000进行刷新操作命令(S1002a)。家节点N1和N4执行刷新操作,该操作包括使地址0x20000000000和0x50000000000的有效位失效,并将该地址中脏数据写回该缓存行地址对应的内存中。参见S1002b,家节点N4在完成对地址0x50000000000处缓存行的刷新后,向目的地插槽代理SA返回完成刷新操作的响应。家节点N1也向目的地插槽代理SA返回完成刷新操作的响应。
参考图10B,家节点N1在完成锁定和刷新操作(S10b2)之后,地址0x20000000000的锁定标识符为1。而未进行步骤S10b1-S10b2的地址0x20000000001的锁定标识符则为0。
同样的,家节点N4在完成锁定和刷新操作(S10b2)之后,地址0x50000000000的锁定标识符为1。
通过将缓存行中的脏数据刷新回与该缓存行相对应的内存地址中,从而保证缓存行中的数据与内存中的数据的一致性,进一步地保证了交换的数据的正确性。
可选地,如图9B所示,根据本公开第四实施例的数据交换的方法中的S903,还包括:
S903a:源插槽家节点将源插槽的源内存中的数据从源插槽的源内存通过源插槽代理经由插槽链发送到目的地插槽代理;
S903b:经由目的地插槽代理将该数据发送到目的地插槽内存相应位置处。
如图10A所示,目的地插槽代理SA根据家节点N1、N4返回的完成刷新操作响应后来确定是否可以进行数据交换操作。确定能够进行数据交换操作之后,则可以开始进行数据交换。参考图10A中的S1003a,也即是把数据从源插槽的缓存行地址0x50000000000对应的内存中的数据与目的地插槽的缓存行地址0x20000000000对应的内存中的数据进行交换。家节点N1和N4在接收到完整的数据之后,向目的地插槽代理SA发送完成数据交换的响应(S1003b)。在交换完成之后,家节点N0由于具有地址0x50000000000的完整目录,家节点N0将作为地址0x50000000000的家节点。而家节点N4将作为地址0x20000000000的家节点。
在S1003b:家节点N1和N4在完成对地址0x50000000000和地址0x20000000000所对应的内存的数据交换后,分别向目的地插槽代理SA返回完成交换操作的响应。
目的地插槽代理通过完成刷新操作响应确认了源插槽内存和源插槽缓存中的数据一致性,进而可以开始数据的交换工作,从而提高了交换操作的成功率,避免了由于迁移失败导致的插槽链资源的浪费。
可选地,如图9B所示,根据本公开第四实施例的数据交换的方法中的S904,还包括:
S904a:在目的地插槽代理处和源插槽家节点处分别设置第一目的地地址翻译层和第一源地址翻译层;
S904b:在源插槽代理处和目的地插槽家节点处分别设置第二源地址翻译层和第二目的地地址翻译层;
S904c:分别将所述一个或多个源缓存行地址和所述一个或多个目的地缓存行地址解锁,其中,将一个或多个源缓存行地址和所述一个或多个目的地缓存行地址的有效位使能,并放开对所述一个或多个源缓存行地址和所述一个或多个目的地缓存行地址中的数据的读写权限。
可选地,根据本公开第四实施例的数据交换的方法,其中,在源插槽代理处和目的地插槽家节点处分别设置第二源地址翻译层和第二目的地地址翻译层还包括:源插槽代理在源插槽代理处设置第二源地址翻译层,第二源地址翻译层将源插槽中的一个或多个源插槽家节点发送的、访问目的地缓存行地址的请求转换成访问源插槽内的源缓存行的请求。
通过设置第二源地址翻译层,当源插槽中的节点希望原来存储在目的地插槽的节点中的数据时,可以通过第二源地址翻译层获知该数据已经被交换到了源插槽的内存中,从而在源插槽之内就能获得该数据所在的正确地址以及该数据,而不需通过跨插槽的轮询来获知该数据所在的地址。
可选地,根据本公开第四实施例的数据交换的方法,其中,在源插槽代理处和目的地插槽家节点处分别设置第二源地址翻译层和第二目的地地址翻译层还包括:目的地插槽家节点在目的地插槽家节点处设置第二目的地地址翻译层,所述第二目的地地址翻译层将目的地插槽中的一个或多个目的地插槽家节点发送的、访问目的地缓存行地址的请求转换成访问源插槽内的源缓存行的请求。
由此,通过设置第二目的地地址翻译层,当目的插槽中的节点希望访问原来存储在目的地插槽的家节点中的数据时,可以通过第二目的地地址翻译层获知该数据已经交换到了源插槽的内存中,从而快速的获取了数据地址,而不需跨插槽进行寻址。
如图10A所示,在S1004a中,目的地插槽代理SA在目的地插槽代理SA处设置第一目的地地址翻译层。第一目的地地址翻译层可以将目的地插槽发送的访问源插槽的地址0x50000000000的请求转换成访问目的地插槽的地址0x20000000000的请求。同时目的地插槽代理SA向家节点N4通过插槽代理SB通知在目的地插槽代理SA处已经完成了第一目的地地址翻译层的设置,并命令家节点N4设置第一源地址翻译层、命令源插槽代理SB设置第二源地址翻译层。而家节点N4在收到目的地插槽代理SA的命令之后,设置对于地址0x50000000000的第一源地址翻译层。第一源地址翻译层将访问地址0x50000000000的请求,全部转为访问地址0x20000000000的请求。由于此时家节点N4关于地址0x50000000000的目录已经迁移至家节点N1,此时的家节点N4的目录针对该地址仅起到地址翻译转换的作用,并不再起到维护地址0x50000000000的缓存和内存的一致性的作用。
同时,源插槽代理SB在收到目的地插槽代理SA的命令之后,设置对于地址0x20000000000的第二源地址翻译层。第二源地址翻译层将访问地址0x20000000000的请求,全部转为访问地址0x50000000000的请求。
目的地插槽代理SA在完成第一目的地地址翻译层的设置之后,向家节点N1发送完成第一目的地地址翻译层设置的操作的命令以及设置第二目的地地址翻译层的命令。家节点N1在接收到该命令后,设置第二目的地地址翻译层,并将对地址0x20000000000的有效位使能并放开对该地址的读写权限。其中第二目的地地址翻译层可以将访问地址0x20000000000的请求,全部转为访问地址0x50000000000的请求。可选地,家节点N1还向目的地插槽代理SA返回完成解锁操作的响应(S1005b)。
源插槽代理SB在设置对于地址0x20000000000的第二源地址翻译层之后返回完成第二源地址翻译层的设置的命令(S1005b)。
家节点N4在完成第一源地址翻译层的设置之后,使地址0x50000000000的有效位使能并放开对该地址的读写权限,并向目的地插槽代理SA返回完成解锁操作的响应(S1005b)。
参考图10B,家节点N1在完成交换内存中的数据(S10b3)和解锁缓存行操作(S10b4)之后,地址0x20000000000的锁定标识符为0,而proxy标识符则由0变为1,指示针对该地址的地址翻译层已经建立完成。而未进行步骤S10b1-S10b4的地址0x20000000001的锁定标识符和proxy标识符则始终为0。
同样的,家节点N4在完成交换内存中的数据(S10b3)和解锁缓存行操作(S10b4)之后,地址0x50000000000的锁定标识符为0,而proxy标识符则由0变为1。
整个数据交换过程就此完成。
根据本公开第四实施例的数据迁移方法,在完成数据交换之后,在源插槽家节点处设置了源地址翻译层,并在目的地插槽代理处设置目的地地址翻译层,之后便放开缓存行地址的读写权限完成迁移。其中,目的地地址翻译层和源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。这样,当目的插槽中的节点希望访问原来存储在源插槽的节点中的数据时,可以通过目的地地址翻译层获知该数据已经被迁移到了目的插槽的内存中,从而快速的获取了数据,而不需跨插槽访问。
通过上述过程可知,本次迁移以缓存行大小的内存块为粒度。在迁移过程中,粒度越小,则对于系统性能的影响就越小。同时,对于还没迁移完成的缓存行,则可以继续使用原来的目录和内存地址进行操作,从而进一步地减少了请求等待的时间。
整个数据交换过程就此完成。
根据本公开的至少一个实施例,本公开提供了一种跨插槽的目录和数据迁移或交换方法。在插槽之间动态迁移家节点。将跨插槽的请求变为插槽内部的请求,从而减少跨插槽的带宽占用,降低跨插槽访问的延迟。通过插槽代理辅助进行数据迁移和交换,实现了以一个缓存行为粒度进行的迁移,使得在迁移过程中仍然能够访问其他还未迁移的地址,相比NUMA以页面为粒度进行迁移,大大减少了进程等待的时间。
同时,本公开的技术方案通过添加额外地址翻译层,解决现有技术数据迁移所导致的TLB刷新和地址重映射的技术问题。相比于现有技术中使用软件来进行数据迁移的方法,本申请既不需要修改进程页表,也不需要等待页表项中该页被引用的计数为0,避免了TLB刷新,简化了数据交换的过程,提高了迁移的成功率。本公开的技术方案可以通过硬件自动完成,相比于软件而言,完成速度更快。
本公开还提供了一种多处理器系统,其可以用于执行根据本公开中的一个或多个实施例的数据迁移方法。现参考本公开的附图11来描述该系统。
图11是根据本公开的第五实施例的多处理器系统的结构图。
如图11所示,根据本公开第五实施例的多处理器系统,可以包括:目的地插槽socket 1100A和源插槽socket 1100B。
其中,目的地插槽socket 1100A,包括:目的地插槽代理SA 1100A,被配置为发起数据迁移过程,并在数据迁移过程完成之后,设置目的地地址翻译层L1100A;目的地插槽家节点(N1101或N1102),被配置为控制与目的地缓存行地址相对应的目的地内存接收并存储要迁移的数据。
其中,源插槽socket 1100B,包括:源插槽代理SB 1100B,被配置为配合目的地插槽代理SA 1100A进行数据迁移过程;源插槽家节点(N1103或N1104),被配置为控制与源缓存行地址相对应的源插槽内存发送要迁移的数据,并在数据迁移过程完成之后,设置源地址翻译层L1100B。
其中,目的地地址翻译层L1100A和源地址翻译层L1100B将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
本公开还提供了一种多处理器系统,其可以用于执行根据本公开中的一个或多个实施例的数据交换方法。现参考本公开的附图12来描述该系统。
图12是根据本公开的第六实施例的多处理器系统的结构图。
如图12所示,根据本公开第六实施例的多处理器系统,可以包括:目的地插槽socket 1200A和源插槽socket 1200B。
所述目的地插槽socket 1200A可包括:目的地插槽代理SA 1200A,被配置为发起数据交换过程,并在数据交换过程完成之后,设置第一目的地地址翻译层L1201A;目的地插槽家节点(N1201或者N1202),被配置为控制与目的地缓存行地址相对应的目的地内存发送要交换的目的插槽交换数据,接收并存储要交换的源插槽交换数据。
所述源插槽socket 1200B可包括:源插槽代理SB 1200B,被配置为配合目的地插槽代理socket 1200A进行数据交换过程;源插槽家节点(N1203或N1204),被配置为控制与源缓存行地址相对应的源插槽内存中发送要交换的源插槽交换数据,接收并存储要交换的目的地插槽交换数据,并在数据交换过程完成之后,设置第一源地址翻译层L1201B。
所述目的地地址翻译层L1200A和源地址翻译层L1200B将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
可选地,目的地插槽家节点(N1201或者N1202),被配置为设置第二目的地地址翻译层L1202A。
可选地,源插槽代理SB 1200B,被配置为设置第二源地址翻译层L1202B。
所述目的地地址翻译层L1202A和源地址翻译层L1202B将访问目的地缓存行地址的请求转换成访问源缓存行的请求。
本公开还提供了一种处理插槽之间的数据迁移的装置。
图13是根据本公开的第七实施例的处理插槽之间的数据迁移的装置的示意图。现参考本公开的附图13来描述该装置。
如图13所示,根据本公开第七实施例的处理插槽之间的数据迁移的装置,可以包括:锁定装置1301,其被配置为锁住对源插槽的一个或多个源缓存行地址中的数据的读写操作;刷新装置1302,其被配置为对源缓存行地址进行刷新,使得源缓存行地址中的脏数据被写回至源插槽的源内存中;迁移装置1303,其被配置为将源插槽的源内存中的数据迁移到目的地插槽中的目的地内存;地址翻译层设置装置1304,其被配置为在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层,所述目的地地址翻译层和源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
本公开还提供了一种处理插槽之间的数据交换的装置。
图14是根据本公开的第八实施例的处理插槽之间的数据迁移的装置的示意图。现参考本公开的附图14来描述该装置。
如图14所示,根据本公开第八实施例的处理插槽之间的数据交换的装置,可以包括:锁定装置1401,其被配置为分别锁住对源插槽的一个或多个源缓存行地址中的数据和对目的地插槽的一个或多个目的地缓存行地址中的数据的读写操作;刷新装置1402,其被配置为分别对一个或多个源缓存行地址和一个或多个目的地缓存行地址进行刷新,使得所述一个或多个源缓存行地址和一个或多个目的地缓存行地址中的脏数据分别被写回至源插槽的源内存以及目的地插槽的目的地内存中;交换装置1403,其被配置为将源插槽的源内存中的数据与目的地插槽中的目的地内存中的数据交换;地址翻译层设置装置1404,其被配置为在目的地插槽代理处和源插槽家节点处分别设置第一目的地地址翻译层和第一源地址翻译层,其中,第一目的地地址翻译层和第一源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
在本申请所提供的几个实施例中,应该理解到,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,该模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
需要说明的是,在本文中,诸如第一和第三等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所附权利要求及其等同物的保护范围为准。
Claims (28)
1.一种插槽间的数据迁移方法,其包括:
锁住对源插槽的一个或多个源缓存行地址中的数据的读写操作;
对源缓存行地址进行刷新,使得源缓存行地址中的脏数据被写回至源插槽的源内存中;
将源插槽的源内存中的数据迁移到目的地插槽中的目的地内存;
在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层,所述目的地地址翻译层和源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
2.如权利要求1所述的插槽间的数据迁移方法,其中,在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层还包括:
目的地插槽代理在目的地插槽代理处设置目的地地址翻译层,所述目的地地址翻译层将目的地插槽中的一个或多个目的地插槽家节点发送的、访问源缓存行地址的请求转换成访问目的地插槽内的目的地缓存行地址的请求。
3.如权利要求2所述的插槽间的数据迁移方法,其中,在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层还包括:
源插槽家节点在源插槽家节点处设置源地址翻译层,所述源地址翻译层将源插槽中的一个或多个源插槽家节点发送的、访问源缓存行地址的请求转换成访问目的地插槽内目的地缓存行地址的请求。
4.如权利要求1所述的插槽间的数据迁移方法,其中,所述方法还包括:
由目的地插槽代理发起数据迁移过程,源插槽代理配合目的地插槽代理进行数据迁移过程。
5.如权利要求1所述的插槽间的数据迁移方法,其中,锁住对源插槽的一个或多个源缓存行地址中的数据的读写操作,还包括:
目的地插槽代理停止转发目的地插槽的处理器对源插槽的源缓存行地址中的数据进行读写的请求,并将向发出读写请求的处理器发送重传请求。
6.如权利要求1所述的插槽间的数据迁移方法,其中,锁住对源插槽的一个或多个源缓存行地址中的数据的读写操作,还包括:
目的地插槽代理经由插槽链向源插槽代理发送停止读写源缓存行地址中的数据的命令;
源插槽代理向源插槽家节点转发指示停止读写源缓存行地址中的数据的命令,以使得源插槽的处理器停止对源缓存行地址中的数据的读写。
7.如权利要求1所述的插槽间的数据迁移方法,其中,对源缓存行地址进行刷新,还包括:
源插槽代理向源插槽家节点发送指示刷新源缓存行地址的命令,所述源插槽家节点并对源缓存行地址进行刷新;
其中,所述刷新使得源缓存行地址的有效位失效,同时将源缓存行地址中的脏数据写回源插槽的源内存中;
源插槽家节点在完成对源缓存行地址刷新之后,经由插槽链,通过源插槽代理向目的地插槽代理发送完成刷新操作响应。
8.如权利要求1所述的插槽间的数据迁移方法,所述方法还包括:
预留目的地内存以接收源缓内存的数据;
其中,目的地插槽代理向目的地插槽的家节点发送预留目的地内存的命令,目的地插槽的家节点预留目的地内存以接收源插槽的源内存中的数据;
目的地插槽的家节点在完成预留操作后,向目的地插槽代理发送完成预留操作的响应。
9.如权利要求8所述的插槽间的数据迁移方法,所述方法还包括:
目的地插槽代理基于完成刷新操作响应和预留操作的响应确定是否进行数据迁移;
响应于确定进行数据迁移,源插槽家节点将源插槽的源内存中的数据从源插槽的源内存、通过源插槽代理、经由插槽链发送到目的地插槽代理,再经由目的地插槽代理将该数据发送到目的地插槽内存所预留的位置处。
10.如权利要求3所述的插槽间的数据迁移方法,所述方法还包括:
在目的地插槽代理完成目的地地址翻译层的设置之后,经由插槽链并通过源插槽代理向源插槽家节点发送已完成目的地地址翻译层的建立的消息、以及指示源插槽家节点建立源地址翻译层的命令。
11.如权利要求10所述的插槽间的数据迁移方法,所述方法还包括:
源插槽家节点接收指示建立源地址翻译层的命令,并进行源地址翻译层的建立;
在源插槽家节点完成源地址翻译层的设置之后,源插槽家节点使能源缓存行地址的有效位,并放开对源缓存行地址的读写操作。
12.如权利要求1所述的插槽间的数据迁移方法,所述方法还包括:
在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层之后,目的地插槽中的第一目的地家节点发出对源缓存行地址的读写请求;
目的地插槽代理将对源缓存行地址的读写请求翻译为对于目的地缓存行地址的请求,并向管理目的地缓存行地址的第二目的地家节点转发读写请求;
第二目的地家节点在接收到读写请求后,经由目的地插槽代理将数据返回至第一目的地家节点。
13.一种插槽间的交换数据的方法,其包括:
分别锁住对源插槽的一个或多个源缓存行地址中的数据和对目的地插槽的一个或多个目的地缓存行地址中的数据的读写操作;
分别对一个或多个源缓存行地址和一个或多个目的地缓存行地址进行刷新,使得所述一个或多个源缓存行地址和一个或多个目的地缓存行地址中的脏数据分别被写回至源插槽的源内存以及目的地插槽的目的地内存中;
将源插槽的源内存中的数据与目的地插槽中的目的地内存中的数据交换;
在目的地插槽代理处和源插槽家节点处分别设置第一目的地地址翻译层和第一源地址翻译层,其中,第一目的地地址翻译层和第一源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
14.如权利要求13所述的插槽间的交换数据的方法,其中,在目的地插槽代理处和源插槽家节点处分别设置第一目的地地址翻译层和第一源地址翻译层还包括:
目的地插槽代理在目的地插槽代理处设置第一目的地地址翻译层,第一目的地地址翻译层将目的地插槽中的一个或多个目的地插槽家节点发送的、访问源缓存行地址的请求转换成访问目的地插槽内的目的地缓存行的请求。
15.如权利要求13所述的插槽间的交换数据的方法,其中,在目的地插槽代理处和源插槽家节点处分别设置第一目的地地址翻译层和第一源地址翻译层还包括:
源插槽家节点在源插槽家节点处设置第一源地址翻译层,所述第一源地址翻译层将源插槽中的一个或多个源插槽家节点发送的、访问源缓存行地址的请求转换成访问目的地插槽内目的地缓存行的请求。
16.如权利要求13所述的插槽间的交换数据的方法,其中,所述方法还包括:
在源插槽代理处和目的地插槽家节点处分别设置第二源地址翻译层和第二目的地地址翻译层,其中,第二源地址翻译层和第二目的地地址翻译层将访问目的地缓存行地址的请求转换成访问源缓存行的请求。
17.如权利要求16所述的插槽间的交换数据的方法,其中,在源插槽代理处和目的地插槽家节点处分别设置第二源地址翻译层和第二目的地地址翻译层还包括:
源插槽代理在源插槽代理处设置第二源地址翻译层,第二源地址翻译层将源插槽中的一个或多个源插槽家节点发送的、访问目的地缓存行地址的请求转换成访问源插槽内的源缓存行的请求。
18.如权利要求16所述的插槽间的交换数据的方法,其中,在源插槽代理处和目的地插槽家节点处分别设置第二源地址翻译层和第二目的地地址翻译层还包括:
目的地插槽家节点在目的地插槽家节点处设置第二目的地地址翻译层,所述第二目的地地址翻译层将目的地插槽中的一个或多个目的地插槽家节点发送的、访问目的地缓存行地址的请求转换成访问源插槽内的源缓存行的请求。
19.如权利要求13所述的插槽间的交换数据的方法,其中,所述方法还包括:
由目的地插槽代理发起数据交换过程,源插槽代理配合目的地插槽代理进行数据交换过程,
其中,目的地插槽代理通知源插槽代理将开始数据交换以及要进行数据交换的源缓存行地址的范围。
20.如权利要求13所述的插槽间的交换数据的方法,其中,分别锁住对源插槽的一个或多个源缓存行地址中的数据和对目的地插槽的一个或多个目的地缓存行地址中的数据的读写操作还包括:
目的地插槽代理锁住目的地插槽和源插槽中的一个或多个处理器对所述一个或多个源缓存行地址中的数据读写操作;
其中,目的地插槽代理停止转发目的地插槽的处理器对所述一个或多个源缓存行地址中的数据进行读写的请求,并停止转发源插槽的一个或多个处理器对所述一个或多个目的地缓存行地址中的数据进行读写的请求,
同时,目的地插槽代理向发出读写请求的处理器发送重传请求。
21.如权利要求13所述的插槽间的交换数据的方法,其中,分别锁住对源插槽的一个或多个源缓存行地址中的数据和对目的地插槽的一个或多个目的地缓存行地址中的数据的读写操作还包括:
目的地插槽的家节点锁住目的地插槽的一个或多个处理器对所述一个或多个目的地缓存行地址中的数据的读写操作;
其中,目的地插槽的家节点向发出读写请求的处理器发送重传请求;
源插槽家节点锁住源插槽的一个或多个处理器对所述一个或多个源缓存行地址中的数据的读写操作;
其中,源插槽家节点向发出读写请求的处理器发送重传请求。
22.如权利要求13所述的插槽间的交换数据的方法,其中,分别对一个或多个源缓存行地址和一个或多个目的地缓存行地址进行刷新,还包括:
将一个或多个源缓存行地址和一个或多个目的地缓存行地址的有效位失效;
同时将所述一个或多个源缓存行地址中的脏数据写回源插槽的源内存中,并将所述一个或多个目的地缓存行地址中的脏数据写回目的地插槽的内存中。
23.如权利要求13所述的插槽间的交换数据方法,还包括:
源插槽家节点将源插槽的源内存中的数据从源插槽的源内存通过源插槽代理经由插槽链发送到目的地插槽代理;
经由目的地插槽代理将该数据发送到目的地插槽内存相应位置处。
24.如权利要求13所述的插槽间的交换数据方法,还包括:
在源插槽家节点完成源地址翻译层的设置之后;
分别将所述一个或多个源缓存行地址和所述一个或多个目的地缓存行地址解锁;
其中,将一个或多个源缓存行地址和所述一个或多个目的地缓存行地址的有效位使能,并放开对所述一个或多个源缓存行地址和所述一个或多个目的地缓存行地址中的数据的读写权限。
25.一种多处理器系统,包括:
目的地插槽,包括:
目的地插槽代理,被配置为发起数据迁移过程,并在数据迁移过程完成之后,设置目的地地址翻译层;
目的地插槽家节点,被配置为控制与目的地缓存行地址相对应的目的地内存接收并存储要迁移的数据;
源插槽,包括:
源插槽代理,被配置为配合目的地插槽代理进行数据迁移过程;
源插槽家节点,被配置为控制与源缓存行地址相对应的源插槽内存发送要迁移的数据,并在数据迁移过程完成之后,设置源地址翻译层;
其中,所述目的地地址翻译层和源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
26.一种多处理器系统,包括:
目的地插槽,包括:
目的地插槽代理,被配置为发起数据交换过程,并在数据交换过程完成之后,设置第一目的地地址翻译层;
目的地插槽家节点,被配置为控制与目的地缓存行地址相对应的目的地内存发送要交换的目的插槽交换数据,接收并存储要交换的源插槽交换数据;
源插槽,包括:
源插槽代理,被配置为配合目的地插槽代理进行数据交换过程;
源插槽家节点,被配置为控制与源缓存行地址相对应的源插槽内存中发送要交换的源插槽交换数据,接收并存储要交换的目的地插槽交换数据,并在数据交换过程完成之后,设置第一源地址翻译层;
其中,第一目的地地址翻译层和第一源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
27.一种处理插槽之间的数据迁移的装置,所述装置包括:
锁定装置,其被配置为锁住对源插槽的一个或多个源缓存行地址中的数据的读写操作;
刷新装置,其被配置为对源缓存行地址进行刷新,使得源缓存行地址中的脏数据被写回至源插槽的源内存中;
迁移装置,其被配置为将源插槽的源内存中的数据迁移到目的地插槽中的目的地内存;
地址翻译层设置装置,其被配置为在目的地插槽代理处和源插槽家节点处分别设置目的地地址翻译层和源地址翻译层,所述目的地地址翻译层和源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
28.一种处理插槽之间的数据交换的装置,所述装置包括:
锁定装置,其被配置为分别锁住对源插槽的一个或多个源缓存行地址中的数据和对目的地插槽的一个或多个目的地缓存行地址中的数据的读写操作;
刷新装置,其被配置为分别对一个或多个源缓存行地址和一个或多个目的地缓存行地址进行刷新,使得所述一个或多个源缓存行地址和一个或多个目的地缓存行地址中的脏数据分别被写回至源插槽的源内存以及目的地插槽的目的地内存中;
交换装置,其被配置为将源插槽的源内存中的数据与目的地插槽中的目的地内存中的数据交换;
地址翻译层设置装置,其被配置为在目的地插槽代理处和源插槽家节点处分别设置第一目的地地址翻译层和第一源地址翻译层,其中,第一目的地地址翻译层和第一源地址翻译层将访问源缓存行地址的请求转换成访问目的地缓存行的请求。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811134279.7A CN109117416B (zh) | 2018-09-27 | 2018-09-27 | 插槽间的数据迁移或交换的方法和装置以及多处理器系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811134279.7A CN109117416B (zh) | 2018-09-27 | 2018-09-27 | 插槽间的数据迁移或交换的方法和装置以及多处理器系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109117416A true CN109117416A (zh) | 2019-01-01 |
CN109117416B CN109117416B (zh) | 2020-05-26 |
Family
ID=64856617
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811134279.7A Active CN109117416B (zh) | 2018-09-27 | 2018-09-27 | 插槽间的数据迁移或交换的方法和装置以及多处理器系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109117416B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111124953A (zh) * | 2019-12-18 | 2020-05-08 | 海光信息技术有限公司 | 数据交换方法、装置、处理器及计算机系统 |
CN113515502A (zh) * | 2021-07-14 | 2021-10-19 | 重庆度小满优扬科技有限公司 | 数据迁移方法、装置、设备以及存储介质 |
US11327551B2 (en) | 2019-02-14 | 2022-05-10 | Micron Technology, Inc. | Methods and apparatus for characterizing memory devices |
US11398264B2 (en) * | 2019-07-08 | 2022-07-26 | Micron Technology, Inc. | Methods and apparatus for dynamically adjusting performance of partitioned memory |
US11449577B2 (en) | 2019-11-20 | 2022-09-20 | Micron Technology, Inc. | Methods and apparatus for performing video processing matrix operations within a memory array |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11853385B2 (en) | 2019-12-05 | 2023-12-26 | Micron Technology, Inc. | Methods and apparatus for performing diversity matrix operations within a memory array |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102308282A (zh) * | 2011-07-20 | 2012-01-04 | 华为技术有限公司 | 多处理器体系结构远端内存访问的模拟方法及模拟器 |
CN102326149A (zh) * | 2011-07-28 | 2012-01-18 | 华为技术有限公司 | 内存迁移的实现方法和装置 |
CN103765336A (zh) * | 2011-06-20 | 2014-04-30 | Abb研究有限公司 | 分布式控制系统中控制应用的在线和动态调度配置的方法和系统 |
CN103853623A (zh) * | 2012-11-30 | 2014-06-11 | 华为技术有限公司 | 数据迁移方法及装置 |
CN105159841A (zh) * | 2014-06-13 | 2015-12-16 | 华为技术有限公司 | 一种内存迁移方法及装置 |
CN106250350A (zh) * | 2016-07-28 | 2016-12-21 | 浪潮(北京)电子信息产业有限公司 | 一种基于numa架构的页缓存读取方法及系统 |
-
2018
- 2018-09-27 CN CN201811134279.7A patent/CN109117416B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103765336A (zh) * | 2011-06-20 | 2014-04-30 | Abb研究有限公司 | 分布式控制系统中控制应用的在线和动态调度配置的方法和系统 |
CN102308282A (zh) * | 2011-07-20 | 2012-01-04 | 华为技术有限公司 | 多处理器体系结构远端内存访问的模拟方法及模拟器 |
CN102326149A (zh) * | 2011-07-28 | 2012-01-18 | 华为技术有限公司 | 内存迁移的实现方法和装置 |
CN103853623A (zh) * | 2012-11-30 | 2014-06-11 | 华为技术有限公司 | 数据迁移方法及装置 |
CN105159841A (zh) * | 2014-06-13 | 2015-12-16 | 华为技术有限公司 | 一种内存迁移方法及装置 |
CN106250350A (zh) * | 2016-07-28 | 2016-12-21 | 浪潮(北京)电子信息产业有限公司 | 一种基于numa架构的页缓存读取方法及系统 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11327551B2 (en) | 2019-02-14 | 2022-05-10 | Micron Technology, Inc. | Methods and apparatus for characterizing memory devices |
US11398264B2 (en) * | 2019-07-08 | 2022-07-26 | Micron Technology, Inc. | Methods and apparatus for dynamically adjusting performance of partitioned memory |
US11449577B2 (en) | 2019-11-20 | 2022-09-20 | Micron Technology, Inc. | Methods and apparatus for performing video processing matrix operations within a memory array |
US11928177B2 (en) | 2019-11-20 | 2024-03-12 | Micron Technology, Inc. | Methods and apparatus for performing video processing matrix operations within a memory array |
CN111124953A (zh) * | 2019-12-18 | 2020-05-08 | 海光信息技术有限公司 | 数据交换方法、装置、处理器及计算机系统 |
CN113515502A (zh) * | 2021-07-14 | 2021-10-19 | 重庆度小满优扬科技有限公司 | 数据迁移方法、装置、设备以及存储介质 |
CN113515502B (zh) * | 2021-07-14 | 2023-11-21 | 重庆度小满优扬科技有限公司 | 数据迁移方法、装置、设备以及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109117416B (zh) | 2020-05-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109117416A (zh) | 插槽间的数据迁移或交换的方法和装置以及多处理器系统 | |
US5535116A (en) | Flat cache-only multi-processor architectures | |
US7774551B2 (en) | Hierarchical cache coherence directory structure | |
US10402327B2 (en) | Network-aware cache coherence protocol enhancement | |
US10572150B2 (en) | Memory network with memory nodes controlling memory accesses in the memory network | |
US6826651B2 (en) | State-based allocation and replacement for improved hit ratio in directory caches | |
KR102442079B1 (ko) | 메모리에서의 처리를 위한 캐시 일관성 | |
US10169232B2 (en) | Associative and atomic write-back caching system and method for storage subsystem | |
CN105740164B (zh) | 支持缓存一致性的多核处理器、读写方法、装置及设备 | |
US10055349B2 (en) | Cache coherence protocol | |
US20040260879A1 (en) | Method and system for exclusive two-level caching in a chip-multiprocessor | |
US20170192886A1 (en) | Cache management for nonvolatile main memory | |
CN110221779B (zh) | 分布式持久性内存存储系统的构建方法 | |
JP3866447B2 (ja) | マルチプロセッサ・ノードデータ処理システムに使用するディレクトリエントリ割当てシステム及び方法 | |
US7925857B2 (en) | Method for increasing cache directory associativity classes via efficient tag bit reclaimation | |
US11481328B2 (en) | Using a directory-based cache coherence system to regulate snooping | |
US20120124297A1 (en) | Coherence domain support for multi-tenant environment | |
US7117312B1 (en) | Mechanism and method employing a plurality of hash functions for cache snoop filtering | |
CN111241011B (zh) | 一种分布式持久性内存的全局地址空间管理方法 | |
US11151039B2 (en) | Apparatus and method for maintaining cache coherence data for memory blocks of different size granularities using a snoop filter storage comprising an n-way set associative storage structure | |
US8090914B2 (en) | System and method for creating ordering points | |
JP6343722B2 (ja) | マルチコアシステムにおいてデータ訪問者ディレクトリにアクセスするための方法及びデバイス | |
US20230100746A1 (en) | Multi-level partitioned snoop filter | |
US20240095179A1 (en) | Data processing system and memory management method of data processing system | |
CN115357593A (zh) | 数据传输方法及装置、存储介质及电子设备 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: 9th Floor, Building C, Gui'an Center, Plot ZD-64, Big Data Science and Technology Innovation City, Gui'an New Area, Guiyang City, Guizhou Province, 550003 (No. 2 on the south side) Patentee after: Guizhou Huaxin Semiconductor Technology Co.,Ltd. Address before: 2nd Floor, Sterling Office Building, Intersection of Qianzhong Avenue and Jinma Avenue, Gui'an New District, Guiyang City, Guizhou Province, 550081 Patentee before: GUIZHOU HUAXINTONG SEMICONDUCTOR TECHNOLOGY Co.,Ltd. |
|
CP03 | Change of name, title or address |