本公开涉及数据传输领域,尤其涉及一种数据传输方法、系统、控制器及存储介质。
背景技术:
1、nvme(non-volatile memory express)是一种基于设备逻辑接口的总线传输协议。它规范了一种通过总线(一般为pcie总线协议)访问非易失性存储器介质,例如采用闪存的固态硬盘驱动器(ssd)的标准协议,是一种主机(host)与ssd之间通信的协议。nvme的数据传输命令用于在主机和ssd之间进行数据传输,包括写命令(write command)和读命令(read command)。nvme的两种命令由主机来发布,非易失性内存主机控制器(简称主控)负责执行命令。对于写命令,主控主动从主机内存中读取数据,将数据写入到非易失性存储器介质中。对于读命令,主控主动从非易失性存储器介质中读取数据,将数据写入到主机内存中。通常在数据传输的过程中,ssd主控芯片需要支持多个nand通道并行访问。相关技术需要将每个通道需要写入的数据先存入缓冲区,再通过nand通道进行数据传输,这种方式主控芯片的占用面积和成本都有所增加。
技术实现思路
1、有鉴于此,本公开提出了一种数据传输方法、系统、控制器及存储介质,旨在降低数据传输过程中对数据缓存空间的需求。
2、根据本公开的第一方面,提供了一种数据传输方法,所述方法包括:
3、响应于接收到待处理的写命令,获取所述写命令对应的数据大小和地址表单;
4、根据用于数据传输的闪存通道对应的可传输数据大小,以及所述写命令对应的数据大小拆分所述写命令,得到至少一个子命令,每个所述子命令具有对应的子数据大小;
5、轮询至少一个闪存通道的通道状态,并根据所述通道状态分配子命令;
6、确定所述子命令对应的子地址信息;
7、根据所述子命令对应的子地址信息获取逻辑数据块,并通过所述闪存通道将所述逻辑数据块写入nand闪存。
8、在一种可能的实现方式中,所述地址表单包括待写入数据的起始地址,以及包括在所述起始地址之后的多个待写入数据的存储地址的数据地址列表。
9、在一种可能的实现方式中,所述确定所述子命令对应的子地址信息,包括:
10、根据seg_prp_ptr=mod((seg_size*seg_num+prp_ofst-seg_ofst)/page_size)和seg_prp_ofst=|(seg_size*seg_num+prp_ofst-seg_ofst)/page_size|分别计算子起始地址和对应的页内偏移,其中,seg_size为所述子命令对应的子数据大小,seg_num为所述子命令对应的执行顺序,prp_ofst为起始地址的页内偏移,seg_ofst为第一个子命令对应的逻辑数据块的偏移,page_size为存储所述数据地址列表的数据页大小;
11、根据所述子起始地址位置,以及所述子命令对应的页内偏移确定对应的子地址信息。
12、在一种可能的实现方式中,所述子命令对应的子数据大小小于或等于所述可传输数据大小。
13、在一种可能的实现方式中,所述轮询至少一个闪存通道的通道状态,并根据所述通道状态分配子命令,包括:
14、响应于存在通道状态为完全空闲的闪存通道,为所述闪存通道分配一个子任务;
15、响应于不存在通道状态为完全空闲的闪存通道,为至少一个通道状态空闲程度最高的闪存通道分配一个子任务。
16、在一种可能的实现方式中,所述方法还包括:
17、根据预设尺寸划分所述逻辑数据块,得到多个子逻辑数据块;
18、所述闪存通道以所述子逻辑数据块为单位进行数据传输。
19、在一种可能的实现方式中,所述通道状态根据命令计数器计数确定,通道状态对应的计数值越小,空闲程度越高。
20、根据本公开的第二方面,提供了一种控制器,包括:
21、写命令接收模块,用于接收主机内存中的写命令,并获取所述写命令对应的数据大小和地址表单;
22、nand闪存控制器,用于根据用于数据传输的闪存通道对应的可传输数据大小,以及所述写命令对应的数据大小拆分所述写命令,得到至少一个子命令;
23、prp指针计算模块,用于确定每个所述子命令对应的子地址信息;
24、prp地址读取模块,用于根据所述子地址信息获取所述子命令对应的逻辑数据块存储地址;
25、写数据模块,用于根据所述逻辑数据块存储地址,从所述主机内存中读取对应的逻辑数据块;
26、所述nand闪存控制器,还用于接收所述逻辑数据块并将所述逻辑数据块写入对应的闪存通道,以通过所述闪存通道将所述逻辑数据块写入nand闪存。根据本公开的第三方面,提供了一种数据传输系统,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为在执行所述存储器存储的指令时,实现上述方法。
27、根据本公开的第四方面,提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,其中,所述计算机程序指令被处理器执行时实现上述方法。
28、根据本公开的第五方面,提供了一种计算机程序产品,包括计算机可读代码,或者承载有计算机可读代码的非易失性计算机可读存储介质,当所述计算机可读代码在电子设备的处理器中运行时,所述电子设备中的处理器执行上述方法。
29、在本公开实施例中,在接收到待处理的写命令的情况下获取写命令对应的数据大小和地址表单,根据用于数据传输的闪存通道对应的可传输数据大小,以及写命令对应的数据大小拆分写命令得到至少一个按顺序执行的子命令,每个子命令具有对应的子数据大小以及对应的子地址信息。轮询至少一个闪存通道的通道状态,在闪存通道的通道状态为空闲的情况下,为闪存通道分配子命令。根据子命令对应的子地址信息获取逻辑数据块,并通过闪存通道将逻辑数据块写入nand闪存。本公开通过划分写命令的方式,在实现多个闪存通道并行写入的同时避免了硬件需要存储一个或多个闪存通道上的全部写入数据,从而降低写数据缓存空间的需求。
30、根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。
1.一种数据传输方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述地址表单包括待写入数据的起始地址,以及包括在所述起始地址之后的多个待写入数据的存储地址的数据地址列表。
3.根据权利要求2所述的方法,其特征在于,所述确定所述子命令对应的子地址信息,包括:
4.根据权利要求1-3中任意一项所述的方法,其特征在于,所述子命令对应的子数据大小小于或等于所述可传输数据大小。
5.根据权利要求1-4中任意一项所述的方法,其特征在于,所述轮询至少一个闪存通道的通道状态,并根据所述通道状态分配子命令,包括:
6.根据权利要求1-5中任意一项所述的方法,其特征在于,所述方法还包括:
7.根据权利要求1-6中任意一项所述的方法,其特征在于,所述通道状态根据命令计数器计数确定,通道状态对应的计数值越小,空闲程度越高。
8.一种控制器,用于实现权利要求1-7中任意一项所述的方法,其特征在于,包括:
9.一种数据传输系统,其特征在于,包括主机内存、主机内存接口(如pcie接口)、控制器、闪存接口和nand闪存,用于通过控制器执行权利要求1-7中任意一项所述的方法,以通过pcie接口从主机内存中获取逻辑数据块,并通过闪存接口将逻辑数据块写入nand闪存。
10.一种非易失性计算机可读存储介质,其上存储有计算机程序指令,其特征在于,所述计算机程序指令被处理器执行时,所述处理器中的控制器实现权利要求1至7中任意一项所述的方法。
