数据迁移方法、网卡设备、服务器及数据迁移系统

文档序号:1963435 发布日期:2021-12-14 浏览:17次 >En<

阅读说明:本技术 数据迁移方法、网卡设备、服务器及数据迁移系统 (Data migration method, network card device, server and data migration system ) 是由 胡睿 廖恬瑜 于 2021-09-15 设计创作,主要内容包括:本申请实施例提供一种数据迁移方法、网卡设备、服务器及数据迁移系统,应用于计算机技术领域。该方法通过将待迁移数据划分为N个分片数据组,且目标分片数据组包括多个分片数据,当识别到目标分片数据组中的第一目标分片数据对应的数据迁移请求时,为目标分片数据组中的M个分片数据申请在第二内存的存储空间,从而实现将目标分片数据组中的M个分片数据合并,则对合并后的目标分片数据组执行一次数据迁移操作,将目标分片数据组中的M个分片数据从第二内存迁至网络存储设备或从网络存储设备迁移至第二内存,从而节省了第二处理器将待迁移数据迁移完成所需的时间,提高第二处理器的性能。(The embodiment of the application provides a data migration method, a network card device, a server and a data migration system, and is applied to the technical field of computers. According to the method, data to be migrated is divided into N fragmented data groups, a target fragmented data group comprises a plurality of fragmented data, when a data migration request corresponding to first target fragmented data in the target fragmented data group is identified, storage space in a second memory is applied for M fragmented data in the target fragmented data group, so that the M fragmented data in the target fragmented data group are merged, a data migration operation is executed on the merged target fragmented data group, and the M fragmented data in the target fragmented data group is migrated to the network storage device from the second memory or the network storage device from the second memory, so that time for completing migration of the data to be migrated by a second processor is saved, and the performance of the second processor is improved.)

数据迁移方法、网卡设备、服务器及数据迁移系统

技术领域

本申请涉及计算机技术领域,尤其涉及一种数据迁移方法、网卡设备、服务器及数据迁移系统。

背景技术

由于服务器上的应用程序的业务处理复杂度日益提升,为了提升业务处理过程中网络子系统的性能,可在服务器内部署智能网卡,将服务器内的中央处理器(centralprocessing unit,CPU)的部分功能转移至智能网卡,以减轻服务器内CPU的负载。

目前,可通过智能网卡实现在网络存储设备与服务器内设置的内存之间进行数据写入或读出。但是,目前智能网卡实现的数据写入和读出的操作,使得智能网卡内的CPU的处理时长较长,进而导致智能网卡内的CPU的处理性能较差的问题。

发明内容

本申请实施例提供一种数据迁移方法、网卡设备、服务器及数据迁移系统,在通过智能网卡实现的数据写入和读出的操作时,减少智能网卡内的CPU的处理时长,提高智能网卡内的CPU的处理性能。

第一方面,本申请实施例提出一种数据迁移方法,应用于网卡设备,网卡设备部署在服务器中,服务器还包括第一处理器和第一内存,网卡设备包括第二内存;该方法包括:当接收到第一处理器发送的针对待迁移数据的数据迁移指令时,将待迁移数据分为N个分片数据组;N个分片数据组中的目标分片数据组包括M个分片数据,N为正整数,M为大于1的正整数;生成目标分片数据组中的每个分片数据对应的数据迁移请求;当识别到目标分片数据组中的第一目标分片数据对应的数据迁移请求时,根据第一目标分片数据对应的数据迁移请求,为目标分片数据组中的M个分片数据申请在第二内存的存储空间;第一目标分片数据为目标分片数据组中的一个分片数据;执行一次数据迁移操作,将目标分片数据组中的M个分片数据从第一存储单元迁移至第二存储单元;其中,当数据迁移操作为数据写操作时,第一存储单元为第二内存,第二存储单元为网络存储设备;当数据迁移操作为数据读操作时,第一存储单元为网络存储设备,第二存储单元为第二内存;目标分片数据组中的M个分片数据是依次在第一内存与第二内存之间迁移的。

可选的,第一目标分片数据对应的数据迁移请求包括第一标识,当识别到目标分片数据组中的第一目标分片数据对应的数据迁移请求时,根据第一目标分片数据对应的数据迁移请求,为目标分片数据组中的M个分片数据申请在第二内存的存储空间,包括:当识别到目标分片数据组中携带有第一标识的数据迁移请求时,根据携带有第一标识的数据迁移请求,为目标分片数据组中的M个分片数据申请在第二内存的存储空间。

可选的,数据迁移操作为数据写操作;在执行一次数据迁移操作,将目标分片数据组中的M个分片数据从第一存储单元迁移至第二存储单元之前,还包括:根据目标分片数据组中的M个分片数据对应的数据迁移请求,将M个分片数据依次从第一内存迁移至第二内存;确定M个分片数据是否已全部从第一内存迁移至第二内存;执行一次数据迁移操作,将目标分片数据组中的M个分片数据从第一存储单元迁移至第二存储单元,包括:当M个分片数据已全部从第一内存迁移至第二内存时,执行一次数据迁移操作,将目标分片数据中的M个分片数据从第二内存迁移至网络存储设备。

可选的,目标分片数据组中最后一个从第一内存迁移至第二内存的分片数据为第二目标分片数据,第二目标分片数据对应的数据迁移请求包括第二标识;确定M个分片数据是否已全部从第一内存迁移至第二内存,包括:确定目标分片数据组中携带有第二标识的数据迁移请求对应的第二目标分片数据,是否已从第一内存迁移至第二内存。

可选的,数据迁移操作为数据读操作,执行一次数据迁移操作,将目标分片数据组中的M个分片数据从第一存储单元迁移至第二存储单元,包括:确定目标分片数据组中的M个分片数据对应的数据迁移请求是否已全部生成;当全部生成时,执行一次数据迁移操作,将目标分片数据组中的M个分片数据从网络存储设备迁移至第二内存;在执行一次数据迁移操作,将目标分片数据组中的M个分片数据从第一存储单元迁移至第二存储单元之后,还包括:根据目标分片数据组中的M个分片数据对应的数据迁移请求,将M个分片数据依次从第二内存迁移至第一内存。

可选的,目标分片数据组中生成的最后一个数据迁移请求包括第三标识;确定目标分片数据组中的M个分片数据对应的数据迁移请求是否已全部生成,包括:

确定目标分片数据组中携带有第三标识的数据迁移请求是否已生成。

可选的,N为1。

第二方面,本申请实施例提出一种网卡设备,网卡设备部署在服务器中,服务器还包括第一处理器和第一内存,网卡设备包括第二处理器、逻辑芯片和第二内存;逻辑芯片用于当接收到第一处理器发送的针对待迁移数据的数据迁移指令时,将待迁移数据分为N个分片数据组;以及生成目标分片数据组中的每个分片数据对应的数据迁移请求;N个分片数据组中的目标分片数据组包括M个分片数据,N为正整数,M为大于1的正整数;第二处理器用于当识别到目标分片数据组中的第一目标分片数据对应的数据迁移请求时,根据第一目标分片数据对应的数据迁移请求,为目标分片数据组中的M个分片数据申请在第二内存的存储空间;以及执行一次数据迁移操作,将目标分片数据组中的M个分片数据从第一存储单元迁移至第二存储单元;其中,第一目标分片数据为目标分片数据组中的一个分片数据;当数据迁移操作为数据写操作时,第一存储单元为第二内存,第二存储单元为网络存储设备;当数据迁移操作为数据读操作时,第一存储单元为网络存储设备,第二存储单元为第二内存;目标分片数据组中的M个分片数据是依次在第一内存与第二内存之间迁移的。

可选的,第一目标分片数据对应的数据迁移请求包括第一标识;第二处理器,具体用于当识别到目标分片数据组中携带有第一标识的数据迁移请求时,根据携带有第一标识的数据迁移请求,为目标分片数据组中的M个分片数据申请在第二内存的存储空间。

可选的,数据迁移操作为数据写操作;逻辑芯片,还用于根据目标分片数据组中的M个分片数据对应的数据迁移请求,将M个分片数据依次从第一内存迁移至第二内存;第二处理器,还用于确定M个分片数据是否已全部从第一内存迁移至第二内存;以及当M个分片数据已全部从第一内存迁移至第二内存时,执行一次数据迁移操作,将目标分片数据中的M个分片数据从第二内存迁移至网络存储设备。

可选的,目标分片数据组中最后一个从第一内存迁移至第二内存的分片数据为第二目标分片数据,第二目标分片数据对应的数据迁移请求包括第二标识;第二处理器,具体用于确定目标分片数据组中携带有第二标识的数据迁移请求对应的第二目标分片数据,是否已从第一内存迁移至第二内存。

可选的,数据迁移操作为数据读操作;第二处理器,具体用于确定目标分片数据组中的M个分片数据对应的数据迁移请求是否已全部生成;以及当全部生成时,执行一次数据迁移操作,将目标分片数据组中的M个分片数据从网络存储设备迁移至第二内存;逻辑芯片,还用于根据目标分片数据组中的M个分片数据对应的数据迁移请求,将M个分片数据依次从第二内存迁移至第一内存。

可选的,目标分片数据组中生成的最后一个数据迁移请求包括第三标识;第二处理器,具体用于确定目标分片数据组中携带有第三标识的数据迁移请求是否已生成。

可选的,N为1。

第三方面,本申请实施例提出一种服务器,包括第一处理器、第一内存,以及上述的网卡设备。

第四方面,本申请实施例提出一种数据迁移系统,包括网络存储设备以及上述的服务器,网络存储设备与服务器之间通信连接。

在本申请实施例中,通过将待迁移数据划分为N个分片数据组,且N个分片数据组中的目标分片数据组包括多个分片数据,则使得分片数据组的数量N小于待迁移数据中的所有分片数据的数量;并且,生成目标分片数据组中的每个分片数据对应的数据迁移请求,当识别到目标分片数据组中的第一目标分片数据对应的数据迁移请求时,就根据第一目标分片数据对应的数据迁移请求,为目标分片数据组中的M个分片数据申请在第二内存的存储空间,从而实现将目标分片数据组中的M个分片数据在第二内存中实现合并,则对合并后的目标分片数据组执行一次数据迁移操作,将目标分片数据组中的M个分片数据从第二内存迁至网络存储设备或从网络存储设备迁移至第二内存。因此,针对待迁移数据中的N个分片数据组,需要执行N次数据迁移操作,将待迁移数据包括的所有分片数据分N次写入网络存储设备或从网络存储设备中读出,从而减少了第二处理器的分发处理过程和调用tcp协议栈的次数,节省了第二处理器将待迁移数据迁移完成所需的时间,提高了第二处理器的处理性能。

附图说明

图1为相关技术中的服务器实现待迁移数据的数据写操作的交互图;

图2为相关技术中的服务器实现待迁移数据的数据读操作的交互图;

图3为本申请实施例提供的安装有网卡设备的服务器的硬件结构示意图;

图4为本申请实施例提供的一种数据迁移方法的流程图;

图5为本申请实施例提供的待迁移数据的数据写操作的流程图;

图6为本申请实施例提供的服务器实现待迁移数据的数据写操作的具体交互图;

图7为本申请实施例提供的virtio数据结构的示意图;

图8为本申请实施例提供的待迁移数据的数据读操作的流程图;

图9为本申请实施例提供的服务器实现待迁移数据的数据读操作的具体交互图;

图10为本申请实施例提供的一种数据迁移系统的结构示意图。

具体实施方式

为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。例如,第一芯片和第二芯片仅仅是为了区分不同的芯片,并不对其先后顺序进行限定。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。

需要说明的是,本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。

本申请实施例中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。

在服务器的使用过程中,往往会产生大量的数据,为了减轻服务器的存储压力,可将服务器内的第一内存中存储的待迁移数据备份到网络存储设备,并清除第一内存中的待迁移数据;若后续需要使用网络存储设备内的待迁移数据,再将待迁移数据从网络存储设备读取出来,并存储至服务器内的第一内存中。

为了减轻服务器内的CPU处理网络传输的负载,可在服务器内部署网卡设备,基于智能网卡实现在网络存储设备与服务器内设置的第一内存之间进行数据的写入或读出。该网卡设备也可称为智能网卡,智能网卡可以将消耗服务器的CPU处理能力的网络协议解析处理及频繁的I/O(写入/读出)工作转移到智能网卡上,在不改变服务器应用程序实现的前提下,极大提升服务器应用程序的处理能力。

在相关技术中,可将服务器内的CPU称为第一处理器,将服务器内的内存称为第一内存,服务器内部署的网卡设备内也会部署CPU、内存和逻辑芯片,将网卡设备内的CPU称为第二处理器,将网卡设备内的内存称为第二内存。其中,第二处理器包括逻辑驱动模块和上层软件模块,逻辑驱动模块指的是第二处理器中位于底层与逻辑芯片进行交互的硬件逻辑驱动,上层软件模块指的是位于操作系统架构中的上层应用程序,其用于与网络存储设备进行交互。

如图1所示,当网卡设备需要将服务器的第一内存中的待迁移数据迁移至网络存储设备时,第一处理器首先执行S101,加载virtio驱动程序,将第一内存中存储的待迁移数据转换为virtio数据结构;然后,第一处理器执行S102,向逻辑芯片发送数据写指令;逻辑芯片在接收到第一处理器发送的数据写指令后,逻辑芯片执行S103,从第一内存中读取virtio数据结构中的描述符链,根据描述符链中的每个描述符,生成待迁移数据包括的每个分片数据对应的数据写请求;然后,逻辑芯片执行S104,将每个分片数据对应的数据写请求依次写入到第二内存中;第二处理器中的逻辑驱动模块执行S105,从第二内存中依次读取数据写请求,并根据该数据写请求为其对应的分片数据申请后续存储在第二内存中的存储空间;接着,逻辑驱动模块执行S106,向逻辑芯片发送该分片数据需要从第一内存中迁移至第二内存的通知消息;然后,逻辑芯片执行S107,将分片数据从第一内存中迁移至第二内存;逻辑芯片在将分片数据从第一内存中迁移至第二内存之后,逻辑芯片执行S108,向逻辑驱动模块发送该分片数据已迁移至第二内存的通知消息;则辑驱动模块执行S109,将该分片数据已迁移至第二内存的通知消息转发至第二处理器中的上层软件模块。

第二处理器中的上层软件模块执行S110,将该分片数据的写操作请求(即写入网络存储设备的写操作请求),按照该分片数据后续需要存储在网络存储设备的位置分发到不同的处理模块;上层软件模块执行S111,调用linux内核的传输控制协议(transmissioncontrol protocol,tcp)协议栈,将第二内存中的分片数据迁移至网络存储设备;网络存储设备在接收到该分片数据之后,会向上层软件模块返回应答消息,以提示网络存储设备已接收到该分片数据,则上层软件模块会执行S112,向逻辑驱动模块发送网络存储设备返回的应答消息。

当逻辑驱动模块确定接收到待迁移数据中的最后一个分片数据已写入网络存储设备的应答消息时,逻辑驱动模块执行S113,向逻辑芯片发送待迁移数据包括的所有分片数据均已迁移至网络存储设备的通知消息;逻辑芯片执行S114,将待迁移数据包括的所有分片数据均已迁移至网络存储设备的通知消息写入第一内存;当第一处理器读取到第一内存中的所有分片数据均已迁移至网络存储设备的通知消息时,第一处理器执行S115,释放资源,待迁移数据的整个数据写操作完成。

需要说明的是,S104至S112的过程均针对待迁移数据中的一个分片数据,也就是说,当待迁移数据包括有X个分片数据时,需要依次执行X次的S104至S112,当逻辑驱动模块接收到待迁移数据中的第X个分片数据对应的应答消息时,才执行S113以及后续的操作。

如图2所示,当网卡设备需要将网络存储设备中的待迁移数据迁移至服务器的第一内存时,第一处理器首先执行S201,加载virtio驱动程序,在第一内存中生成virtio数据结构;然后,第一处理器执行S202,向逻辑芯片发送数据读指令;逻辑芯片在接收到第一处理器发送的数据读指令后,逻辑芯片执行S203,从第一内存中读取virtio数据结构中的描述符链,根据描述符链中的每个描述符,生成待迁移数据包括的每个分片数据对应的数据读请求;然后,逻辑芯片执行204,将每个分片数据对应的数据读请求写入到第二内存中;第二处理器中的逻辑驱动模块执行S205,从第二内存中读取数据读请求,并根据该数据读请求为其对应的分片数据申请后续存储在第二内存中的存储空间;然后,逻辑驱动模块执行S206,向第二处理器中的上层软件模块发送该分片数据需要从网络存储设备迁移至第二内存的通知消息。

第二处理器中的上层软件模块在接收到逻辑驱动模块发送的分片数据需要迁移至第二内存的通知消息后,上层软件模块执行S207,将该分片数据的读操作请求(即从网络存储设备读取的读操作请求),按照该分片数据在网络存储设备的存储位置分发到不同的处理模块;上层软件模块执行S208,调用linux内核的tcp协议栈,将网络存储设备中的分片数据迁移至第二内存;网络存储设备在将分片数据发送至服务器之后,会向上层软件模块返回应答消息,以提示网络存储设备已发送该分片数据,则上层软件模块会执行S209,向逻辑驱动模块发送网络存储设备返回的应答消息;然后,逻辑驱动模块执行S210,向逻辑芯片发送需要将分片数据从第二内存迁移至第一内存的通知消息;然后,逻辑芯片执行S211,将分片数据从第二内存迁移至第一内存;逻辑芯片在将分片数据从第二内存迁移至第一内存之后,逻辑芯片执行S212,向逻辑驱动模块发送该分片数据已迁移至第一内存的通知消息。

当逻辑驱动模块确定接收到待迁移数据中的最后一个分片数据已迁移至第一内存的通知消息时,逻辑驱动模块执行S213,向逻辑芯片发送待迁移数据包括的所有分片数据均已迁移至第一内存的通知消息;逻辑芯片执行S214,将待迁移数据包括的所有分片数据均已迁移至第一内存的通知消息写入第一内存;当第一处理器读取到第一内存中的所有分片数据均已迁移至第一内存的通知消息时,第一处理器执行S215,释放资源,待迁移数据的整个数据读操作完成。

需要说明的是,S204至S212的过程均针对待迁移数据中的一个分片数据,也就是说,当待迁移数据包括有X个分片数据时,需要依次执行X次的S204至S212,当逻辑驱动模块确定接收到待迁移数据中的第X个分片数据已迁移至第一内存的通知消息时,才执行S213以及后续的操作。

因此,可以看出,针对数据写操作和数据读操作,待迁移数据中的每一个分片数据均需要执行一次数据写操作的分发处理过程以及需要调用一次内核态的tcp协议栈,当待迁移数据包括有X个分片数据时,若需要将待迁移数据中的所有分片数据迁移完成,则需要执行X次数据写操作的分发处理过程以及调用X次内核态的tcp协议栈。由于第二处理器的每一次的分发处理过程和每一次调用tcp协议栈的过程均会消耗第二处理器的时间,则多次分发处理过程和多次调用tcp协议栈的过程会导致第二处理器所需的处理时长较长,进而导致第二处理器的处理性能较差。

基于此,本申请实施例提供了一种数据迁移方法,通过将待迁移数据划分为N个分片数据组,且N个分片数据组中的目标分片数据组包括多个分片数据,则使得分片数据组的数量N小于待迁移数据中的所有分片数据的数量X;并且,生成目标分片数据组中的每个分片数据对应的数据迁移请求,当识别到目标分片数据组中的第一目标分片数据对应的数据迁移请求时,就根据第一目标分片数据对应的数据迁移请求,为目标分片数据组中的M个分片数据申请在第二内存的存储空间,从而实现将目标分片数据组中的M个分片数据在第二内存中实现合并,则对合并后的目标分片数据组执行一次数据迁移操作,将目标分片数据组中的M个分片数据从第二内存迁至网络存储设备或从网络存储设备迁移至第二内存。因此,针对待迁移数据中的N个分片数据组,需要执行N次数据迁移操作,将待迁移数据包括的所有分片数据分N次写入网络存储设备或从网络存储设备中读出,从而减少了第二处理器的分发处理过程和调用tcp协议栈的次数,节省了第二处理器将待迁移数据迁移完成所需的时间,提高了第二处理器的处理性能。

当待迁移数据中的所有分片数据划分的分片数据组的数量N越小时,第二处理器的分发处理过程和调用tcp协议栈的次数越少,则第二处理器将待迁移数据迁移完成所需的时间也就越少,从而进一步提高了第二处理器的处理性能。

本申请实施例中的数据迁移方法可应用于网卡设备,该网卡设备可部署在服务器中,将服务器内的CPU称为第一处理器,将服务器内的内存称为第一内存,服务器内部署的网卡设备内也会部署CPU、内存和逻辑芯片,将网卡设备内的CPU称为第二处理器,将网卡设备内的内存称为第二内存。

参照图3,为本申请实施例提供的安装有网卡设备的服务器的硬件结构示意图。如图3所示,服务器300包括第一处理器31、第一内存32和网卡设备33,网卡设备33包括第二处理器331、逻辑芯片332和第二内存333。其中,第一内存32可以为双倍速率同步动态随机存储器(double data rate,DDR),第二内存333也可以为DDR,逻辑芯片332可以为现场可编程门阵列(field programmable gate array,FPGA)。

在本申请实施例中,通过网卡设备33将第一内存32中的待迁移数据迁移至网络存储设备的数据写操作,以及将网络存储设备中的待迁移数据迁移至第一内存32的数据读操作,均需要第一处理器31、第二处理器331和逻辑芯片332的共同参与,而第二处理器331可根据其系统架构,将其划分为逻辑驱动模块和上层软件模块,逻辑驱动模块指的是第二处理器中位于底层与逻辑芯片332进行交互的硬件逻辑驱动,上层软件模块指的是位于操作系统架构中的上层应用程序,其用于与网络存储设备进行交互。

参照图4,为本申请实施例提供的一种数据迁移方法的流程图,其应用于网卡设备,具体可以包括如下步骤:

S401,当接收到第一处理器发送的针对待迁移数据的数据迁移指令时,将待迁移数据分为N个分片数据组;N个分片数据组中的目标分片数据组包括M个分片数据,N为正整数,M为大于1的正整数。

当需要将第一内存中存储的待迁移数据备份到网络存储设备时,可在服务器侧进行触发操作,使得第一处理器生成针对待迁移数据的数据迁移指令,该数据迁移指令为数据写指令。第一处理器会将针对待迁移数据的数据写指令发送至网卡设备的逻辑芯片,当逻辑芯片接收到第一处理器发送的针对待迁移数据的数据写指令时,将待迁移数据分为N个分片数据组,N为正整数。

其中,假设待迁移数据包括X个分片数据,将一起写入网络存储设备的至少一个分片数据划分为同一分片数据组,使得待迁移数据包括N个分片数据组,每个分片数据组包括至少一个分片数据,且至少部分分片数据组包括多个分片数据。将包括多个分片数据的分片数据组称为目标分片数据组,目标分片数据组包括M个分片数据,M为大于1的正整数。

当需要将网络存储设备中存储的待迁移数据迁移至第一内存时,可在服务器侧进行触发操作,使得第一处理器生成针对待迁移数据的数据迁移指令,该数据迁移指令为数据读指令。第一处理器会将针对待迁移数据的数据读指令发送至网卡设备的逻辑芯片,当逻辑芯片接收到第一处理器发送的针对待迁移数据的数据读指令时,将待迁移数据分为N个分片数据组,N为正整数。

其中,假设待迁移数据包括X个分片数据,将一起从网络存储设备中读取的至少一个分片数据划分为同一分片数据组,使得待迁移数据包括N个分片数据组,每个分片数据组包括至少一个分片数据,且至少部分分片数据组包括多个分片数据。将包括多个分片数据的分片数据组称为目标分片数据组,目标分片数据组包括M个分片数据,M为大于1的正整数。

由于目标分片数据组包括多个分片数据,则使得待迁移数据包括的分片数据组的个数N小于待迁移数据包括的所有分片数据的个数X。

例如,N为1,待迁移数据包括10个分片数据,将这10个分片数据均划分到一个分片数据组中,则待迁移数据包括1个目标分片数据组,该目标分片数据组包括10个分片数据。

当然,可以理解的是,待迁移数据包括的分片数据组的个数N不局限于1个,其还可以为2个、3个等数量。例如,待迁移数据包括10个分片数据,将前5个分片数据划分为第一个分片数据组中,将后5个分片数据划分为第二个分片数据组中,第一个分片数据组和第二个分片数据组均可称为目标分片数据组,此时,X等于10,N等于2,M均等于5。

S402,生成目标分片数据组中的每个分片数据对应的数据迁移请求。

在本申请实施例中,逻辑芯片针对每个目标分片数据组,生成目标分片数据组中的每个分片数据对应的数据迁移请求。也就是说,在目标分片数据组中,每个分片数据对应一个数据迁移请求。

其中,当第一处理器发送的数据迁移指令为数据写指令时,该数据迁移请求为数据写请求;当第一处理器发送的数据迁移指令为数据读指令时,该数据迁移请求为数据读请求。

S403,当识别到目标分片数据组中的第一目标分片数据对应的数据迁移请求时,根据第一目标分片数据对应的数据迁移请求,为目标分片数据组中的M个分片数据申请在第二内存的存储空间;第一目标分片数据为目标分片数据组中的一个分片数据。

在本申请实施例中,在逻辑芯片生成目标分片数据组中的每个分片数据对应的数据迁移请求之后,当第二处理器中的逻辑驱动模块识别到目标分片数据组中的第一目标分片数据对应的数据迁移请求时,就会根据第一目标分片数据对应的数据迁移请求,为目标分片数据组中的M个分片数据申请在第二内存的存储空间,使得目标分片数据组中的M个分片数据存储至第二内存的存储地址是连续的。

具体的,第一目标分片数据对应的数据迁移请求,包括对应的目标分片数据组中的M个分片数据的长度信息,逻辑驱动模块实际上是根据第一目标分片数据对应的数据迁移请求中的长度信息,为目标分片数据组中的M个分片数据申请在第二内存的存储空间。该长度信息表征目标分片数据组中的M个分片数据的占用空间大小。

其中,第一目标分片数据为目标分片数据组中的任意一个分片数据。示例性的,当数据迁移请求为数据写请求时,第一目标分片数据可以指的是目标分片数据组中第一个需要从第一内存迁移至第二内存的分片数据;当数据迁移请求为数据读请求时,第一目标分片数据可以指的是目标分片数据组中第一个需要从第二内存迁移至第一内存的分片数据。

例如,待迁移数据包括10个分片数据,将这10个分片数据均划分至1个分片数据组中,即待迁移数据包括1个目标分片数据组,该目标分片数据组包括10个分片数据,当第二处理器中的逻辑驱动模块识别到该目标分片数据组中的第一目标分片数据对应的数据迁移请求时,逻辑驱动模块根据该目标分片数据组中的10个分片数据的占用空间大小,为该目标分片数据组中的10个分片数据申请在第二内存的存储空间。或者,待迁移数据包括10个分片数据,将这10个分片数据均划分至2个分片数据组中,这2个分片数据组均为目标分片数据组,即待迁移数据包括2个目标分片数据组,第一个目标分片数据组包括5个分片数据,第二个目标分片数据组也包括5个分片数据,当逻辑驱动模块识别到第一个目标分片数据组中的第一目标分片数据对应的数据迁移请求时,逻辑驱动模块根据第一个目标分片数据组中的5个分片数据的占用空间大小,为第一个目标分片数据组中的5个分片数据申请在第二内存的存储空间;当逻辑驱动模块识别到第二个目标分片数据组中的第一目标分片数据对应的数据迁移请求时,逻辑驱动模块根据第二个目标分片数据组中5个分片数据的占用空间大小,为第二个目标分片数据组中的5个分片数据申请在第二内存的存储空间。

一种可选的实施方式,逻辑芯片在生成目标分片数据组中的每个分片数据对应的数据迁移请求,可在目标分片数据组中的第一目标分片数据对应的数据迁移请求中添加第一标识,即目标分片数据组中的第一目标分片数据对应的数据迁移请求包括第一标识。因此,当第二处理器中的逻辑驱动模块识别到目标分片数据组中携带有第一标识的数据迁移请求时,就可确定是识别到目标分片数据组中的第一目标分片数据对应的数据迁移请求,然后,逻辑驱动模块根据携带有第一标识的数据迁移请求,为目标分片数据组中的M个分片数据申请在第二内存的存储空间。

S404,执行一次数据迁移操作,将目标分片数据组中的M个分片数据从第一存储单元迁移至第二存储单元。

在本申请实施例中,逻辑驱动模块为目标分片数据组中的M个分片数据申请在第二内存的存储空间之后,第二处理器中的上层软件模块会对该目标分片数据组执行1次数据迁移操作,将该目标分片数据组中的M个分片数据一起从第一存储单元迁移至第二存储单元。其中,第一存储单元和第二存储单元中的一者为第二内存,另一者为网络存储设备。

因此,当待迁移数据包括N个分片数据组时,第二处理器中的上层软件模块就会执行N次数据迁移操作,从而将待迁移数据包括的X个分片数据分N次从第一存储单元迁移至第二存储单元。

例如,待迁移数据包括10个分片数据,将这10个分片数据均划分至1个分片数据组中,即待迁移数据包括1个目标分片数据组,该目标分片数据组包括10个分片数据,上层软件模块执行1次数据迁移操作,就可将待迁移数据包括的10个分片数据一次性从第一存储单元迁移至第二存储单元;或者,待迁移数据包括10个分片数据,将这10个分片数据均划分至2个分片数据组中,这2个分片数据组均为目标分片数据组,即待迁移数据包括2个目标分片数据组,第一个目标分片数据组包括5个分片数据,第二个目标分片数据组也包括5个分片数据,上层软件模块执行第1次数据迁移操作,将第一个目标分片数据组中的5个分片数据一起从第一存储单元迁移至第二存储单元,上层软件模块执行第2次数据迁移操作,将第二个目标分片数据组中的5个分片数据一起从第一存储单元迁移至第二存储单元。

由于目标分片数据组中的M个分片数据存储至第二内存的存储地址是连续的,因此,在将目标分片数据组中的M个分片数据存储至第二内存时,可使得目标分片数据组中的M个分片数据实现合并,因此,合并后的目标分片数据组只需执行一次数据迁移操作,将目标分片数据组中的M个分片数据从第二内存迁至网络存储设备或从网络存储设备迁移至第二内存。

其中,待迁移数据的数据迁移操作为数据写操作或数据读操作。数据写操作指的是将第一内存中存储的待迁移数据先迁移至第二内存,再从第二内存迁移至网络存储设备,即实现将服务器的第一内存中的待迁移数据拷贝至网络存储设备中,此时,第一存储单元为第二内存,第二存储单元为网络存储设备;数据读操作指的是将网络存储设备中存储的待迁移数据先迁移至第二内存,再从第二内存迁移至第一内存,即实现将网络存储设备中的待迁移数据拷贝至服务器的第一内存中,此时,第一存储单元为网络存储设备,第二存储单元为第二内存。网络存储设备可以为云盘服务器。

也就是说,当数据迁移请求为数据写请求,数据迁移操作为数据写操作时,第二处理器中的上层软件模块执行N次数据迁移操作,将待迁移数据包括的X个分片数据分N次从第二内存读出并写入网络存储设备;当数据迁移请求为数据读请求,数据迁移操作为数据读操作时,第二处理器中的上层软件模块执行N次数据迁移操作,将待迁移数据包括的X个分片数据分N次从网络存储设备中读出并写入第二内存,N小于X。

另外,由于在第一内存中存储待迁移数据时,待迁移数据中的各个分片数据在第一内存中的存储地址往往是不连续的,因此,目标分片数据组中的M个分片数据是依次在第一内存与第二内存之间的迁移的,即每次仅在第一内存和第二内存之间迁移目标分片数据组中的一个分片数据。当目标分片数据组包括M个分片数据时,就需要在第一内存和第二内存之间执行M次迁移操作,将目标分片数据组包括的M个分片数据分M次从第一内存迁移至第二内存,或者将目标分片数据组包括的M个分片数据分M次从第二内存迁移至第一内存。

另外,待迁移数据包括的N个分片数据组,其中一部分分片数据组是包括多个分片数据的目标分片数据组,另一部分分片数据组是包括1个分片数据的分片数据组;或者,N个分片数据组均是包括多个分片数据的目标分片数据组。

需要说明的是,上面的执行过程重点描述包括多个分片数据的目标分片数据组的数据迁移过程,针对每个目标分片数据组均执行上述S402至S404的步骤;而针对仅包括一个分片数据的分片数据组,其实际迁移过程与图1或图2所示的数据迁移过程类似,在此不再赘述。

下面分别针对数据写操作和数据读操作,说明本申请实施例中的数据迁移过程。

第一种场景,针对待迁移数据的数据写操作,参照图5,为本申请实施例提供的待迁移数据的数据写操作的流程图,具体可以包括如下步骤:

S501,当接收到第一处理器发送的针对待迁移数据的数据迁移指令时,将待迁移数据分为N个分片数据组;N个分片数据组中的目标分片数据组包括M个分片数据,N为正整数,M为大于1的正整数。

S502,生成目标分片数据组中的每个分片数据对应的数据迁移请求。

此时,数据迁移指令为数据写指令,数据迁移请求为数据写请求,S501和S502的具体执行过程,与上述S401和S402的过程类似,为避免重复,在此不再赘述。

S503,当识别到目标分片数据组中的第一目标分片数据对应的数据迁移请求时,根据第一目标分片数据对应的数据迁移请求,为目标分片数据组中的M个分片数据申请在第二内存的存储空间;第一目标分片数据为目标分片数据组中的一个分片数据。

此步骤的具体执行过程与上述S403的过程类似,为避免重复,在此不再赘述。

S504,根据目标分片数据组中的M个分片数据对应的数据迁移请求,将M个分片数据依次从第一内存迁移至第二内存。

在本申请实施例中,逻辑驱动模块为目标分片数据组中的M个分片数据申请在第二内存的存储空间之后,逻辑芯片就会根据目标分片数据组中的M个分片数据对应的数据迁移请求,分别将目标分片数据组中的M个分片数据按序依次从第一内存迁移至第二内存。

当待迁移数据包括N个分片数据组时,针对其中一个包括M个分片数据的目标分片数据组,逻辑芯片会将该目标分片数据组中的M个分片数据,分M次从第一内存依次迁移至第二内存。

例如,当待迁移数据包括1个目标分片数据组,该目标分片数据组包括10个分片数据,逻辑芯片就将该目标分片数据组中的10个分片数据分10次从第一内存依次迁移至第二内存;或者,待迁移数据包括2个目标分片数据组,第一个目标分片数据组包括5个分片数据,第二个目标分片数据组也包括5个分片数据,则逻辑芯片会将第一个目标分片数据组中的5个分片数据分5次从第一内存依次迁移至第二内存,然后逻辑芯片再将第二个目标分片数据组中的5个分片数据分5次从第一内存依次迁移至第二内存。

S505,确定M个分片数据是否已全部从第一内存迁移至第二内存。

在将目标分片数据组中的M个分片数据按序依次从第一内存迁移至第二内存之后,逻辑驱动模块会判断目标分片数据组中的M个分片数据是否已全部从第一内存迁移至第二内存。

一种可选的实施方式,目标分片数据组中最后一个从第一内存迁移至第二内存的分片数据为第二目标分片数据,逻辑芯片在生成目标分片数据组中的每个分片数据对应的数据迁移请求,可在目标分片数据组中的第二目标分片数据对应的数据迁移请求中添加第二标识,即第二目标分片数据对应的数据迁移请求包括第二标识。因此,第二处理器中的逻辑驱动模块通过确定目标分片数据组中携带有第二标识的数据迁移请求对应的第二目标分片数据,是否已从第一内存迁移至第二内存,来确定目标分片数据组中的M个分片数据是否已全部从第一内存迁移至第二内存。

当逻辑驱动模块识别到携带有第二标识的数据迁移请求对应的第二目标分片数据已迁移至第二内存时,就可确定目标分片数据组中的M个分片数据已全部从第一内存迁移至第二内存;当逻辑驱动模块还未识别到携带有第二标识的数据迁移请求对应的第二目标分片数据已迁移至第二内存时,就可确定目标分片数据组中的M个分片数据第还未全部从第一内存迁移至第二内存。

例如,当待迁移数据包括1个目标分片数据组,该目标分片数据组包括10个分片数据,可在该目标分片数据组中的第10个分片数据对应的数据迁移请求中添加第二标识,当逻辑驱动模块识别到携带有第二标识的数据迁移请求对应的第二目标分片数据(即第10个分片数据)已迁移至第二内存时,就可确定该目标分片数据组中的所有分片数据已全部从第一内存迁移至第二内存;或者,待迁移数据包括2个目标分片数据组,第一个目标分片数据组包括5个分片数据,第二个目标分片数据组也包括5个分片数据,可在第一个目标分片数据组中的第5个分片数据对应的数据迁移请求中添加第二标识,在第二个目标分片数据组中的第5个分片数据对应的数据迁移请求中添加第二标识,当逻辑驱动模块识别到第一个目标分片数据组中携带有第二标识的数据迁移请求对应的第二目标分片数据(即第一个目标分片数据组中的第5个分片数据)已迁移至第二内存时,就可确定第一内存中存储的第一个目标分片数据组中的所有分片数据已全部迁移至第二内存,当逻辑驱动模块识别到第二个目标分片数据组中携带有第二标识的数据迁移请求对应的第二目标分片数据(即第二个目标分片数据组中的第5个分片数据)已迁移至第二内存时,就可确定第一内存中存储的第二个目标分片数据组中的所有分片数据已全部迁移至第二内存。

S506,当M个分片数据已全部从第一内存迁移至第二内存时,执行一次数据迁移操作,将目标分片数据中的M个分片数据从第二内存迁移至网络存储设备。

在本申请实施例中,当第二处理器中的逻辑驱动模块识别到目标分片数据组中的M个分片数据已全部从第一内存迁移至第二内存时,第二处理器中的上层软件模块就会执行一次数据迁移操作,将目标分片数据中的M个分片数据一起从第二内存迁移至网络存储设备。

由于逻辑驱动模块识别到目标分片数据组中的第一目标分片数据对应的数据迁移请求时,就为该目标分片数据组中的M个分片数据申请在第二内存的存储空间,因此,在将该目标分片数据组中的M个分片数据按序依次从第一内存迁移至第二内存后,该目标分片数据组中的M个分片数据在第二内存中的存储地址是连续的,从而也就在第二内存中实现了对该目标分片数据组中的M个分片数据的合并,即在第二内存中将目标分片数据组中的M个分片数据进行拼接。

因此,第二处理器中的上层软件模块针对合并后的一个目标分片数据组,执行一次数据迁移操作,将目标分片数据中的M个分片数据一起从第二内存迁移至网络存储设备,当第二内存中共有N个分片数据组时,则需要执行N次数据迁移操作,将第二内存中的N个分片数据组分N次迁移至网络存储设备。

图6为本申请实施例提供的服务器实现待迁移数据的数据写操作的具体交互图,其具体可以包括如下步骤:

S601,第一处理器加载virtio驱动程序,将第一内存中存储的待迁移数据转换为virtio数据结构。

其中,virtio驱动程序指的是驱动网卡设备的驱动程序,其运行在第一处理器上,第一处理器在加载virtio驱动程序后,会将第一内存中原本存储的待迁移数据的数据格式进行转化,得到virtio数据结构,并将该virtio数据结构依旧存储在第一内存中。

如图7所示,virtio数据结构包括三部分,其分别为指针集合(available ring)、描述符链(descriptor)和存储的各个分片数据(data buffer)。

其中,available ring中的flags内的字段表示数据迁移过程是否有中断,available ring中的idx内的字段用于指示数据迁移过程中目前已处理到的指针(ring)是哪一个,available ring中的ring[n]用于存放指针,该指针指向描述符链中的描述符的链头。

描述符链包括多个描述符,每个描述符中的addr字段表示其对应的分片数据在第一内存中的存储地址,针对数据写操作,该addr字段表示后续需要从第一内存中读取的分片数据的地址;每个描述符中的len字段表示其对应的分片数据的长度信息,每个描述符中的flags字段表示是否还有下一个描述符,每个描述符中的next字段指向下一个描述符。

data buffer表示第一内存中实际存储的待迁移数据中的各个分片数据,描述符链中的每个描述符的addr字段指向待迁移数据中的一个分片数据,描述符链中的所有描述符对应的分片数据共同构成完整的待迁移数据。

由于第一内存中存储的待迁移数据包括的各个分片数据的存储地址不是连续的,每个分片数据均对应一个其在第一内存中的第一存储地址,通过将第一内存中存储的待迁移数据转换为virtio数据结构,可方便地从virtio数据结构中查找到每个分片数据对应的第一存储地址。

S602,当第一处理器将第一内存中存储的待迁移数据转换为virtio数据结构之后,第一处理器向逻辑芯片发送针对待迁移数据的数据写指令。

S603,当逻辑芯片接收到第一处理器发送的数据写指令时,将待迁移数据分为N个分片数据组,生成目标分片数据组中的每个分片数据对应的数据写请求,并在目标分片数据组中的第一目标分片数据的数据写请求中添加第一标识以及在第二目标分片数据的数据写请求中添加第二标识。

在本申请实施例中,逻辑芯片按照预设规则将待迁移数据分为N个分片数据组,然后,逻辑芯片采用直接内存存取(direct memory access,DMA)方式从第一内存中读取virtio数据结构中的描述符链,根据描述符链中的每个描述符的addr字段,生成目标分片数据组中的每个分片数据对应的数据写请求,该数据写请求包括对应的分片数据在第一内存中的第一存储地址,此外,还会在目标分片数据组中的第一目标分片数据的数据写请求中添加第一标识,并在目标分片数据组中的第二目标分片数据的数据写请求中添加第二标识。

可选的,第一标识可以用于指示目标分片数据组中,第一个需要从第一内存迁移至第二内存的第一目标分片数据,第二标识用于指示目标分片数据组中,最后一个从第一内存迁移至第二内存的第二目标分片数据。

S604,逻辑芯片将目标分片数据组中的每个分片数据对应的数据写请求写入到第二内存中。

S605,当第二处理器中的逻辑驱动模块从第二内存中读取到具有第一标识的数据写请求时,为目标分片数据组中的M个分片数据申请在第二内存的存储空间。

逻辑驱动模块会从第二内存中读取目标分片数据组中的各个分片数据对应的数据写请求,当从第二内存中读取到具有第一标识的数据写请求时,即识别到目标分片数据组中的第一目标分片数据对应的数据写请求,逻辑驱动模块根据该具有第一标识的数据写请求,为目标分片数据组中的M个分片数据申请在第二内存的存储空间。

S606,逻辑驱动模块向逻辑芯片发送目标分片数据组中的M个分片数据需要从第一内存中迁移至第二内存的通知消息。

在该通知消息中会包含第二内存中分配的存储空间的第二存储地址,该第二存储地址指的是目标分片数据组中的M个分片数据存储在第二内存中的首地址。

S607,逻辑芯片将目标分片数据组中的每个分片数据依次从第一内存中迁移至第二内存。

S608,逻辑芯片向逻辑驱动模块发送目标分片数据组中的每个分片数据已迁移至第二内存的通知消息。

S609,当逻辑驱动模块识别到具有第二标识的数据写请求对应的第二目标分片数据已迁移至第二内存时,发送目标分片数据组内的M个分片数据需要从第二内存迁移至网络存储设备的通知消息。

实际上,逻辑芯片每迁移一个分片数据,都会向逻辑驱动模块发送该分片数据已迁移至第二内存的通知消息。因此,当逻辑驱动模块在S605中读取到具有第二标识的数据写请求,且接收到逻辑芯片发送的具有第二标识的数据写请求对应的分片数据已迁移至第二内存时,逻辑驱动模块确定目标分片数据组中的所有分片数据已全部从第一内存迁移至第二内存,则逻辑驱动模块才向上层软件模块发送该目标分片数据组中的所有分片数据需要从第二内存迁移至网络存储设备的通知消息。

由于逻辑驱动模块根据具有第一标识的数据写请求,一次性分配目标分片数据组中的所有分片数据存储至第二内存的存储空间,因此,在将目标分片数据组中的M个分片数据依次从第一内存迁移至第二内存的存储空间时,第二内存中存储的目标分片数据组中的各个分片数据的存储地址是连续的,即在第二内存中存储目标分片数据组中的第一个分片数据后,继续从第一个分片数据后的存储位置开始存储目标分片数据组中的第二个分片数据,接着从第二个分片数据后的存储位置存储目标分片数据组中的第三个分片数据,以此类推。因此,目标分片数据组中的所有分片数据在从第一内存迁移至第二内存后,在第二内存中实现了目标分片数据组中的所有分片数据的合并。

S610,第二处理器中的上层软件模块将目标分片数据组中的所有分片数据的写操作分发到不同的处理模块。

上层软件模块将目标分片数据组中的所有分片数据(即M个分片数据)的写操作请求(即向网络存储设备写入分片数据的写操作请求),按照对应的分片数据后续存储至网络存储设备的位置不同,分发到不同的处理模块。

S611,上层软件模块将第二内存中的目标分片数据组中的所有分片数据一起迁移至网络存储设备。

上层软件模块调用linux内核的tcp协议栈,将第二内存中的目标分片数据组中的所有分片数据一起迁移至网络存储设备。当目标分片数据组包括多个分片数据时,就可执行一次S610和一次S611,将目标分片数据组包括的所有分片数据一次性从第二内存迁移至网络存储设备,从而减少了上层软件模块的分发处理过程和调用tcp协议栈的次数。

实际上,上层软件模块从第二内存中读取到目标分片数据组中的所有分片数据之后,将目标分片数据组中的所有分片数据封装到一个报文中,即该报文中包括的是目标分片数据组中的所有分片数据,然后,将上层软件模块该报文发送至网络存储设备。

在向网络存储设备内存储目标分片数据组中的所有分片数据时,目标分片数据组中的所有分片数据在网络存储设备中的存储地址是连续的。

S612,当上层软件模块接收到网络存储设备返回的应答消息,上层软件模块向逻辑驱动模块发送网络存储设备返回的应答消息。

该应答消息用于提示已经将目标分片数据组中的所有分片数据迁移至网络存储设备。

S613,当逻辑驱动模块接收到待迁移数据中的最后一个分片数据组已写入网络存储设备的应答消息时,逻辑驱动模块向逻辑芯片发送待迁移数据包括的所有分片数据均已迁移至网络存储设备的通知消息。

S614,逻辑芯片将待迁移数据包括的所有分片数据均已迁移至网络存储设备的通知消息写入第一内存。

S615,当第一处理器读取到第一内存中的所有分片数据均已迁移至网络存储设备的通知消息时,第一处理器释放资源。

该资源可以指的是第一内存中原本存储的待迁移数据,即第一处理器将第一内存中原本存储的待迁移数据清除,以释放第一内存的存储空间,和/或,第一处理器将第一内存中的virtio数据结构清除。

因此,可以看出,在数据写操作的过程中,本申请实施例中的上层软件模块以及上层软件模块与网络存储设备之间交互的数据,均是目标分片数据组中的所有分片数据(即M个分片数据,M为大于1的正整数),而图1所示的相关技术中,上层软件模块以及上层软件模块与网络存储设备之间交互的数据,均是一个分片数据。

例如,图1所示的相关技术中,上层软件模块是将每一个分片数据对应的写操作请求都分发到不同的处理模块,且上层软件模块是每次将一个分片数据写入网络存储设备;而本申请实施例中的上层软件模块是将目标分片数据组中的所有分片数据的写操作请求分发到不同的处理模块,且上层软件模块是每次将目标分片数据组中的所有分片数据一起写入网络存储设备。

当每次写入网络存储设备的分片数据的数量增多时,则将待迁移数据中的所有分片数据均写入网络存储设备的次数减少,从而减少了上层软件模块处理待迁移数据的次数,减少了上层软件模块处理待迁移数据所需的时间,从而提高第二处理器的处理性能。并且,本申请实施例中的目标分片数据组中的所有分片数据的合并过程,需要通过逻辑芯片和逻辑驱动模块来实现,上层软件模块的处理逻辑不需要进行更改。

第二种场景,针对待迁移数据的数据读操作,参照图8,为本申请实施例提供的待迁移数据的数据读操作的流程图,具体可以包括如下步骤:

S801,当接收到第一处理器发送的针对待迁移数据的数据迁移指令时,将待迁移数据分为N个分片数据组;N个分片数据组中的目标分片数据组包括M个分片数据,N为正整数,M为大于1的正整数。

S802,生成目标分片数据组中的每个分片数据对应的数据迁移请求。

此时,数据迁移指令为数据读指令,数据迁移请求为数据读请求,S801和S802的具体执行过程与上述S401和S402的过程类似,为避免重复,在此不再赘述。

S803,当识别到目标分片数据组中的第一目标分片数据对应的数据迁移请求时,根据第一目标分片数据对应的数据迁移请求,为目标分片数据组中的M个分片数据申请在第二内存的存储空间;第一目标分片数据为目标分片数据组中的一个分片数据。

此步骤的具体执行过程与上述S403的过程类似,为避免重复,在此不再赘述。

S804,确定目标分片数据组中的M个分片数据对应的数据迁移请求是否已全部生成。

在本申请实施例中,逻辑芯片在生成目标分片数据组中的每个分片数据对应的数据迁移请求之后,逻辑驱动模块会识别目标分片数据组中的M个分片数据对应的数据迁移请求是否已全部生成。

一种可选的实施方式,目标分片数据组中生成的最后一个数据迁移请求包括第三标识,逻辑芯片在生成目标分片数据组中的每个分片数据对应的数据迁移请求,可在目标分片数据组中最后生成的一个数据迁移请求中添加第三标识。因此,逻辑驱动模块通过检测是否识别到携带有第三标识的数据迁移请求,即确定目标分片数据组中携带有第三标识的数据迁移请求是否已生成,来确定目标分片数据组中的所有分片数据对应的数据迁移请求是否已全部生成。

可选的,在生成目标分片数据组中的每个数据迁移请求时,可根据目标分片数据组中的M个分片数据的实际合并顺序,按序依次生成每个分片数据的数据迁移请求。例如,第一次先生成目标分片数据组中的第一个分片数据的数据迁移请求,第二次生成目标分片数据组中的第二个分片数据的数据迁移请求,以此类推,第M次生成目标分片数据组中的第M个分片数据的数据迁移请求。此时,是在第M个分片数据的数据迁移请求中添加有第三标识。

当逻辑驱动模块识别到携带有第三标识的数据迁移请求时,确定目标分片数据组中的所有分片数据对应的数据迁移请求已全部生成;当逻辑驱动模块未识别到携带有第三标识的数据迁移请求时,确定目标分片数据组中的所有分片数据对应的数据迁移请求还未全部生成。

S805,当全部生成时,执行一次数据迁移操作,将目标分片数据组中的M个分片数据从网络存储设备迁移至第二内存。

在本申请实施例中,当第二处理器中的逻辑驱动模块识别到目标分片数据组中的所有分片数据对应的数据迁移请求已全部生成时,第二处理器中的上层软件模块就会执行一次数据迁移操作,将网络存储设备中存储的目标分片数据组中的所有分片数据一起迁移至第二内存。

由于逻辑驱动模块识别到目标分片数据组中的第一目标分片数据对应的数据迁移请求时,就为该目标分片数据组中的M个分片数据申请在第二内存的存储空间,因此,上层软件模块就可以从网络存储设备中一次性读取目标分片数据组中的M个分片数据,并将读取的目标分片数据组中的M个分片数据一起写入第二内存,从而也就在第二内存中实现了目标分片数据组中的所有分片数据的合并。

因此,第二处理器中的上层软件模块针对每一个待合并的目标分片数据组,执行一次数据迁移操作,将网络存储设备中存储的目标分片数据组中的所有分片数据一起迁移至第二内存,当网络存储设备中存储的待迁移数据共有N个分片数据组时,则需要执行N次数据迁移操作,将网络存储设备中存储的N个分片数据组分N次迁移至第二内存。

S806,根据目标分片数据组中的M个分片数据对应的数据迁移请求,将M个分片数据依次从第二内存迁移至第一内存。

在本申请实施例中,当上层软件模块将网络存储设备中存储的目标分片数据组中的所有分片数据迁移至第二内存之后,逻辑芯片就会根据目标分片数据组中的每个分片数据对应的数据迁移请求,将第二内存中存储的目标分片数据组中的M个分片数据按序依次迁移至第一内存。

图9为本申请实施例提供的服务器实现待迁移数据的数据读操作的具体交互图,其具体可以包括如下步骤:

S901,第一处理器加载virtio驱动程序,在第一内存中生成virtio数据结构。

当需要从网络存储设备中读取待迁移数据时,第一处理器在加载virtio驱动程序,为待迁移数据中的每个分片数据,分配其后续需要存储至第一内存时的第一存储地址,生成virtio数据结构。

在数据读操作过程中的virtio数据结构与数据写操作的virtio数据结构的区别在于,在数据读操作过程中的virtio数据结构中暂时还没有分片数据。

S902,第一处理器向逻辑芯片发送针对待迁移数据的数据读指令。

S903,当逻辑芯片接收到第一处理器发送的数据读指令时,将待迁移数据分为N个分片数据组,生成目标分片数据组中的每个分片数据对应的数据读请求,并在目标分片数据组中的第一目标分片数据的数据读请求中添加第一标识以及在最后生成的一个数据读请求中添加第三标识。

S904,逻辑芯片将目标分片数据组中的每个分片数据对应的数据读请求写入到第二内存中。

S905,当逻辑驱动模块从第二内存中读取到具有第一标识的数据读请求时,为目标分片数据组中的M个分片数据申请在第二内存的存储空间。

S906,当逻辑驱动模块从第二内存中读取到具有第三标识的数据读请求时,向上层软件模块发送目标分片数据组中的M个分片数据需要从网络存储设备迁移至第二内存的通知消息。

当逻辑驱动模块从第二内存中读取到具有第三标识的数据读请求时,确定目标分片数据组中的所有分片数据对应的数据读请求已全部生成,此时,逻辑驱动模块才向上层软件模块发送该目标分片数据组中的所有分片数据需要从网络存储设备迁移至第二内存的通知消息。

S907,上层软件模块执将目标分片数据组中的所有分片数据的读操作分发到不同的处理模块。

上层软件模块将目标分片数据组中的所有分片数据的读操作请求(即从网络存储设备中读取分片数据的读操作请求),按照对应的分片数据在网络存储设备的存储位置不同,分发到不同的处理模块。

S908,上层软件模块将网络存储设备中的目标分片数据组中的所有分片数据迁移至第二内存。

上层软件模块调用linux内核的tcp协议栈,将网络存储设备中目标分片数据组中的所有分片数据一起迁移至第二内存。当目标分片数据组包括多个分片数据时,就可执行一次S907和一次S908,将目标分片数据组包括的所有分片数据一次性从网络存储设备迁移至第二内存,从而减少了第二处理器中的上层软件模块的分发处理过程和调用tcp协议栈的次数。

实际上,网络存储设备是将目标分片数据组中的所有分片数据封装到一个报文中,即该报文中包括的是目标分片数据组中的所有分片数据,然后,网络存储设备将该报文发送至上层软件模块。

由于网络存储设备内存储目标分片数据组中的所有分片数据时,目标分片数据组中的所有分片数据在网络存储设备内的存储地址是连续的,因此,可以一次性将目标分片数据组中的所有分片数据读取出来;当第二内存中分配的存储空间能够容纳目标分片数据组中的所有分片数据时,则上层软件模块也就可以将从网络存储设备中读取到的目标分片数据组中的所有分片数据,一次性写入第二内存的存储空间内。

S909,上层软件模块向逻辑驱动模块发送网络存储设备返回的应答消息。

该应答消息用于提示网络存储设备已将目标分片数据组中的所有分片数据发送至上层软件模块。

S910,逻辑驱动模块向逻辑芯片发送需要将目标分片数据组中的每个分片数据从第二内存迁移至第一内存的通知消息。

S911,逻辑芯片将目标分片数据组中的每个分片数据依次从第二内存迁移至第一内存。

S912,逻辑芯片向逻辑驱动模块发送该目标分片数据组中的每个分片数据已迁移至第一内存的通知消息

S913,当逻辑驱动模块确定接收到待迁移数据中的最后一个分片数据已迁移至第一内存的通知消息时,逻辑驱动模块向逻辑芯片发送待迁移数据包括的所有分片数据均已迁移至第一内存的通知消息。

S914,逻辑芯片将待迁移数据包括的所有分片数据均已迁移至第一内存的通知消息写入第一内存。

S915,当第一处理器读取到第一内存中的所有分片数据均已迁移至第一内存的通知消息时,第一处理器释放资源。

该资源可以指的是第一内存中的virtio数据结构,释放资源指的是将第一内存中的virtio数据结构清除。

因此,可以看出,在数据读操作的过程中,本申请实施例中的上层软件模块以及上层软件模块与网络存储设备之间交互的数据,均是目标分片数据组中的所有分片数据(即M个分片数据,M为大于1的正整数),而图2所示的相关技术中,上层软件模块以及上层软件模块与网络存储设备之间交互的数据,均是一个分片数据。

例如,图2所示的相关技术中,上层软件模块是将每一个分片数据对应的读操作请求都分发到不同的处理模块,且上层软件模块是每次将一个分片数据从网络存储设备迁移至第二内存;而本申请实施例中的上层软件模块是将目标分片数据组中的所有分片数据的读操作请求分发到不同的处理模块,且上层软件模块是每次将目标分片数据组中的所有分片数据一起从网络存储设备迁移至第二内存。

当每次从网络存储设备读取的分片数据的数量增多时,则将待迁移数据中的所有分片数据从网络存储设备读取的次数减少,从而减少了上层软件模块处理待迁移数据的次数,减少了上层软件模块处理待迁移数据所需的时间,从而提高第二处理器的处理性能。并且,本申请实施例中的目标分片数据组中的所有分片数据的合并过程,需要通过逻辑芯片和逻辑驱动模块来实现,上层软件模块的处理逻辑不需要进行更改。

经测试,如下是本申请和相关技术在实际产品中性能测试数据的对比结果,表一为相关技术中的网卡设备内的第二处理器的性能测试数据表,表二为本申请实施例中的网卡设备内的第二处理器的性能测试数据表,表二所示的性能测试数据表是将待迁移数据划分为一个目标分片数据组中,也就是执行一次数据迁移操作,将网络存储设备中存储的待迁移数据包括的所有分片数据一次性迁移至第二内存。

表一

表二

可以看出,本申请实施例中的每秒读/写次数(I/O per second,IOPS)和BW(带宽)均大于相关技术中的IOPS和BW值,使得本申请实施例的吞吐率相对于相关技术有显著提升;并且,本申请实施例中的latency(延时)小于相关技术中的latency,即本申请实施例的延迟相对于相关技术有显著减小。因此,本申请实施例提供的数据迁移方法相对于相关技术,可提高第二处理器的性能。

本申请实施例还提供了一种网卡设备,网卡设备部署在服务器中,服务器还包括第一处理器和第一内存,网卡设备包括第二处理器、逻辑芯片和第二内存;逻辑芯片用于当接收到第一处理器发送的针对待迁移数据的数据迁移指令时,将待迁移数据分为N个分片数据组;以及生成目标分片数据组中的每个分片数据对应的数据迁移请求;N个分片数据组中的目标分片数据组包括M个分片数据,N为正整数,M为大于1的正整数;第二处理器用于当识别到目标分片数据组中的第一目标分片数据对应的数据迁移请求时,根据第一目标分片数据对应的数据迁移请求,为目标分片数据组中的M个分片数据申请在第二内存的存储空间;以及执行一次数据迁移操作,将目标分片数据组中的M个分片数据从第一存储单元迁移至第二存储单元;其中,第一目标分片数据为目标分片数据组中的一个分片数据;当数据迁移操作为数据写操作时,第一存储单元为第二内存,第二存储单元为网络存储设备;当数据迁移操作为数据读操作时,第一存储单元为网络存储设备,第二存储单元为第二内存;目标分片数据组中的M个分片数据是依次在第一内存与第二内存之间迁移的。

可选的,第一目标分片数据对应的数据迁移请求包括第一标识;第二处理器,具体用于当识别到目标分片数据组中携带有第一标识的数据迁移请求时,根据携带有第一标识的数据迁移请求,为目标分片数据组中的M个分片数据申请在第二内存的存储空间。

可选的,数据迁移操作为数据写操作;逻辑芯片,还用于根据目标分片数据组中的M个分片数据对应的数据迁移请求,将M个分片数据依次从第一内存迁移至第二内存;第二处理器,还用于确定M个分片数据是否已全部从第一内存迁移至第二内存;以及当M个分片数据已全部从第一内存迁移至第二内存时,执行一次数据迁移操作,将目标分片数据中的M个分片数据从第二内存迁移至网络存储设备。

可选的,目标分片数据组中最后一个从第一内存迁移至第二内存的分片数据为第二目标分片数据,第二目标分片数据对应的数据迁移请求包括第二标识;第二处理器,具体用于确定目标分片数据组中携带有第二标识的数据迁移请求对应的第二目标分片数据,是否已从第一内存迁移至第二内存。

可选的,数据迁移操作为数据读操作;第二处理器,具体用于确定目标分片数据组中的M个分片数据对应的数据迁移请求是否已全部生成;以及当全部生成时,执行一次数据迁移操作,将目标分片数据组中的M个分片数据从网络存储设备迁移至第二内存;逻辑芯片,还用于根据目标分片数据组中的M个分片数据对应的数据迁移请求,将M个分片数据依次从第二内存迁移至第一内存。

可选的,目标分片数据组中生成的最后一个数据迁移请求包括第三标识;第二处理器,具体用于确定目标分片数据组中携带有第三标识的数据迁移请求是否已生成。

可选的,N为1。

本申请实施例的网卡设备对应地可用于执行上述方法实施例中执行的步骤,其实现原理和技术效果类似,此处不再赘述。

本申请实施例还提供了一种服务器,包括第一处理器、第一内存,以及上述的网卡设备。

本申请实施例还提供了一种数据迁移系统,如图10所示,该数据迁移系统包括网络存储设备400以及服务器300,网络存储设备400与服务器300之间通信连接,具体的,网络存储设备400是与服务器300中的网卡设备33通信连接。

关于网卡设备的具体结构以及实现数据迁移的过程,可参照图3至图9对应的描述,此处不再赘述。

本申请实施例是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理单元以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理单元执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

以上的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本申请的保护范围之内。

33页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种非易失性存储阵列的软错误检测方法及装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类