首页 / 专利库 / 电脑零配件 / 中央处理器 / 一种内存数据的迁移方法和节点控制器

一种内存数据的迁移方法和节点控制器

阅读:1027发布:2020-08-23

专利汇可以提供一种内存数据的迁移方法和节点控制器专利检索,专利查询,专利分析的服务。并且本 发明 实施例 公开了一种内存数据的迁移方法和 节点 控制器 ,涉及通信技术领域,能够实现跨QPI域的内存数据的迁移。具体方案为:NC向第一CPU发送第一指示消息,第一指示消息用于指示第一CPU读取第一地址中的内存数据;NC接收第一CPU发送的第一数据,第一数据为第一地址中的内存数据;NC向第一CPU发送第二指示消息,第二指示消息用于指示第一CPU将第一数据写回第一地址;NC根据预先建立的镜像关系,确定与第一地址对应的第二地址;NC向第二CPU发送第三指示消息,第三指示消息用于指示第二CPU将第一数据写入第二地址。,下面是一种内存数据的迁移方法和节点控制器专利的具体信息内容。

1.一种内存数据的迁移方法,其特征在于,包括:
节点控制器NC向第一中央处理器CPU发送第一指示消息,所述第一指示消息用于指示所述第一CPU读取第一地址中的内存数据;所述第一地址为主用内存的任意一个地址;所述NC分别与所述第一CPU和第二CPU通信,所述第一CPU和所述第二CPU属于不同的快速通道互联QPI域,所述第一CPU与所述主用内存连接,所述第二CPU与备用内存连接;其中,通过QPI总线相互连接的多个CPU构成一个QPI域;
所述NC接收所述第一CPU发送的第一数据,所述第一数据为所述第一地址中的内存数据;
所述NC向所述第一CPU发送第二指示消息,所述第二指示消息用于指示所述第一CPU将所述第一数据写回所述第一地址;
所述NC根据预先建立的镜像关系,确定与所述第一地址对应的第二地址,所述第二地址为所述备用内存的一个地址;所述镜像关系为所述主用内存的地址与所述备用内存的地址之间的对应关系;
所述NC向所述第二CPU发送第三指示消息,所述第三指示消息用于指示所述第二CPU将所述第一数据写入所述第二地址。
2.根据权利要求1所述的方法,其特征在于,所述节点控制器NC向第一中央处理器CPU发送第一指示消息包括:
当所述NC接收到所述第一CPU发送的对所述第一地址的读请求后,向所述第一CPU发送所述第一指示消息;
所述NC向所述第一CPU发送第二指示消息包括:
当所述NC接收到所述第一CPU发送的对所述第一地址的写请求后,向所述第一CPU发送所述第二指示消息。
3.根据权利要求1所述的方法,其特征在于,所述节点控制器NC向第一中央处理器CPU发送第一指示消息包括:
所述NC获取所述第一地址;
所述NC向所述第一CPU发送所述第一指示消息。
4.根据权利要求1-3中任一项所述的方法,其特征在于,所述方法还包括:
所述NC接收第三CPU发送的对第三地址的写请求;所述对第三地址的写请求用于请求向所述第三地址中写入第二数据;所述第三CPU为所述第一CPU,或者,所述第三CPU为所述第一CPU所在的QPI域内除所述第一CPU之外的任意一个CPU;所述第三地址为所述主用内存的任意一个地址;
所述NC向所述第一CPU发送第四指示消息,所述第四指示消息用于指示所述第一CPU将所述第二数据写入所述第三地址;
所述NC根据所述镜像关系,确定与所述第三地址对应的第四地址,所述第四地址为所述备用内存的一个地址;
所述NC向所述第二CPU发送第五指示消息,所述第五指示消息用于指示所述第二CPU将所述第二数据写入所述第四地址。
5.根据权利要求1-3中任一项所述的方法,其特征在于,在所述节点控制器NC向第一中央处理器CPU发送第一指示消息之前,所述方法还包括:
所述NC建立所述镜像关系。
6.根据权利要求5所述的方法,其特征在于,在所述NC建立所述镜像关系之后,在所述节点控制器NC向第一中央处理器CPU发送第一指示消息之前,所述方法还包括:
所述NC建立所述主用内存的地址与所述第一CPU之间的对应关系,以及所述备用内存的地址与所述第二CPU之间的对应关系。
7.根据权利要求6所述的方法,其特征在于,所述NC建立所述主用内存的地址与所述第一CPU之间的对应关系,以及所述备用内存的地址与所述第二CPU之间的对应关系包括:
所述NC将所述第一CPU所在的QPI域内的每一个CPU的源地址译码器SAD对所述主用内存的地址的译码结果修改为所述NC的节点标识NID;所述NC将所述NC的SAD对所述主用内存的地址的译码结果修改为所述第一CPU的NID,将所述NC的SAD对所述备用内存的地址的译码结果修改为所述第二CPU的NID。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
当所述主用内存的地址中的所有内存数据都被写入与所述主用内存的地址对应的备用内存的地址后,所述NC将所述NC的SAD对所述主用内存的地址的译码结果与对所述备用内存的地址的译码结果互换。
9.一种节点控制器NC,其特征在于,包括:主本地代理和备本地代理;
所述主本地代理,用于向第一中央处理器CPU发送第一指示消息,所述第一指示消息用于指示所述第一CPU读取第一地址中的内存数据;所述第一地址为主用内存的任意一个地址;所述NC分别与所述第一CPU和第二CPU通信,所述第一CPU和所述第二CPU属于不同的快速通道互联QPI域,所述第一CPU与所述主用内存连接,所述第二CPU与备用内存连接;其中,通过QPI总线相互连接的多个CPU构成一个QPI域;
所述主本地代理,还用于接收所述第一CPU发送的第一数据,所述第一数据为所述第一地址中的内存数据;
所述主本地代理,还用于向所述第一CPU发送第二指示消息,所述第二指示消息用于指示所述第一CPU将所述第一数据写回所述第一地址;
所述主本地代理,还用于根据预先建立的镜像关系,确定与所述第一地址对应的第二地址,并向所述备本地代理发送第三指示消息;所述第三指示消息用于指示将所述第一数据写入所述第二地址,所述第二地址为所述备用内存的一个地址;所述镜像关系为所述主用内存的地址与所述备用内存的地址之间的对应关系;
所述备本地代理,用于向所述第二CPU发送所述第三指示消息,以指示所述第二CPU将所述第一数据写入所述第二地址。
10.根据权利要求9所述的NC,其特征在于,所述NC还包括第一远程代理RP和第二RP;
所述第一RP,用于接收所述第一CPU发送的对所述第一地址的读请求,并向所述主本地代理发送所述对所述第一地址的读请求;
所述主本地代理,具体用于在接收到所述第一RP发送的所述对所述第一地址的读请求后,向所述第一CPU发送所述第一指示消息;
所述第一RP,还用于接收所述第一CPU发送的对所述第一地址的写请求,并向所述主本地代理发送所述对所述第一地址的写请求;
所述主本地代理,还具体用于在接收到所述第一RP发送的所述对所述第一地址的写请求后,向所述第一CPU发送所述第二指示消息;
所述第二RP,用于接收所述第二CPU发送的读写请求。
11.根据权利要求9所述的NC,其特征在于,所述NC还包括第一远程代理RP、第二RP和引擎BE;所述BE预先保存有所述主用内存的地址;
所述BE,用于从所述主用内存的地址中确定所述第一地址,并向所述第一RP发送对所述第一地址的读请求;
所述第一RP,用于接收所述BE发送的所述对所述第一地址的读请求,并向所述主本地代理发送所述对所述第一地址的读请求;
所述主本地代理,具体用于在接收到所述第一RP发送的所述对所述第一地址的读请求后,向所述第一CPU发送所述第一指示消息;
所述BE,还用于向所述第一RP发送对所述第一地址的写请求;
所述第一RP,还用于接收所述BE发送的所述对所述第一地址的写请求,并向所述主本地代理发送所述对所述第一地址的写请求;
所述主本地代理,还具体用于在接收到所述第一RP发送的所述对所述第一地址的写请求后,向所述第一CPU发送所述第二指示消息;
所述第二RP,用于接收所述第二CPU发送的读写请求。
12.根据权利要求10或11所述的NC,其特征在于,所述第一RP,还用于接收第三CPU发送的对第三地址的写请求,并向所述主本地代理发送所述对所述第三地址的读请求;所述对第三地址的写请求用于请求向所述第三地址中写入第二数据;所述第三CPU为所述第一CPU,或者,所述第三CPU为所述第一CPU所在的QPI域内除所述第一CPU之外的任意一个CPU;
所述第三地址为所述主用内存的任意一个地址;
所述主本地代理,还具体用于在接收到所述第一RP发送的所述对所述第三地址的写请求后,向所述第一CPU发送第四指示消息,所述第四指示消息用于指示所述第一CPU将所述第二数据写入所述第三地址;
所述主本地代理,还用于根据所述镜像关系,确定与所述第三地址对应的第四地址,并向所述备本地代理发送第五指示消息;所述第五指示消息用于指示将所述第二数据写入所述第四地址,所述第四地址为所述备用内存的一个地址;
所述备本地代理,用于向所述第二CPU发送所述第五指示消息,以指示所述第二CPU将所述第二数据写入所述第四地址。
13.根据权利要求10或11所述的NC,其特征在于,所述第一RP包括:镜像模块;
所述镜像模块,用于在所述主本地代理向所述第一CPU发送所述第一指示消息之前,建立所述镜像关系。
14.根据权利要求13所述的NC,其特征在于,所述NC还包括:处理单元;
所述处理单元,用于在所述镜像模块建立所述镜像关系之后,在所述主本地代理向所述第一CPU发送所述第一指示消息之前,建立所述主用内存的地址与所述第一CPU之间的对应关系,以及所述备用内存的地址与所述第二CPU之间的对应关系。
15.根据权利要求14所述的NC,其特征在于,所述处理单元,具体用于在所述镜像模块建立所述镜像关系之后,在所述主本地代理向所述第一CPU发送所述第一指示消息之前,将所述第一CPU所在的QPI域内的每一个CPU的源地址译码器SAD对所述主用内存的地址的译码结果修改为所述NC的节点标识NID;将所述NC的SAD对所述主用内存的地址的译码结果修改为所述第一CPU的NID,将所述NC的SAD对所述备用内存的地址的译码结果修改为所述第二CPU的NID。
16.根据权利要求15所述的NC,其特征在于,所述处理单元,还用于当所述主用内存的地址中的所有内存数据都被写入与所述主用内存的地址对应的备用内存的地址后,将所述NC的SAD对所述主用内存的地址的译码结果与对所述备用内存的地址的译码结果互换。

说明书全文

一种内存数据的迁移方法和节点控制器

技术领域

[0001] 本发明涉及通信技术领域,尤其涉及一种内存数据的迁移方法和节点控制器(英文:Node Controller,缩写:NC)。

背景技术

[0002] 内存数据的迁移是指将待迁移的内存数据从其所在的内存(以下称为主用内存)拷贝到备用内存中。当拷贝完成后,用备用内存替换主用内存,后续发往主用内存的访问请求都被发往备用内存。
[0003] 目前,采用快速通道互联(英文:Quick Path Interconnect,缩写:QPI)技术可以实现中央处理器(英文:Central Processing Unit,缩写:CPU)间的高速互连,并在CPU中集成内存控制器,使得CPU可以直接访问内存。采用QPI技术,相互连接的CPU可以构成一个QPI域,图1为8个相互连接的CPU构成的QPI域的示意图,各个CPU之间通过私有协议发送消息。在一个QPI域内,可以将一个CPU所连接的内存(即主用内存)中的内存数据迁移至另一个CPU所连接的内存(即备用内存)。如图2所示,可以将内存0中的内存数据迁移至内存1。具体的迁移过程为:CPU0获取内存1所连接的CPU的节点标识(即CPU1的节点标识);CPU0向内存0发起读请求,并将从内存0中读取到的内存数据写回内存0,同时,CPU0根据CPU1的标识,向CPU1发送写请求,以指示CPU1将该内存数据写入内存1。
[0004] 但是,上述方法存在如下问题:一个QPI域内最多只能包括8个CPU,若要实现更多CPU的互连,则需要引入NC,NC可以连接不同的QPI域,参见图3。若要实现跨QPI域的内存数据的迁移,例如,将CPU0所连接的内存(图3中未画出各个CPU所连接的内存)中的内存数据迁移至CPU8所连接的内存,则CPU0需要通过NC向CPU8发送写请求,但是,由于CPU之间通过私有协议发送消息,因此,NC无法识别该写请求是发往哪个CPU的,从而无法实现跨QPI域的内存数据的迁移。

发明内容

[0005] 本发明的实施例提供一种内存数据的迁移方法和节点控制器,能够实现跨QPI域的内存数据的迁移。
[0006] 为达到上述目的,本发明的实施例采用如下技术方案:
[0007] 本发明实施例的第一方面,提供一种内存数据的迁移方法,包括:
[0008] 节点控制器NC向第一中央处理器CPU发送第一指示消息,所述第一指示消息用于指示所述第一CPU读取第一地址中的内存数据;所述第一地址为主用内存的任意一个地址;所述NC分别与所述第一CPU和第二CPU通信,所述第一CPU和所述第二CPU属于不同的快速通道互联QPI域,所述第一CPU与所述主用内存连接,所述第二CPU与备用内存连接;其中,通过QPI总线相互连接的多个CPU构成一个QPI域;
[0009] 所述NC接收所述第一CPU发送的第一数据,所述第一数据为所述第一地址中的内存数据;
[0010] 所述NC向所述第一CPU发送第二指示消息,所述第二指示消息用于指示所述第一CPU将所述第一数据写回所述第一地址;
[0011] 所述NC根据预先建立的镜像关系,确定与所述第一地址对应的第二地址,所述第二地址为所述备用内存的一个地址;所述镜像关系为所述主用内存的地址与所述备用内存的地址之间的对应关系;
[0012] 所述NC向所述第二CPU发送第三指示消息,所述第三指示消息用于指示所述第二CPU将所述第一数据写入所述第二地址。
[0013] 结合第一方面,在第一方面的第一种可能的实现方式中,所述节点控制器NC向第一中央处理器CPU发送第一指示消息包括:
[0014] 当所述NC接收到所述第一CPU发送的对所述第一地址的读请求后,向所述第一CPU发送所述第一指示消息;
[0015] 所述NC向所述第一CPU发送第二指示消息包括:
[0016] 当所述NC接收到所述第一CPU发送的对所述第一地址的写请求后,向所述第一CPU发送所述第二指示消息。
[0017] 结合第一方面,在第一方面的第二种可能的实现方式中,所述节点控制器NC向第一中央处理器CPU发送第一指示消息包括:
[0018] 所述NC获取所述第一地址;
[0019] 所述NC向所述第一CPU发送所述第一指示消息。
[0020] 结合第一方面和上述可能的实现方式,在第一方面的第三种可能的实现方式中,所述方法还包括:
[0021] 所述NC接收第三CPU发送的对第三地址的写请求;所述第三写请求用于请求向所述第三地址中写入第二数据;所述第三CPU为所述第一CPU,或者,所述第三CPU为所述第一CPU所在的QPI域内除所述第一CPU之外的任意一个CPU;所述第三地址为所述主用内存的任意一个地址;
[0022] 所述NC向所述第一CPU发送第四指示消息,所述第四指示消息用于指示所述第一CPU将所述第二数据写入所述第三地址;
[0023] 所述NC根据所述镜像关系,确定与所述第三地址对应的第四地址,所述第四地址为所述备用内存的一个地址;
[0024] 所述NC向所述第二CPU发送第五指示消息,所述第五指示消息用于指示所述第二CPU将所述第二数据写入所述第四地址。
[0025] 结合第一方面和上述可能的实现方式,在第一方面的第四种可能的实现方式中,在所述节点控制器NC向第一中央处理器CPU发送第一指示消息之前,所述方法还包括:
[0026] 所述NC建立所述镜像关系。
[0027] 结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,在所述NC建立所述镜像关系之后,在所述节点控制器NC向第一中央处理器CPU发送第一指示消息之前,所述方法还包括:
[0028] 所述NC建立所述主用内存的地址与所述第一CPU之间的对应关系,以及所述备用内存的地址与所述第二CPU之间的对应关系。
[0029] 结合第一方面的第五种可能的实现方式,在第一方面的第六种可能的实现方式中,所述NC建立所述主用内存的地址与所述第一CPU之间的对应关系,以及所述备用内存的地址与所述第二CPU之间的对应关系包括:
[0030] 所述NC将所述第一CPU所在的QPI域内的每一个CPU的源地址译码器SAD对所述主用内存的地址的译码结果修改为所述NC的节点标识NID;所述NC将所述NC的SAD对所述主用内存的地址的译码结果修改为所述第一CPU的NID,将所述NC的SAD对所述备用内存的地址的译码结果修改为所述第二CPU的NID。
[0031] 结合第一方面的第六种可能的实现方式,在第一方面的第七种可能的实现方式中,所述方法还包括:
[0032] 当所述主用内存的地址中的所有内存数据都被写入与所述主用内存的地址对应的备用内存的地址后,所述NC将所述NC的SAD对所述主用内存的地址的译码结果与对所述备用内存的地址的译码结果互换。
[0033] 本发明实施例的第二方面,提供一种节点控制器NC,包括:主本地代理和备本地代理;
[0034] 所述主本地代理,用于向第一中央处理器CPU发送第一指示消息,所述第一指示消息用于指示所述第一CPU读取第一地址中的内存数据;所述第一地址为主用内存的任意一个地址;所述NC分别与所述第一CPU和第二CPU通信,所述第一CPU和所述第二CPU属于不同的快速通道互联QPI域,所述第一CPU与所述主用内存连接,所述第二CPU与备用内存连接;其中,通过QPI总线相互连接的多个CPU构成一个QPI域;
[0035] 所述主本地代理,还用于接收所述第一CPU发送的第一数据,所述第一数据为所述第一地址中的内存数据;
[0036] 所述主本地代理,还用于向所述第一CPU发送第二指示消息,所述第二指示消息用于指示所述第一CPU将所述第一数据写回所述第一地址;
[0037] 所述主本地代理,还用于根据预先建立的镜像关系,确定与所述第一地址对应的第二地址,并向所述备本地代理发送第三指示消息;所述第三指示消息用于指示将所述第一数据写入所述第二地址,所述第二地址为所述备用内存的一个地址;所述镜像关系为所述主用内存的地址与所述备用内存的地址之间的对应关系;
[0038] 所述备本地代理,用于向所述第二CPU发送所述第三指示消息,以指示所述第二CPU将所述第一数据写入所述第二地址。
[0039] 结合第二方面,在第二方面的第一种可能的实现方式中,所述NC还包括第一远程代理RP和第二RP;
[0040] 所述第一RP,用于接收所述第一CPU发送的对所述第一地址的读请求,并向所述主本地代理发送所述对所述第一地址的读请求;
[0041] 所述主本地代理,具体用于在接收到所述第一RP发送的所述对所述第一地址的读请求后,向所述第一CPU发送所述第一指示消息;
[0042] 所述第一RP,还用于接收所述第一CPU发送的对所述第一地址的写请求,并向所述主本地代理发送所述对所述第一地址的写请求;
[0043] 所述主本地代理,还具体用于在接收到所述第一RP发送的所述对所述第一地址的写请求后,向所述第一CPU发送所述第二指示消息;
[0044] 所述第二RP,用于接收所述第二CPU发送的读写请求。
[0045] 结合第二方面,在第二方面的第二种可能的实现方式中,所述NC还包括第一远程代理RP、第二RP和引擎BE;所述BE预先保存有所述主用内存的地址;
[0046] 所述BE,用于从所述主用内存的地址中确定所述第一地址,并向所述第一RP发送对所述第一地址的读请求;
[0047] 所述第一RP,用于接收所述BE发送的所述对所述第一地址的读请求,并向所述主本地代理发送所述对所述第一地址的读请求;
[0048] 所述主本地代理,具体用于在接收到所述第一RP发送的所述对所述第一地址的读请求后,向所述第一CPU发送所述第一指示消息;
[0049] 所述BE,还用于向所述第一RP发送对所述第一地址的写请求;
[0050] 所述第一RP,还用于接收所述BE发送的所述对所述第一地址的写请求,并向所述主本地代理发送所述对所述第一地址的写请求;
[0051] 所述主本地代理,还具体用于在接收到所述第一RP发送的所述对所述第一地址的写请求后,向所述第一CPU发送所述第二指示消息;
[0052] 所述第二RP,用于接收所述第二CPU发送的读写请求。
[0053] 结合第二方面的第一种可能的实现方式或第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述第一RP,还用于接收第三CPU发送的对第三地址的写请求,并向所述主本地代理发送所述对所述第三地址的读请求;所述第三写请求用于请求向所述第三地址中写入第二数据;所述第三CPU为所述第一CPU,或者,所述第三CPU为所述第一CPU所在的QPI域内除所述第一CPU之外的任意一个CPU;所述第三地址为所述主用内存的任意一个地址;
[0054] 所述主本地代理,还具体用于在接收到所述第一RP发送的所述对所述第三地址的写请求后,向所述第一CPU发送第四指示消息,所述第四指示消息用于指示所述第一CPU将所述第二数据写入所述第三地址;
[0055] 所述主本地代理,还用于根据所述镜像关系,确定与所述第三地址对应的第四地址,并向所述备本地代理发送第五指示消息;所述第五指示消息用于指示将所述第二数据写入所述第四地址,所述第四地址为所述备用内存的一个地址;
[0056] 所述备本地代理,用于向所述第二CPU发送所述第五指示消息,以指示所述第二CPU将所述第二数据写入所述第四地址。
[0057] 结合第二方面的第一种可能的实现方式或第二方面的第二种可能的实现方式,在第二方面的第四种可能的实现方式中,所述第一RP包括:镜像模块;
[0058] 所述镜像模块,用于在所述主本地代理向所述第一CPU发送所述第一指示消息之前,建立所述镜像关系。
[0059] 结合第二方面的第四种可能的实现方式,在第二方面的第五种可能的实现方式中,所述NC还包括:处理单元;
[0060] 所述处理单元,用于在所述镜像模块建立所述镜像关系之后,在所述主本地代理向所述第一CPU发送所述第一指示消息之前,建立所述主用内存的地址与所述第一CPU之间的对应关系,以及所述备用内存的地址与所述第二CPU之间的对应关系。
[0061] 结合第二方面的第五种可能的实现方式,在第二方面的第六种可能的实现方式中,所述处理单元,具体用于在所述镜像模块建立所述镜像关系之后,在所述主本地代理向所述第一CPU发送所述第一指示消息之前,将所述第一CPU所在的QPI域内的每一个CPU的源地址译码器SAD对所述主用内存的地址的译码结果修改为所述NC的节点标识NID;将所述NC的SAD对所述主用内存的地址的译码结果修改为所述第一CPU的NID,将所述NC的SAD对所述备用内存的地址的译码结果修改为所述第二CPU的NID。
[0062] 结合第二方面的第六种可能的实现方式,在第二方面的第七种可能的实现方式中,所述处理单元,还用于当所述主用内存的地址中的所有内存数据都被写入与所述主用内存的地址对应的备用内存的地址后,将所述NC的SAD对所述主用内存的地址的译码结果与对所述备用内存的地址的译码结果互换。
[0063] 本发明实施例提供的内存数据的迁移方法和节点控制器,NC向第一CPU发送第一指示消息,以获取第一地址中的内存数据,即第一数据;NC向第一CPU发送第二指示消息,以指示第一CPU将第一数据写回第一地址;NC向第二CPU发送第三指示消息,以指示第二CPU将第一数据写入第二地址,第二地址与第一地址为镜像关系。
[0064] 与现有技术中由一个域内的CPU采用私有协议通过NC向另一个域内的CPU发起读请求,导致该读请求无法被NC识别,从而无法实现跨QPI域的内存迁移相比,采用本发明实施例的方案,由NC直接向第一CPU和第二CPU发送指示消息来实现内存数据的迁移,NC不会接收到CPU发送的由私有协议产生的消息,因此,能够实现跨QPI域的内存数据的迁移。附图说明
[0065] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0066] 图1为现有技术提供的由8个相互连接的CPU构成的QPI域的示意图;
[0067] 图2为现有技术提供的CPU与内存之间的连接关系的示意图;
[0068] 图3为现有技术提供的一种NC与CPU之间的连接关系的示意图;
[0069] 图4为现有技术提供的一种CPU的结构示意图;
[0070] 图5为现有技术提供的一种NC的结构示意图;
[0071] 图6为本发明实施例提供的一种内存数据的迁移方法的流程图
[0072] 图7为本发明实施例提供的一种NC与CPU之间的连接关系的示意图;
[0073] 图8为本发明实施例提供的另一种内存数据的迁移方法的流程图;
[0074] 图9为本发明实施例提供的一种NC的结构示意图;
[0075] 图10为本发明实施例提供的另一种NC的结构示意图;
[0076] 图11为本发明实施例提供的另一种NC的结构示意图;
[0077] 图12为本发明实施例提供的另一种内存数据的迁移方法的流程图;
[0078] 图13为本发明实施例提供的另一种NC的结构示意图;
[0079] 图14为本发明实施例提供的另一种NC的结构示意图;
[0080] 图15为本发明实施例提供的另一种NC的结构示意图。

具体实施方式

[0081] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0082] 本文中术语“系统”和“网络”在本文中常被可互换使用。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
[0083] 为了方便理解本发明实施例,首先在此介绍CPU和NC的结构。
[0084] 如图4所示,CPU主要包括内核、最后一级缓存(英文:Last Layer Cache,缩写:LLC)、缓存代理(英文:Cache Agent,缩写:CA)、QPI代理、本地代理(英文:Home Agent,缩写:HA)和内存控制器(英文:Memory Controller,缩写:MC)。其中,LLC为CPU中最底层的缓存;CA与LLC连接,HA与MC连接,CA和HA通过执行QPI协议可以确保缓存一致性;QPI代理,用于与其他CPU的QPI代理建立QPI连接,以形成QPI域;MC用于控制与其连接的内存,以及控制内存与CPU之间进行数据交换。
[0085] 如图5所示,NC主要包括:本地代理(英文:Local Proxy,缩写:LP)、远程代理(英文:Remote Proxy,缩写:RP)、QPI代理和块引擎(英文:Block Engine,缩写:BE)。其中,LP用于代理与其连接的CPU的HA;RP用于代理与其连接的CPU的CA;QPI代理用于与其他CPU的QPI代理建立QPI连接,或者与其他NC的QPI代理建立QPI连;BE为负载数据搬移的模块。
[0086] 本发明实施例提供一种内存数据的迁移方法,如图6所示,包括:
[0087] S101、NC向第一CPU发送第一指示消息,第一指示消息用于指示第一CPU读取第一地址中的内存数据。
[0088] 如图7所示,NC分别与第一CPU和第二CPU通信,第一CPU和第二CPU属于不同的QPI域,第一CPU与主用内存连接,第二CPU与备用内存连接。第一地址为主用内存的任意一个地址。其中,通过QPI总线相互连接的多个CPU构成一个QPI域。
[0089] S102、NC接收第一CPU发送的第一数据,第一数据为第一地址中的内存数据。
[0090] 其中,第一CPU接收到NC发送的第一指示消息后,可以读取第一地址中的内存数据,即第一数据,并向第一NC发送读取到的第一数据。具体的,第一CPU接收到NC发送的第一指示消息后,第一CPU中的HA通过内存控制器(MC)读取第一数据。NC接收第一CPU发送的第一数据具体为:NC接收第一CPU的HA发送的第一数据。
[0091] S103、NC向第一CPU发送第二指示消息,第二指示消息用于指示第一CPU将第一数据写回第一地址。
[0092] S104、NC根据预先建立的镜像关系,确定与第一地址对应的第二地址。
[0093] 其中,第二地址为备用内存的一个地址。NC中预先保存有该镜像关系,镜像关系为主用内存的地址与备用内存的地址之间的对应关系。示例性的,镜像关系可以表示为表1。
[0094] 表1
[0095]主用内存的地址 备用内存的地址
0x00000000 0x10000000
0x00000001 0x10000001
0x00000010 0x10000010
0x00000011 0x10000011
0x00000100 0x10000100
0x00000101 0x10000101
0x00000110 0x10000110
0x00000111 0x10000111
0x00001000 0x10001000
0x00001001 0x10001001
0x00001010 0x10001010
0x00001011 0x10001011
0x00001100 0x10001100
[0096]0x00001101 0x10001101
0x00001110 0x10001110
0x00001111 0x10001111
[0097] 假设第一地址为0x00000001,则根据镜像关系可以确定出与第一地址对应的第二地址为0x10000001。
[0098] S105、NC向第二CPU发送第三指示消息,第三指示消息用于指示第二CPU将第一数据写入第二地址。
[0099] 这样,第一地址和第二地址中都被写入了第一数据,即第一地址和第二地址中保存了相同的内存数据,相当于将第一地址中的内存数据迁移至第二地址。
[0100] 当NC对主用内存的每一个地址都执行上述操作后,主用内存的地址中的所有内存数据都被写入了备用内存的地址,相当于将主用内存的地址中的所有内存数据迁移至备用内存的地址,完成了内存数据的迁移。
[0101] 本发明实施例提供的内存数据的迁移方法,NC向第一CPU发送第一指示消息,以获取第一地址中的内存数据,即第一数据;NC向第一CPU发送第二指示消息,以指示第一CPU将第一数据写回第一地址;NC向第二CPU发送第三指示消息,以指示第二CPU将第一数据写入第二地址,第二地址与第一地址为镜像关系。
[0102] 与现有技术中由一个域内的CPU采用私有协议通过NC向另一个域内的CPU发起读请求,导致该读请求无法被NC识别,从而无法实现跨QPI域的内存迁移相比,采用本发明实施例的方案,由NC直接向第一CPU和第二CPU发送指示消息来实现内存数据的迁移,NC不会接收到CPU发送的由私有协议产生的消息,因此,能够实现跨QPI域的内存数据的迁移。
[0103] 进一步的,内存数据的迁移可以是CPU触发的,也可以是NC触发的。
[0104] 具体的,当由CPU触发内存数据的迁移时,S101具体为:当NC接收到第一CPU发送的对第一地址的读请求后,向第一CPU发送第一指示消息。S103具体为:当NC接收到第一CPU发送的第一地址的写请求后,向第一CPU发送第二指示消息。当由CPU触发内存数据的迁移时,NC根据镜像关系,向第一CPU发送第二指示消息后,还向第二CPU发送第三指示消息,可以保证主用内存的地址和备用内存的地址中被写入相同的内存数据。
[0105] 具体的,当由NC触发内存数据的迁移时,S101具体为:NC获取第一地址,NC向第一CPU发送第一指示消息。NC可以按照主用内存的地址从小到大的顺序,每次获取主用内存的一个地址,并通过向第一CPU和第二CPU发送指示消息,每次将主用内存的一个地址中的内存数据写回主用内存的地址,并写入备用内存的一个地址。与由CPU触发内存数据的迁移相比,由NC触发内存数据的迁移时,由于NC在CPU外部,因此,不会导致CPU的系统管理中断,不会影响CPU上运行的其他业务,从而可以提高系统性能。
[0106] 进一步的,在内存数据的迁移过程中,主用内存的地址中有可能被写入其他数据,为了保证备用内存的地址中的内存数据和主用内存的地址中的内存数据的一致性,需要向备用内存的地址中写入与主用内存的地址中的内存数据相同的数据。具体的,如图8所示,本发明实施例提供的内存数据的迁移方法还可以包括:
[0107] S106、NC接收第三CPU发送的对第三地址的写请求,第三写请求用于请求向第三地址中写入第二数据。
[0108] 其中,第三CPU为第一CPU,或者,第三CPU为第一CPU所在的QPI域内除第一CPU之外的任意一个CPU;第三地址为主用内存的任意一个地址。
[0109] S107、NC向第一CPU发送第四指示消息,第四指示消息用于指示第一CPU将第二数据写入第三地址。
[0110] S108、NC根据镜像关系,确定与第三地址对应的第四地址,第四地址为备用内存的一个地址。
[0111] S109、NC向第二CPU发送第五指示消息,第五指示消息用于指示第二CPU将第二数据写入第四地址。
[0112] 进一步的,在图6所示的内存数据的迁移方法中,在S101之前,该方法还包括:S100、NC建立镜像关系。
[0113] 进一步的,在S100之后,在S101之前,该方法还包括:NC建立主用内存的地址与第一CPU之间的对应关系,以及备用内存的地址与第二CPU之间的对应关系。
[0114] 其中,NC建立主用内存的地址与第一CPU之间的对应关系,以及备用内存的地址与第二CPU之间的对应关系包括:
[0115] NC将第一CPU所在的QPI域内的每一个CPU的源地址译码器(英文:Source address Decoder,缩写:SAD)对主用内存的地址的译码结果修改为NC的(英文:Node ID,缩写:NID);NC将NC的SAD对主用内存的地址的译码结果修改为第一CPU的NID,将NC的SAD对备用内存的地址的译码结果修改为第二CPU的NID。
[0116] 其中,SAD为将系统地址转换为设备地址的译码器,本实施例中SAD用于将内存地址转换为NID。
[0117] NC将第一CPU所在的QPI域内的每一个CPU的SAD对主用内存的地址的译码结果修改为NC的NID,可以保证第一CPU所在的QPI域内的每一个CPU对主用内存的地址的读写请求都先到达NC,以便于向备用内存的地址中写入与主用内存的地址中的内存数据相同的数据,保证数据的一致性。NC将NC的SAD对主用内存的地址的译码结果修改为第一CPU的NID,将NC的SAD对备用内存的地址的译码结果修改为第二CPU的NID,可以保证NC能够找到主用内存所连接的CPU和备用内存所连接的CPU。
[0118] 进一步的,该方法还包括:
[0119] 当主用内存的地址中的所有内存数据都被写入与主用内存的地址对应的备用内存的地址后,NC将NC的SAD对主用内存的地址的译码结果与对备用内存的地址的译码结果互换。这样,就可以用备用内存替换主用内存进行工作。示例性的,互换前内存地址的译码结果见表2,互换后内存地址的译码结果见表3。
[0120] 表2
[0121]
[0122] 表3
[0123]内存地址 译码结果
0x00000000~0x00001111 第二CPU的NID
0x10000000~0x10001111 第一CPU的NID
[0124] 本发明实施例提供的内存数据的迁移方法,与现有技术中由一个域内的CPU采用私有协议通过NC向另一个域内的CPU发起读请求,导致该读请求无法被NC识别,从而无法实现跨QPI域的内存迁移相比,采用本发明实施例的方案,由NC直接向第一CPU和第二CPU发送指示消息来实现内存数据的迁移,NC不会接收到CPU发送的由私有协议产生的消息,因此,能够实现跨QPI域的内存数据的迁移。当由NC触发内存数据的迁移时,由于NC在CPU外部,因此,不会导致CPU的系统管理中断,不会影响CPU上运行的其他业务,从而可以提高系统性能。此外,当完成内存数据的迁移后,可以将NC的SAD对主用内存的地址的译码结果与对备用内存的地址的译码结果互换,以保证在主用内存出现故障时,备用内存可以代替主用内存进行工作。
[0125] 本发明实施例还提供一种节点控制器(NC),如图9所示,包括:主本地代理21和备本地代理22。
[0126] 主本地代理21,用于向第一CPU发送第一指示消息,第一指示消息用于指示第一CPU读取第一地址中的内存数据;第一地址为主用内存的任意一个地址;NC分别与第一CPU和第二CPU通信,第一CPU和第二CPU属于不同的QPI域,第一CPU与主用内存连接,第二CPU与备用内存连接。其中,通过QPI总线相互连接的多个CPU构成一个QPI域。
[0127] 主本地代理21,还用于接收第一CPU发送的第一数据,第一数据为第一地址中的内存数据。
[0128] 主本地代理21,还用于向第一CPU发送第二指示消息,第二指示消息用于指示第一CPU将第一数据写回第一地址。
[0129] 主本地代理21,还用于根据预先建立的镜像关系,确定与第一地址对应的第二地址,并向备本地代理22发送第三指示消息;第三指示消息用于指示将第一数据写入第二地址,第二地址为备用内存的一个地址;镜像关系为主用内存的地址与备用内存的地址之间的对应关系。
[0130] 备本地代理22,用于向第二CPU发送第三指示消息,以指示第二CPU将第一数据写入第二地址。
[0131] 进一步的,如图10所示,在本发明实施例的第一种情形中,NC还包括第一RP23和第二RP24。
[0132] 第一RP23,用于接收第一CPU发送的对第一地址的读请求,并向主本地代理21发送对第一地址的读请求。
[0133] 主本地代理21,具体用于在接收到第一RP23发送的对第一地址的读请求后,向第一CPU发送第一指示消息。
[0134] 第一RP23,还用于接收第一CPU发送的对第一地址的写请求,并向主本地代理21发送对第一地址的写请求。
[0135] 主本地代理21,还具体用于在接收到第一RP23发送的对第一地址的写请求后,向第一CPU发送第二指示消息。
[0136] 第二RP24,用于接收第二CPU发送的读写请求。
[0137] 进一步的,如图11所示,在本发明实施例的第二种情形中,NC还包括第一RP23、第二RP24和BE25;BE25预先保存有主用内存的地址。
[0138] BE25,用于从主用内存的地址中确定第一地址,并向第一RP23发送对第一地址的读请求。
[0139] 第一RP23,用于接收BE25发送的对第一地址的读请求,并向主本地代理21发送对第一地址的读请求。
[0140] 主本地代理21,具体用于在接收到第一RP23发送的对第一地址的读请求后,向第一CPU发送第一指示消息。
[0141] BE25,还用于向第一RP23发送对第一地址的写请求。
[0142] 第一RP23,还用于接收BE25发送的对第一地址的写请求,并向主本地代理21发送对第一地址的写请求。
[0143] 主本地代理21,还具体用于在接收到第一RP23发送的对第一地址的写请求后,向第一CPU发送第二指示消息。
[0144] 第二RP24,用于接收第二CPU发送的读写请求。
[0145] 具体的,主本地代理21、备本地代理22、第一CPU、第二CPU和第一RP23之间的交互图见图12,图12中具体步骤的描述可以参见上述对主本地代理21、备本地代理22和第一RP23的功能性描述,本实施例这里不再详细赘述。
[0146] 进一步的,第一RP23,还用于接收第三CPU发送的对第三地址的写请求,并向主本地代理21发送对第三地址的读请求;第三写请求用于请求向第三地址中写入第二数据;第三CPU为第一CPU,或者,第三CPU为第一CPU所在的QPI域内除第一CPU之外的任意一个CPU;第三地址为主用内存的任意一个地址。
[0147] 主本地代理21,还具体用于在接收到第一RP23发送的对第三地址的写请求后,向第一CPU发送第四指示消息,第四指示消息用于指示第一CPU将第二数据写入第三地址。
[0148] 主本地代理21,还用于根据镜像关系,确定与第三地址对应的第四地址,并向备本地代理22发送第五指示消息;第五指示消息用于指示将第二数据写入第四地址,第四地址为备用内存的一个地址。
[0149] 备本地代理22,用于向第二CPU发送第五指示消息,以指示第二CPU将第二数据写入第四地址。
[0150] 进一步的,如图13所示,第一RP23包括:镜像模块231。
[0151] 镜像模块231,用于在主本地代理21向第一CPU发送第一指示消息之前,建立镜像关系。
[0152] 进一步的,如图14所示,NC还包括:处理单元26。
[0153] 处理单元26,用于在镜像模块231建立镜像关系之后,在主本地代理21向第一CPU发送第一指示消息之前,建立主用内存的地址与第一CPU之间的对应关系,以及备用内存的地址与第二CPU之间的对应关系。
[0154] 进一步的,处理单元26,具体用于在镜像模块231建立镜像关系之后,在主本地代理21向第一CPU发送第一指示消息之前,将第一CPU所在的QPI域内的每一个CPU的SAD对主用内存的地址的译码结果修改为NC的NID;将NC的SAD对主用内存的地址的译码结果修改为第一CPU的NID,将NC的SAD对备用内存的地址的译码结果修改为第二CPU的NID。
[0155] 进一步的,处理单元26,还用于当主用内存的地址中的所有内存数据都被写入与主用内存的地址对应的备用内存的地址后,将NC的SAD对主用内存的地址的译码结果与对备用内存的地址的译码结果互换。
[0156] 需要说明的是,本发明实施例提供的NC中部分功能模块的具体描述可以参考方法实施例中的对应内容,本实施例这里不再详细赘述。
[0157] 本发明实施例提供的NC,与现有技术中由一个域内的CPU采用私有协议通过NC向另一个域内的CPU发起读请求,导致该读请求无法被NC识别,从而无法实现跨QPI域的内存迁移相比,采用本发明实施例的方案,由NC直接向第一CPU和第二CPU发送指示消息来实现内存数据的迁移,NC不会接收到CPU发送的由私有协议产生的消息,因此,能够实现跨QPI域的内存数据的迁移。
[0158] 本发明实施例还提供一种节点控制器(NC),如图15所示,包括:发送器41、接收器42和处理器43。
[0159] 其中,发送器41、接收器42和处理器43之间通过系统总线连接并完成相互间的通信。为便于表示,图15中仅用一条粗线表示系统总线,但并不表示仅有一根总线。
[0160] 处理器43可以是一个CPU,或者是特定集成电路(英文:application specific integrated circuit,缩写:ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路。
[0161] 发送器41,用于向第一CPU发送第一指示消息,第一指示消息用于指示第一CPU读取第一地址中的内存数据;第一地址为主用内存的任意一个地址;NC分别与第一CPU和第二CPU通信,第一CPU和第二CPU属于不同的QPI域,第一CPU与主用内存连接,第二CPU与备用内存连接。其中,通过QPI总线相互连接的多个CPU构成一个QPI域。
[0162] 接收器42,用于接收第一CPU发送的第一数据,第一数据为第一地址中的内存数据。
[0163] 发送器41,还用于向第一CPU发送第二指示消息,第二指示消息用于指示第一CPU将第一数据写回第一地址。
[0164] 处理器43,用于根据预先建立的镜像关系,确定与第一地址对应的第二地址,第二地址为备用内存的一个地址;镜像关系为主用内存的地址与备用内存的地址之间的对应关系。
[0165] 发送器41,还用于向第二CPU发送第三指示消息,第三指示消息用于指示第二CPU将第一数据写入第二地址。
[0166] 进一步的,发送器41,具体用于当接收器42接收到第一CPU发送的对第一地址的读请求后,向第一CPU发送第一指示消息。
[0167] 发送器41,还具体用于当接收器42接收到第一CPU发送的对第一地址的写请求后,向第一CPU发送第二指示消息。
[0168] 进一步的,处理器43,还用于NC获取第一地址。
[0169] 进一步的,接收器42,还用于接收第三CPU发送的对第三地址的写请求;第三写请求用于请求向第三地址中写入第二数据;第三CPU为第一CPU,或者,第三CPU为第一CPU所在的QPI域内除第一CPU之外的任意一个CPU;第三地址为主用内存的任意一个地址。
[0170] 发送器41,还用于向第一CPU发送第四指示消息,第四指示消息用于指示第一CPU将第二数据写入第三地址。
[0171] 处理器43,还用于根据镜像关系,确定与第三地址对应的第四地址,第四地址为备用内存的一个地址。
[0172] 发送器41,还用于向第二CPU发送第五指示消息,第五指示消息用于指示第二CPU将第二数据写入第四地址。
[0173] 进一步的,处理器43,还用于在发送器41向第一CPU发送第一指示消息之前,建立镜像关系。
[0174] 进一步的,处理器43,还用于在建立镜像关系之后,在发送器41向第一CPU发送第一指示消息之前,建立主用内存的地址与第一CPU之间的对应关系,以及备用内存的地址与第二CPU之间的对应关系。
[0175] 进一步的,处理器43,具体用于在建立镜像关系之后,在发送器41向第一CPU发送第一指示消息之前,将第一CPU所在的QPI域内的每一个CPU的SAD对主用内存的地址的译码结果修改为NC的NID;将NC的SAD对主用内存的地址的译码结果修改为第一CPU的NID,将NC的SAD对备用内存的地址的译码结果修改为第二CPU的NID。
[0176] 进一步的,处理器43,还用于当主用内存的地址中的所有内存数据都被写入与主用内存的地址对应的备用内存的地址后,将NC的SAD对主用内存的地址的译码结果与对备用内存的地址的译码结果互换。
[0177] 需要说明的是,本发明实施例提供的NC中部分功能模块的具体描述可以参考方法实施例中的对应内容,本实施例这里不再详细赘述。
[0178] 本发明实施例提供的NC,与现有技术中由一个域内的CPU采用私有协议通过NC向另一个域内的CPU发起读请求,导致该读请求无法被NC识别,从而无法实现跨QPI域的内存迁移相比,采用本发明实施例的方案,由NC直接向第一CPU和第二CPU发送指示消息来实现内存数据的迁移,NC不会接收到CPU发送的由私有协议产生的消息,因此,能够实现跨QPI域的内存数据的迁移。
[0179] 通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0180] 在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0181] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0182] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0183] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-Only Memory,缩写:ROM)、随机存取存储器(英文:Random Access Memory,缩写:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0184] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈