数据访问的方法、装置、设备和存储介质
技术领域
本公开的实施例主要涉及数据存储领域,并且更具体地,涉及用于数据访问的方法、装置、设备和计算机可读存储介质。
背景技术
随着技术的发展,软硬件协同设计已经开始在各个不同的领域应用。不同于传统的纯软件设计和纯硬件设计,软硬件协同设计基友软件可编程的灵活性,又能利用硬件的并行处理和流水线处理来提高数处理效率。
在软硬件协同系统中,可能存在多个协处理器,并且部分协处理器在工作过程中可能同时访问同一个存储设备,因此,如何提高存储设备的访问效率已经成为关注的一个焦点。
发明内容
根据本公开的示例实施例,提供了一种用于数据访问的方案。
在本公开的第一方面中,提供了一种用于数据访问的方法。该方法包括获取针对存储设备的第一访问请求和第二访问请求;将与第一访问请求相关联的第一数据从源设备中加载到预分配的缓冲区中,缓冲区具有与存储设备的单个物理存储块相同的大小;确定与第二访问请求相关联的第二数据的第一大小是否小于缓冲区的可用空间的第二大小;响应于确定第一大小不小于第二大小,确定第二数据中的第一部分,第一部分具有与可用空间相同的大小;以及向与第一访问请求和第二访问请求相关联的目标设备提供第一数据和第一部分。
在本公开的第二方面中,提供了一种用于数据访问的装置。该装置包括获取模块,被配置为获取针对存储设备的第一访问请求和第二访问请求;第一加载模块,被配置为将与第一访问请求相关联的第一数据从源设备中加载到预分配的缓冲区中,缓冲区具有与存储设备的单个物理存储块相同的大小;第一确定模块,被配置为确定与第二访问请求相关联的第二数据的第一大小是否小于缓冲区的可用空间的第二大小;第二确定模块,被配置为响应于确定第一大小不小于第二大小,确定第二数据中的第一部分,第一部分具有与可用空间相同的大小;以及第一提供模块,被配置为向与第一访问请求和第二访问请求相关联的目标设备提供第一数据和第一部分。
在本公开的第三方面中,提供了一种设备,包括一个或多个处理器;以及存储装置,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现根据本公开的第一方面的方法。
在本公开的第四方面中,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现根据本公开的第一方面的方法。
应当理解,发明内容部分中所描述的内容并非旨在限定本公开的实施例的关键或重要特征,亦非用于限制本公开的范围。本公开的其它特征将通过以下的描述变得容易理解。
附图说明
结合附图并参考以下详细说明,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标注表示相同或相似的元素,其中:
图1示出了常规的软硬件协同片上系统的示意图;
图2示出了根据本公开的一些实施例的存储系统的示意图;
图3示出了根据本公开的一些实施例的数据访问的方法的流程图;
图4A-图4C示出了根据本公开的一些实施例的对不同数据进行拼接的示意图;
图5示出了根据本公开的实施例的用于数据访问的装置的示意框图;以及
图6示出了能够实施本公开的多个实施例的计算设备的框图。
具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
在本公开的实施例的描述中,术语“包括”及其类似用语应当理解为开放性包含,即“包括但不限于”。术语“基于”应当理解为“至少部分地基于”。术语“一个实施例”或“该实施例”应当理解为“至少一个实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
如上提及的,在软硬件协同片上系统(SoC)系统中,存储设备的访问效率将直接影响整个系统的数据处理效率。图1示出了根据本公开实施例的SoC系统100的示意图。如图1所示,SoC系统100包括嵌入式处理器110,与嵌入式处理器110关联的多个协处理器120-1、120-2、120-3和120-N(统称或单独称为协处理器120),以及多个存储设备130-1、130-2和130-M(统称或单独称为存储设备130)。在一些实施例中,存储设备130可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)或随机存取存储器(RAM)等。
如图1所示,多个协处理器(诸如存储设备120-1和存储设备120-2)可以与单个存储设备(诸如存储设备130-1)相关联,因此可能存在协处理器120-1和协处理器120-2对存储设备130-1的同时访问。因此,如何提高存储设备130的访问效率成为SoC系统100的关键。
此外,在硬件设计中,存储设备130的最小单元(即存储设备130中单个物理存储块的大小)往往大于操作系统能够处理的单个数据的大小,使得存储设备130的单个物理地址上可以存储多个数据。然而,操作系统往往以单个数据的大小为最小操作单位,这使得存储设备130中的单个物理地址往往包括多个文件地址。例如,处理精度为32位单精度浮点数的操作系统其最小操作单位为4字节,而存储设备130中的最小单元例如可以为16字节。
在这种情况下,当协处理器120在对存储设备130进行大量的连续访问时,其将长时间占用存储设备130的访问端口,而协处理器120每次访问将仅针对文件系统的单个数据大小(例如,4字节),其极大地浪费了存储设备130的可支持访问位宽(16字节),从而导致存储设备130的访问效率低下。
根据本公开的实施例,提供了一种数据访问的方案。在该方案中,在获取针对存储设备第一访问请求和第二访问请求时,存储系统将在于存储设备的最小单元大小相同的缓冲区中写入第一访问请求相关联的第一数据,并确定缓冲区的剩余可用空间的大小是否可以支持与第二访问请求相关联的第二数据,并且在可用空间不足以支持第二数据的情况下,向与第一访问请求和第二访问请求相关联的目标设备提供第一数据和第二数据的第一部分,其中第一部分具有与可用空间相同的大小。基于这样的方式,存储系统可以通过缓冲区将多个访问请求进行组合,从而最大程度利用存储设备的可用位宽。此外,在拼接过程中,只需要向缓冲区中加载一次数据,从而提高了存储系统的访问效率。
以下将结合图2-图4描述根据本公开实施例的数据访问的方案。图2示出了根据本公开的一些实施例的存储系统200的示意图。如图2所示,存储系统200包括协处理器210、数据拼接器220和存储设备230。在一些实施例中,存储设备230可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)或随机存取存储器(RAM)等。例如,存储设备230可以为SoC系统200中的静态随机存取存储器(SRAM)。
如图2所示,协处理器210可以包括解码器212以及数据处理器214。在一些实施例中,协处理器210例如可以从嵌入式处理器接收访问指令。在一些实施例中,该访问指令可以显式地包括需要访问的数据的起始地址,数据的类型和数据的长度等。在接收到该指令后,协处理器210可以利用解码器212对所接收到的指令进行解码,从而将指令中针对文件系统地址的访问请求转换为针对存储设备230的物理地址的多个访问请求。
在一些实施例中,数据拼接器220可以被配置为对多个访问请求所针对的不同数据进行拼接,从而提高存储系统200的效率,其具体拼接过程将在下文结合图3-图4详细描述。在一些实施例中,数据处理器214可以被配置为对数据拼接器220所返回的数据进行处理,例如进行聚合操作。
图3示出了根据本公开的一些实施例的数据访问的方法300的流程图。方法300可以被由存储系统200中的数据拼接器210实施。以下将结合图2所示的存储系统200来描述方法300中所涉及的动作。
在框302,数据拼接器220获取针对存储设备230的第一访问请求和第二访问请求。在一些实施例中,如上文所述,协处理器210可以利用解码器212对接收到的指令进行解码,以转换为针对存储设备230的多个访问请求,并将该多个访问请求发送到数据拼接器220,针对存储设备230的第一访问请求和第二访问请求与同一系统操作指令相关联。
在一些实施例中,第一访问请求和第二访问请求可以为针对存储设备230中的不同物理地址的读请求。在一些实施例中,第一访问请求和第二访问请求可以拥有的连续的目标物理地址。例如,第一访问请求可以读取特定存储块(例如,16字节)中的前4个字节,第二访问请求可以读取该存储块的第5至第8个字节。在一些实施例中,第一访问请求和第二访问请求可以拥有不连续的目标物理地址。例如,第二访问请求可以读取与第一访问请求的目标存储块不同的其他存储块中的数据,或者第二访问请求可以读取与第一访问请求的目标存储块相同的存储块中的不同数据。
在一些实施例中,数据拼接器220可以从协处理器210接收针对存储设备230中的不同物理地址的多个写请求。由于写入到存储设备230中的数据要求是连续的,响应于接收到向存储设备230的多个写请求,数据拼接器220可以从多个写请求中确定第一写请求和第二写请求,其中第一写请求针对的在存储设备230上的目标位置和与第二写请求针对的在存储设备230上的目标位置是连续的。例如,第一访问请求可以为顺序执行的第一个写请求,其针对特定存储块(例如16字节)的前4个字节,为了实现写入的正确执行,第二写入请求的目标物理地址应该与第一写入请求的目标地址连续,例如为该存储块的第5至第8个字节。
在框304,数据拼接器220将与第一访问请求相关联的第一数据从源设备加载到预分配的缓冲区中,缓冲区具有与存储设备230的单个物理存储块对应的大小。在一些实施例中,数据拼接器220可以采用寄存器来构成与存储设备的最小单元相同大小的缓冲区。图4示出了根据本公开的实施例的对不同数据进行拼接的示意图。如图4A所示,例如,与第一访问请求相关联的第一数据410的大小为10字节,缓冲区420的大小与存储器230的最小单元对齐,大小为16字节。
在一些实施例中,数据拼接器220还可以记录参数INDEX,其指示缓冲区420中可用空间的起始位置。在一些实施例中,在第一写入的时候,INDEX默认设置为0,缓冲区320中的全部空间都是可用状态。
在一些实施例中,当第一访问请求为读请求时,数据拼接器220可以从存储设备230中读取第一数据,并将第一数据410加载到缓冲区420中。如图4B所示,数据拼接器220还可以根据第一数据410的大小(10字节)更新INDEX值,例如INDEX被更新为10。
在一些实施例中,当第一访问请求为写请求时,数据拼接器220可以根据协处理器210发送的写入请求,获取与第一访问请求相关联的第一数据410,并确定第一数据410在目标存储块中的偏移量。例如,如果第一数据410在为目标存储块(16字节)中的第5至第8个字节,则其偏移量为5。在将第一数据410写入到缓冲区420中前,数据拼接器220可以根据该偏移量更新INDEX值,例如,更新为5。随后,数据拼接器220可以以该INDEX指示的起始位置写入第一数据410,例如,将第一数据410的4个字节写入到缓冲区420中第5至第8个字节。随后,如图4B所示,数据拼接器220还可以根据第一数据310的大小(10字节)更新INDEX值,例如INDEX被更新为15。
继续参考图3,在框306,数据拼接器220确定与第二访问请求相关联的第二数据的第一大小是否小于缓冲区的可用空间的第二大小。在一些实施例中,数据拼接器220可以根据缓冲区420的INDEX值以及缓冲区420的大小来确定缓冲区420的剩余可用空间的大小。例如,在上文所述的读请求的示例中,剩余可用空间的大小为6字节。例如,在上文所述的写请求的示例中,剩余可用空间的大小为2字节。
响应于在框306确定第一大小不小于第二大小,则方法300进行到框308,即数据拼接器220确定与第二访问请求相关联的第二数据的第一大小是否小于缓冲区的可用空间的第二大小。继续图4的示例,如图4B所示,例如,第二数据430例如同样为10字节大小,此时第二数据430的大小大于缓冲区420的可用空间。以下将分别针对读请求和写请求的情形,描述框308的具体过程。
继续上文所述的第一访问请求和第二访问请求为读请求的示例。在一些实施例中,例如,数据拼接器220可以基于INDEX和缓冲区420的大小确定可用空间的大小为6字节,其小于第二数据430的大小(例如,10字节)。随后,数据拼接器220可以根据可用空间的大小(6字节)来将第二数据430分成两个部分,第一部分432具有与可用空间相同的大小(6字节),第二数据430中的剩余部分构成第二部分(4字节)。此时,第一数据410和第二数据430的第一部分432构成了存储设备230的最小单元(16字节)的大小。
继续上文所述的第一访问请求和第二访问请求为写请求的示例。在一些实施例中,例如,数据拼接器220可以基于INDEX和缓冲区420的大小确定可用空间的大小为2字节,其小于第二数据430的大小(例如,10字节)。随后,数据拼接器220可以根据可用空间的大小(2字节)来将第二数据430分成两个部分,第一部分432具有与可用空间相同的大小(2字节),第二数据430中的剩余部分构成第二部分(8字节)。此时,第一数据410和第二数据430的第一部分432构成了存储设备230的最小单元(16字节)的大小。
继续参考图3,在框310,数据拼接器220向与第一访问请求和第二访问请求相关联的目标设备提供第一数据和第一部分432。
继续上文所述的第一访问请求和第二访问请求为读请求的示例,在这种情况下,源设备为存储器230,目标设备为协处理器210。在一些实施例中,数据拼接器220可以向协处理器210中的数据处理器214提供缓冲区420中所存储的第一数据410以及第二数据430的第一部分432。通过这样的方式,既解决了文件系统的最小单元与存储设备230的最小单元的不对齐问题,又不需要将第二数据430的第一部分432读取到缓冲区420中,从而提高了存储系统的读取效率。
在一些实施例中,在完成向协处理器210提供第一数据410和第二数据430的第一部分432后,数据拼接器220可以通过将INDEX重置为0,来将缓冲区420的可用空间更新为缓冲区420的全部空间。在一些实施例中,数据拼接器220可以将第二数据430的第二部分434写入到缓冲区420中,并基于第二部分434的大小(4字节)更新INDEX值,例如更新为4。
在一些实施例中,数据拼接器220随后可以确定是否接收到与第一访问请求和第二访问请求相关联的指令中的第三访问请求,其中第三访问请求的类型与第一访问请求和第二访问请求的类型相同(在该示例中均为读请求)。如果数据拼接器220确定未接收到第三访问请求,数据拼接器220可以将缓冲区420中的有效数据(例如,第二部分434)发送到协处理器210,从而完成了对该指令的全部响应。如果数据拼接器220确定接收到第三访问请求,数据拼接器220可以按照上述方法继续执行对新的读请求的数据拼接,在此不再详述。
在一些实施例中,数据拼接器220可以向存储设备230的目标存储块中写入缓冲区420中所存储的第一数据410以及第二数据430的第一部分432。在一些实施例中,数据拼接器220可以根据缓冲区420中有效数据的区间来生成掩码信号。例如,在上文的示例中,缓冲区420中的前4位中没有有效数据,因此可以通过掩码信号来通知存储设备230不对对应的存储块中的前4位执行数据写入。通过这样的方式,既解决了文件系统的最小单元与存储设备230的最小单元的不对齐问题,又不需要将第二数据430的第一部分432写入到缓冲区420中,从而提高了存储系统的写入效率。
继续上文所述的第一访问请求和第二访问请求为写请求的示例,在这种情况下,源设备为协处理器210,目标设备为存储器230。在一些实施例中,在完成向存储设备230写入第一数据410和第二数据430的第一部分432后,数据拼接器220可以通过将INDEX重置为0,来将缓冲区420的可用空间更新为缓冲区420的全部空间。在一些实施例中,数据拼接器220可以将第二数据430的第二部分434写入到缓冲区420中,并基于第二部分434的大小(8字节)更新INDEX值,例如更新为8。
在一些实施例中,数据拼接器220随后可以确定是否接收到与第一访问请求和第二访问请求相关联的指令中的第三访问请求,其中第三访问请求的类型与第一访问请求和第二访问请求的类型相同(在该示例中均为写请求)。如果数据拼接器220确定不存在第三访问请求,数据拼接器220可以将缓冲区420中的有效数据(例如,第二部分434)写入到存储设备230,从而完成了对该指令的全部响应。如果数据拼接器220确定存在第三访问请求,数据拼接器220可以进一步确定是否有目标地址与第二部分434的地址连续的写入请求,如果数据拼接器220确定存在新的访问请求,数据拼接器220可以按照上述方法继续执行对新的访问请求的数据拼接,在此不再详述。如果不存在地址连续的写入请求,则数据拼接器220可以将缓冲区420中的有效数据(例如,第二部分434)写入到存储设备230,并开始执行下一个未执行的写入请求。
响应于在框306确定第一大小小于第二大小,则方法300进行到框312,即数据拼接器220将所述第二数据写入到所述缓冲区的所述可用空间中。在一些实施例中,例如当第二数据430小于缓冲区420的可用空间的大小时,数据拼接器可以将第二数据430直接写入到缓冲区420的可用空间中,并基于第二数据430的大小更新INDEX值,例如,第二数据430的大小为4字节,原INDEX为10,则更新后的INDEX为14。
在一些实施例中,数据拼接器220可以判断是否还有新的可拼接的访问请求,当确定存在新的访问请求时,数据拼接器220可以基于上述的方案来根据缓冲区420和新的INDEX继续执行数据拼接操作。当确定不存在新的访问请求时,数据拼接可以直接将缓冲区420中的有效数据提供给与第一访问请求和第二访问请求相关联的目标设备,从而完成了对指令的全部响应。
通过上文所述的方案,本公开的数据访问方案解决了硬件地址空间和软件地址空间不对齐的问题,从而提高了存储系统的响应效率。此外,本文的方案通过设置独立的数据拼接器,使得该独立的数据拼接器可以被附加到不支持非对齐访存的协处理器,从而大大提高了方案的可扩展性。
图5示出了根据本公开的实施例的用于数据访问的装置500的方框图。装置500可以被包括在图2的数据拼接器220中或者被实现为数据拼接器220。如图5所示,装置500包括获取模块510,被配置为获取针对存储设备的第一访问请求和第二访问请求。装置500还包括第一加载模块520,被配置为将与第一访问请求相关联的第一数据从源设备中加载到预分配的缓冲区中,缓冲区具有与存储设备的单个物理存储块相同的大小。装置500还包括第一确定模块530,被配置为确定与第二访问请求相关联的第二数据的第一大小是否小于缓冲区的可用空间的第二大小。装置500进一步包括第二确定模块540,被配置为响应于确定第一大小不小于第二大小,确定第二数据中的第一部分,第一部分具有与可用空间相同的大小。此外,装置500还包括第一提供模块550,被配置为向与第一访问请求和第二访问请求相关联的目标设备提供第一数据和第一部分。
在一些实施例中,装置500还包括:更新模块,被配置为响应于完成向目标设备提供第一数据以及第一部分,将缓冲区的可用空间更新为缓冲区的全部空间;以及第二加载模块,被配置为在更新的可用空间中加载第二数据中与第一部分不同的第二部分。
在一些实施例中,装置500还包括:第三确定模块,被配置为确定是否接收到与第一访问请求和第二访问请求相关联的指令中的第三访问请求,第三访问请求的类型与第一访问请求和第二访问请求的类型相同;以及第二提供模块,被配置为响应于确定未接收到第三访问请求,将第二部分提供给目标设备。
在一些实施例中,装置500还包括:第三加载模块,被配置为响应于第一大小小于第二大小,将第二数据加载到缓冲区的可用空间中。
在一些实施例中,装置500还包括:第四确定模块,被配置为确定是否接收到与第一访问请求和第二访问请求相关联的指令中的第三访问请求,第三访问请求的类型与第一访问请求和第二访问请求的类型相同;以及第三提供模块,被配置为响应于确定未接收到第三访问请求,将第一数据和第二数据提供给目标设备。
在一些实施例中,其中第一访问请求和第二访问请求为读请求,源设备为存储设备。
在一些实施例中,其中第一访问请求和第二访问请求为写请求,目标设备为存储设备,其中第一访问请求针对的在存储设备上的第一目标位置和与第二访问请求针对的在存储设备上的第二目标位置是连续的。
图6示出了可以用来实施本公开的实施例的示例设备600的示意性框图。如图所示,设备600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的计算机程序指令或者从存储单元608加载到随机访问存储器(RAM)603中的计算机程序指令,来执行各种适当的动作和处理。在RAM 603中,还可存储设备600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
设备600中的多个部件连接至I/O接口605,包括:输入单元606,例如键盘、鼠标等;输出单元607,例如各种类型的显示器、扬声器等;存储单元608,例如磁盘、光盘等;以及通信单元609,例如网卡、调制解调器、无线通信收发机等。通信单元609允许设备600通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
处理单元601执行上文所描述的各个方法和处理,例如过程300。例如,在一些实施例中,过程300可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元608。在一些实施例中,计算机程序的部分或者全部可以经由ROM 602和/或通信单元609而被载入和/或安装到设备600上。当计算机程序加载到RAM 603并由CPU 601执行时,可以执行上文描述的过程300的一个或多个步骤。备选地,在其他实施例中,CPU 601可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行过程300。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)等等。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
此外,虽然采用特定次序描绘了各操作,但是这应当理解为要求这样操作以所示出的特定次序或以顺序次序执行,或者要求所有图示的操作应被执行以取得期望的结果。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实现中。相反地,在单个实现的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实现中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。