在纠删码编码期间的CPU错误修复的制作方法

文档序号:16530912发布日期:2019-01-05 10:45阅读:156来源:国知局
在纠删码编码期间的CPU错误修复的制作方法

本公开涉及数据编码。

在使用纠删码对要存储的数据进行编码期间,计算与编码数据相关联的奇偶校验的计算系统可以引入最终传播到存储介质并且位于此处未被检测到的错误。尽管会发生其他错误,但是通常可以引入到数据中的常见错误包括系统总线错误、内部总线错误、缓存位翻转错误和内存位翻转错误。

因为计算机存储系统中可以出现的错误可以不被检测到地发生,所以它们对数据的持久性和完整性造成威胁,并且因此,产生与要存储的原始数据不同的数据。

一些现有系统可以通过在诸如2-伽罗瓦域(gf(2))的低阶伽罗瓦域上对数据进行纠删编码来检测上述错误,并且对纠删编码的数据应用循环冗余校验(crc)操作以验证正在存储的数据是否有效。更具体地,这些现有系统使用crc算法,其利用低阶伽罗瓦域上的线性特性来检测错误(例如,使用等于1的系数)。这种线性特性可以用于使用逐位运算从输入数据的crc预测生成的奇偶校验的crc。

然而,考虑到电子和数字设备技术,正在处理和存储的数据量正在迅速增加,并且错误的数量和验证该数据的完整性所需的处理量也是如此。由这些现有系统使用的方法不能以相同的速率升级,并且可以导致处理瓶颈和高计算资源成本。

更进一步地,为了编码和crc生成过程,仅使用诸如256-伽罗瓦域(gf(256))的高阶伽罗瓦域代替低阶伽罗瓦域(例如(gf(2)))不足以解决升级问题,因为这样的高阶crc函数本身并未展现出上述用于低阶伽罗瓦域上的crc的线性特性,并且因此,不适合逐位操作(例如,像xor)。



技术实现要素:

本公开涉及生成用于验证纠删编码的数据的完整性的离散循环冗余校验(crc)。根据本公开的主题的一个创新方面,系统包括多个存储设备以及通信地耦接到多个存储设备的存储逻辑。存储逻辑可执行以接收具有多个有序块的数据向量。存储逻辑可执行以将数据向量转置为一组子向量,在一些情况下称其为数据列。存储逻辑可执行以分别基于该组子向量生成一组离散crc。离散crc共同形成具有多个crc列的crc矩阵。存储逻辑可执行以将与crc矩阵相关联的一组离散crc转置为一组混合crc。存储逻辑进一步可执行以将混合crc压缩成简化crc,其可以和与数据向量相关联的奇偶校验crc进行比较以验证数据向量的完整性。

在另一个创新方面,方法可以包括:接收数据向量,该数据向量包括多个有序块;将数据向量转置为一组子向量,每个子向量包括来自每个有序块的对应数据元素;分别基于该组子向量生成一组离散crc;将该组离散crc转置为一组混合crc,每个混合crc包括来自每个离散crc的crc数据元素;以及将该组混合crc压缩成简化crc,其可以和与数据向量相关联的奇偶校验crc进行比较以验证数据的完整性。

一个或多个这些方面的其他实施方式包括被配置为执行方法的动作的对应的系统、装置以及计算机程序,这样的方面具有编码在计算机存储设备上的方法。

这些和其他实施方式可以可选地包括以下特征中的一个或多个,诸如但是不限于:有序块包括具有分别包含顺序数据元素的多个顺序列的数据行;将每个有序块的数据行转置成数据列;数据列具有多个分别包含顺序数据元素的顺序行;每个有序块的数据列共同形成转置数据矩阵;转置数据矩阵包括多个混合的顺序行;多个混合的顺序行中的每个混合的顺序行包括在对应层(tier)的一组第一顺序行;该组第一顺序行包括来自在对应层的每个有序块的对应数据元素;该组子向量包括包括多个顺序行的数据矩阵;每个顺序行包括一组混合数据元素,该组数据元素包括来自每个有序块的对应数据元素;分别基于该组子向量生成该组离散crc包括:使用来自顺序行的该组混合数据元素生成用于该数据矩阵的顺序行的每个顺序行的离散crc;离散crc可以是crc32c;将该组离散crc转置为一组混合crc可以包括将8个32位的crc转置为32字节的数据向量;将该组混合crc压缩成简化crc可以包括对该组混合crc应用压缩函数以获取简化crc;压缩函数可以包括高次多项式;高次多项式可以包括具有四次或更多次的多项式;数据向量可以包括相关联的奇偶校验;奇偶校验crc是使用相关联的奇偶校验生成的;奇偶校验crc可以与简化crc进行比较;并且可以基于将奇偶校验crc与简化crc进行比较来确定错误。

本文公开的技术在多个方面是有利的。例如,在使用在较高域(例如,gf(2))上定义的码诸如在gf(2^8)上构建的编码的系统中,其中适用于gf(2)的线性逐位数据验证操作(例如,数据crc的xor)不再应用,公开的技术可以更有效且可靠地确保如果在数据的编码期间出现计算错误,可以不必重新编码所有数据(这在计算上是昂贵的)而检测到它们。作为进一步的示例,技术可以有利地用于在较高域上定义的码提供线性crc函数,诸如具有f(p+a·d)=f(p)+a·f(d)的特性的crc函数,其中d是数据向量,p是奇偶校验,并且a是大于1的系数(例如,诸如gf(2^8)中的蜘蛛码系数)。这是有益的,因为在一些应用中,技术可以使用现有的计算crc的有效cpu内指令,并且因此,保持与现有的中央处理单元(cpu)架构的兼容性。

然而,应该理解的是,上面的特征和优点列表并非全包括的,并且许多附加特征和优点是经考虑的并且落入本公开的范围内。此外,应该理解的是,本公开中使用的语言主要是为了可读性和指导性目的而选择的,而不是为了限制本文公开的主题的范围。

附图说明

图1是示例数据存储系统的框图。

图2a图示了用于处理数据的示例系统。

图2b图示了cpu缓存和存储设备之间的示例数据通信。

图2c图示了示例存储逻辑。

图3是用于从数据向量生成简化crc的示例方法的流程图。

图4是用于使用数据矩阵的顺序行生成离散crc的示例方法的流程图。

图5是用于获取简化crc的示例方法的流程图。

图6是用于比较简化crc与奇偶校验的示例方法的流程图。

图7是示出用于从数据向量生成简化crc的示例过程的数据流图。

具体实施方式

本文公开的创新技术包括用于检测纠删编码数据中的错误的各个方面,诸如系统、方法、装置、计算机可读介质、计算机程序产品等。通过克服先前的系统经历的许多低效,本文公开的方面提供了对先前的存储系统的各种改进。举例来说,本文公开的创新技术可以更可靠地保证,如果在编码期间任何地方发生错误,它可以在该事实发生后被检测到,而不需要重新编码底层数据(这通常是复杂的且计算上昂贵)。

为了进一步图示该技术的各种优点,现在描述图7中描绘的非限制性实施例,其参考图1和图2的元件,图1和图2在本文的其他地方详细描述。具体地,图7是示出用于从数据向量生成简化循环冗余校验(crc)的示例过程的数据流图。crc是用于检测对数据的无意变化的错误检测码,数据的无意变化可以由如本文其他地方所讨论的各种因素引起。

数据向量是诸如有序数据块(ordereddatablocks)的数据元素的序列。如图7所示,在一些实施例中,数据向量700可以包括多个有序块(orderedblocks)702a、702b、...、702n(还统称为或单独地简称为702)。有序块702是包括多个诸如但是不限于包括在有序块702a中的d1,1、d1,2、…d1,z的顺序数据元素的数据结构。有序块702的顺序数据元素共同形成数据行。由于数据元素是顺序的,因此可以将它们视为属于顺序层(sequentialtier)。例如,第一数据元素d1,1属于第一层(层1),第二数据元素d1,2属于第二层(层2),第z数据元素d1,z属于第z层(层z)等等。

该技术包括可以处理数据向量以产生新颖的、压缩的crc的系统200,其可以使用该crc以更有效地验证数据。例如,如以下参照图2a所讨论,系统200可以包括存储逻辑104,该存储逻辑104包括数据接口211、数据转置器212以及crc生成器213。

数据接口211可以接收数据向量700,并且数据转置器212可以将数据向量700的有序块702a、702b、...、702n转置(701a、701b、...、701n)为一组数据列705a、705b、...、705n(还统一地或单独地简称为705)。每个数据列705包括来自对应的有序块702的一组顺序数据元素。

一旦经转置,子向量705/数据列形成包括多个子向量的转置数据矩阵740,其反映为顺序行704a、...、704n。每个顺序行包括来自每个数据列(子向量705)的数据元素。由于每个顺序行包括来自数据列的数据元素的混合(每个数据元素来自每个列),因此在本文中有时将其称为混合顺序行。更具体地,每个顺序行包括属于对应层的数据元素。例如,第一顺序行704a包括来自每个有序块702的第一层的数据元素(d1,1、d2,1、…dn,1);第二顺序行(未示出)包括来自每个有序块702的第二层的数据元素(d1,2、d2,2、…dn,2);直到第z顺序行704z,其包括来自每个有序块702的第z层的数据元素(d1,z、d2,z、…dn,z)。

crc生成器213可以使用数据矩阵740的顺序行生成(703a、...703z)离散crc。在生成离散crc时,crc生成器对数据矩阵的给定行执行crc操作,并将来自crc操作的结果存储在crc矩阵的对应行。如图所示,对应于数据矩阵的行704a的所生成的离散crc是crc矩阵的行706a;对应于数据矩阵的行704z的所生成的离散crc是crc矩阵的行706y,等等。在一些实施例中,crc生成器213可以通过将来自数据矩阵740的每一行的数据元素映射到它生成的并且形成crc矩阵720的对应行的对应crc来执行上述crc操作。在一些情况下,可以基于一种或多种crc算法来执行crc操作。crc算法的非限制性示例包括crc32c,尽管其他合适的算法也适用。

如图所示,crc矩阵720包括多个列707a、707b、...、707j(还统一地为或单独地简称为707)。crc矩阵720的多个列可以由数据转置器212转置(711a、711b、...711j)为一组混合crc730。该组混合crc730包括crc块708a、708b、...、708j(还统一地或单独地简称为708)。每个crc块708包括来自crc矩阵的列707的crc数据元素。例如,crc块708a包括来自crc矩阵720的列707a的crc元素c1,1、c2,1、…cy,1;crc块708b包括来自crc矩阵720的列707b的crc元素c2,1、c2,2、…cy,2;crc块708j包括来自crc矩阵720的列707j的crc元素c1,j、c2,j,…cy,j等等。

crc生成器213可以将压缩函数应用(709a、709b、...、709j)于该组混合crc730以获取简化crc710。简化crc具有多个简化的crc元素710a、...、710j。可以由crc生成器213将压缩函数应用(709a、709b、...709j)到crc块708a、...708j以获取简化的crc元素710a、710b、...、710j。

在一些实施例中,由crc生成器213应用压缩函数可以涉及以高次多项式划分一组混合crc708中的每个crc块以获取简化crc710。在一些情况下,高次多项式可以包括具有四次或更多次的多项式。一组混合crc的每个crc块可以由其被划分的示例高次多项式是在256-伽罗瓦域即gf(256)上的4次多项式。如本文其他地方所述,通过将简化crc和与数据向量700相关联的奇偶校验crc进行比较,可以使用简化crc以检测在诸如纠删码编码的操作期间任何地方可能发生的错误。

图1是能够提供本文所述的存储和crc相关动作、结构和功能的示例存储系统100的框图。在所描绘的实施例中,存储系统100可以包括存储逻辑104以及一个或多个存储设备110a、110b、...、110n。应该注意的是,术语“存储介质”和“存储设备”可以在本公开中通篇互换地使用,以指代在其上存储数据的物理介质。存储逻辑104和一个或多个存储设备110a、110b、...110n经由信号线126a、126b、...126n通信地耦接。进一步地,在所示实施例中,存储逻辑104进一步经由信号线124通信地连接到诸如内部和/或外部系统、计算机网络、远程系统元件等(未示出)的其他系统100元件。

例如,信号线124可以表示包括串行高级技术附件(sata)总线、串行附接的scsi(sas)、外围部件互连(pci)、高速pci(pcie)或用于在计算的组件和/或存储设备之间和/或在完全不同的组件之间传输数据的任何其它合适类型的内部和/或外部通信总线的计算机总线。作为进一步的示例,计算机总线可以通信地连接到计算机系统的主机总线。应该认识到的是,存储逻辑块可以表示分布式架构或者在其他情况下包括多个存储逻辑104元件。为了简化和易于理解,由存储系统100执行的系统配置和操作在单个存储逻辑104的上下文中描述,尽管应该理解的是,存储逻辑104可以是耦接用于通信的多个组件。进一步地,包括存储逻辑104的示例和一组一个或多个存储设备110的多个安装可以包括在系统100中。各种其他合适的配置也是可能的并且经考虑的。

然而,本公开不限于这种配置,并且可以部署各种不同的系统环境和配置并且其在本公开的范围内。其他实施例可以包括更多或更少的组件。

为了方便起见,在附图中,在附图标记之后的字母的指示,例如“110a”,可以是对由特定附图标记指定的元件或组件的特定参考,而在文本中出现的其后没有字母的附图标记,例如“110”,可以是对具有该通用附图标记的元件或组件的不同实施例的一般参考。

在一些实施例中,存储逻辑104可以实现纠删码、奇偶校验检查、crc生成、读取、写入、更新、删除、垃圾回收以及其他与存储设备110相关联的存储相关操作。存储逻辑104可以提供计算功能、服务和/或资源以发送、接收、读取、写入以及转换来自系统100的其他实体的数据。

在一些实施例中,存储逻辑104可以由被配置为执行本文所述的动作和/或功能的硬件和/或软件逻辑组成。存储逻辑104经由信号线126a、126b、...、126n耦接到存储装置110a、110b、...、110n,用于与存储系统100的存储装置110a、110b、...、110n进行通信和合作。

在一些实施例中,存储逻辑104可以包括附加的组件,其未在图1中示出以简化附图。而且,在一些实施例中,并非所有示出的组件都可以存在。进一步地,各种控制器、模块和接口可以以任何合适的方式实现。例如,存储逻辑104可以采用例如微处理器或处理器和存储了可由(微)处理器、逻辑门、开关、专用集成电路(asic)、可编程逻辑控制器、嵌入式微控制器等执行的计算机可读程序代码(例如,软件或固件)的计算机可读介质中的一个或多个的形式,如本文其他地方所讨论。例如,参照图2a,存储逻辑可以包括存储在存储器104和/或cpu缓存210中的指令;可以包括耦接到总线230的硬件(例如,包括和/或不包括固件)用于与处理器202、存储器204、和/或其他组件等通信;和/或可以包括耦接到和/或并入到计算单元205的硬件(例如,包括和/或不包括固件);和/或以另一种合适的形式来实现。

存储设备110包括非暂态计算机可用(例如,可读、可写等)介质,其可以是可以包含、存储、传递、传播或传输指令、数据、计算机程序、软件、代码例程等的任何非暂态装置或设备,用于由处理器处理或与处理器相关连处理。尽管在各种实施例中,存储设备110描述为包括固态存储器(例如,闪存),但是应该理解的是,在一些实施例中,存储设备110可以包括具有合适特性的其他非易失性存储设备、hdd、混合存储设备等。进一步的示例存储设备可以包括动态随机存取存储器(dram)设备、静态随机存取存储器(sram)设备、磁带、基于光盘的存储器或一些其他非易失性存储设备。

在一些情况下,存储逻辑104和/或存储设备110可以集成到单个存储设备中。在进一步的情况下,存储逻辑104可以被实现为诸如raid控制器的控制器,并且存储设备110可以包括连接到控制器的多个设备。在一些情况下,存储系统100可以是跨越几个地理区域的分布式存储系统。例如,存储逻辑104可以包括在分布式存储系统100中的一个或多个服务器节点上实现的应用编程接口(api)。因此,控制线124可以反映在互联网协议(ip)上操作的传输协议(transportprotocol)。在这样的示例中,存储设备110可以包括分散在几个地理区域上的几个其他服务器节点,并且控制线126还可以包括在ip上操作的传送协议(transferprotocol),尽管用于传送数据的其他协议也是经考虑的。

图2a图示了用于处理数据的示例系统。系统200包括经由数据总线220通信地耦接到一个或多个存储设备110的计算设备201。

计算设备201可以包括经由数据总线230通信地耦接到存储器204、通信单元207和/或其他组件(未示出)的处理器202。如图所示,处理器可以包括具有多个临时存储位置201a、201b、201c、...、201n的cpu缓存210,其经由数据总线203耦接到计算单元205。计算单元205可以从cpu缓存210检索(retrieve)数据,基于来自存储逻辑104的指令对数据执行操作,并且将来自操作的结果存储回cpu缓存210中。在一些实施例中,计算单元205可以通过经由数据总线203从cpu缓存210检索数据、基于纠删码编码算法对数据进行编码、并且将编码数据存储回cpu缓存210来执行纠删码编码。

存储逻辑104可以包括可由计算单元205执行的各种子组件,以使得计算单元205执行各种操作。例如,如图2c所示,存储逻辑104可以包括数据接口211、数据转置器212以及crc生成器213。数据接口211包括用于从一个或多个位置中检索和/或将数据存储在一个或多个位置的软件和/或硬件逻辑,所述一个或多个位置包括cpu缓存210、存储器204和/或存储设备110,如本文其他地方所述。数据转置器212包括用于转置数据的软件和/或硬件逻辑,如本文其他地方所述。crc生成器213包括用于生成crc的软件和/或硬件逻辑,如本文其他地方所述。

数据可以经由计算设备201的数据总线230在存储器204和cpu缓存210之间传递。另外,数据还可以经由通信地耦接到数据总线220和230的通信单元207在存储设备110n和cpu缓存210之间传递。

尽管在图2a中描述了特定的处理器202配置,但是应该理解的是,其他处理器202配置也由本公开所涵盖。例如,处理器202可以包括具有一个或多个算术逻辑单元、微处理器、通用目的控制器或一些其他处理器阵列的任何处理器,以执行计算并向显示设备提供电子显示信号。在一些实施例中,处理器202包括具有一个或多个处理核的硬件处理器。处理器202耦接到总线230用于与其他组件通信。处理器202处理数据信号并且可以包括包括复杂指令集计算机(cisc)架构、精简指令集计算机(risc)架构或实现指令集组合的架构的各种计算体系结构。尽管在图2a的示例中仅示出处理器202的单个块,但是多个处理器和/或处理核可以包括处理器202。

存储器204和/或cpu缓存210可以存储可以由定制处理器(例如,处理器202)执行的指令和/或数据。存储器204和/或cpu缓存210被耦接用于与计算设备201的其他组件进行通信。存储在存储器204和/或cpu缓存210中的指令和/或数据可以包括用于执行本文所述的技术的代码。在一些实施例中,存储器204和/或cpu缓存210可以存储体现存储逻辑104或其部分的指令。

存储器204和/或cpu缓存210可以包括一个或多个非暂态计算机可用(例如,可读、可写等)介质,其可以包括可以包含、存储、传递、传播或传输指令、数据、计算机程序、软件、代码、例程等的任何非暂态装置或设备,以由处理器202处理或与处理器202相连处理。例如,非暂态存储器可以包括但是不限于动态随机存取存储器(dram)设备、静态随机存取存储器(sram)设备或另一易失性或非易失性存储设备。

总线220和/或230可以用于在计算设备的组件之间或计算设备、网络总线系统、处理器网格(mesh)、sata、scsi、sas、pci、pcie之间传送数据的通信总线,和/或用于在计算和/或存储设备的组件之间和/或完全不同的组件之间传送数据的任何其他合适类型的内部和/或外部通信总线。在一些实施例中,计算设备(例如,客户端、服务器等)和存储逻辑104可以经由与总线220和/或230相关联地实现的软件通信机制进行协作和通信。软件通信机制可以包括和/或促进例如进程间通信、本地功能或过程调用、远程过程调用、基于网络的通信、安全通信等。

通信单元207可以包括用于与计算设备201(例如,其可以体现存储逻辑104)可以耦接到的计算机网络的有线和无线连接的一个或多个接口设备,诸如客户端设备106、服务器、数据源、数据存储设备110等。例如,通信单元207可以包括但是不限于:cat型接口;用于使用wi-fitm发送和接收信号的无线收发器;蜂窝通信等;总线接口;usb接口;专有连接类型(proprietaryconnectiontype);它们的各种组合;等等。在一些实施例中,通信单元207可以将处理器202链接到网络,其反过来可以耦接到其他处理系统。通信单元207可以使用包括例如本文其他地方所讨论的那些协议的各种标准通信协议提供与网络和系统100的其他实体的其它连接。

在各种实施例中,计算设备201可以包括进一步的组件,诸如一个或多个图形处理器;高分辨率触摸屏;物理键盘;前置和后置脸部摄像头;模块;存储适用固件的内存;和/或各种物理连接接口(例如,hdmi、耳机插孔等);等等。另外,用于管理计算设备201的硬件和资源的操作系统、用于向硬件和资源提供应用访问的应用编程接口(api)、用于生成并显示用于用户交互和输入的界面的用户接口模块(未示出)、以及包括例如用于控制文档、图像、电子邮件的应用和用于网页浏览等的应用的应用,可以在计算设备201上存储和操作。

如在

背景技术:
中所讨论,在数据处理期间,在一些情况下可能发生计算系统错误,其可能会将无意的错误引入要存储在存储设备110中的数据。例如,在处理计算单元205和cpu缓存210之间经由数据总线203(参见图2a)传递数据的过程期间,信号和/或其它错误可以破坏和/或改变数据。

在进一步的示例中,在存储过程期间可能发生错误,如图2b所示。如图所示,cpu缓存210可以包括多个存储位置(标记为201a、201b、201c、...、201n),并且存储设备110n可以包括多个存储位置(202a、202b、202c、...、202n)。计算单元205可以在cpu缓存位置和存储设备110位置之间传递数据。例如,信号线209a、209b、...、209n可以表示经由数据总线220和230和/或通信单元207传递的数据。

在缓寸210和/或存储设备110(例如,110n)之间的数据通信期间,诸如内存位翻转错误的错误可以在存储到意向存储库(例如,201a、201b,202c等)之前被引入到数据中。更具体地,cpu缓存210可以接收来自存储设备110n的位置202a和202b的数据,如信号线209a和209b所示,并且提供用于存储到位置202c的数据,如信号线209c所示。例如,当从位置202a检索数据b,并将其作为b’存储在位置201b中时;当从位置202b检索数据a,并将其作为a’存储在位置201a中时;和/或当从位置201c检索数据c,并将其作为c’存储在位置202c中时,则可能引入错误。这些错误还适用于存储器204和/或其他组件,如本文其他地方所述。

图3是用于从数据向量生成简化crc的示例方法300。在框302中,数据接口211可以接收具有多个有序块的数据向量。数据转置器212在304处可以将接收到的数据向量转置为一组子向量。子向量可以包括来自每个有序块的对应数据元素。

在一些实施例中,有序块可以表示为数据行。数据转置器212可以将数据行转置为数据列。数据列可以包含来自其转置的有序块的顺序数据元素。从有序块转置的数据列可以共同形成转置数据矩阵,其相邻地布置数据列,以使得数据列的数据元素逐层对应。转置数据矩阵的每个顺序行可以包括子向量并且包括数据元素分组。

图4描绘了可以在框304中执行的操作400的进一步的示例。具体地,在框402处,数据转置器212可以将具有多个有序块的数据向量转置为一组子向量。该组子向量可以包括形成数据矩阵的多个顺序行。数据矩阵的多个顺序行的每个顺序行包括一组混合数据元素,该组混合数据元素包括来自每个有序块的对应数据元素。

作为参照图7的进一步的示例,数据向量(例如,700)可以包括行(例如,702)的矩阵,并且数据转置器212可以将行转置为列(例如,705)。这些列可以形成其行(例如,704)包括来自每列(例如,705)的数据的衍生矩阵(例如,740)。每行(例如,子向量)中的数据元素包括在对应层处跨数据列的元素的混合,并且因此,可以基于数据列的顺序(order)来排序。例如,第一顺序行可以包括来自每个数据列(第一层)的第一数据元素,第二顺序行可以包括来自每个数据列(第二层)的第二数据元素,等等。

重新参照图3,在框306处,crc生成器213可以分别基于该组子向量生成一组离散crc。在一些实施例中,离散crc可以对应于从数据向量转置的列形成的数据矩阵的行。例如,如图4中的方法400的框404所示,crc生成器213可以生成用于数据矩阵的每个顺序行的离散crc。在一些实施例中,crc生成器213可以使用来自数据矩阵的对应行(例如,704a)的混合数据元素(例如,d1,1、d2,1、…dn,1)来生成给定的离散crc。crc生成器213可以使用任何合适的crc算法来生成crc。一个非限制性的示例可以包括crc32c,尽管其他变型也是可能的并且以此涵盖。

在图3的框308处继续,数据转置器212可以将该组离散crc转置为一组混合crc。每组混合crc包括来自每个离散crc的crc数据元素。在一些实施例中,数据转置器212可以通过将crc矩阵的列(例如,707a)转置成该组混合crc的行(例如,708a)来将该组离散crc转置为该组混合crc。在非限制性的示例中,数据转置器212可以通过将8个32位crc转置为32字节数据向量来转置该组混合crc,尽管其他变型也是可能的并且以此涵盖。在这种非限制性的情况下,crc矩阵将包括32列,每列具有8位。

在图3的框310处,crc生成器213可以在框310处使用压缩函数将该组混合crc压缩成简化crc。在一些实施例中,压缩函数可以包括高次多项式,尽管在替代实施例中还可以使用低次多项式。如本文所使用,高次多项式是具有四次或四次以上的多项式,并且低次多项式是具有小于四次的多项式。示例高次多项式可以是x4+x+1,而低次多项式可以是x2。在一些情况下,为了计算效率,高次多项式被选择为在gf2上可用。

在各种实施例中,诸如使用单一指令、多数据(simd)指令,可以在处理器202上有效地执行本文所述的数据转置操作,诸如参照图7所述的以及相对于方法300和400(例如,框304、框308、框402等)的那些,尽管其他合适的变型也是可能的并且经考虑的。另外地或可选地,在各种实施例中,可以使用现有的处理器内的crc逻辑来有利地执行本文所述的crc操作,如本文其他地方所讨论的。这样做可以有益地将针对用crc进行高阶编码的相对有效的过程提供给使用现有的计算硬件用crc进行低阶编码的过程。

图5示出了可以在图3的框310中执行的操作500的进一步的示例。具体地,在框502处,crc生成器213可以将包括高次多项式的压缩函数应用于该组混合crc以获取简化crc。在一些实施例中,crc生成器213可以将压缩函数应用于包括该组混合crc的crc块(例如,708a、708b、...、708j)以获取简化crc(例如,710)。

图6示出了用于将简化crc与奇偶校验crc(paritycrc)进行比较的示例方法600。在框602中,数据接口211可以获取与数据向量相关联的预计算奇偶校验(parity)。在一些实施例中,crc生成器212可以从数据向量中生成预计算奇偶校验,作为生成纠删编码数据的一部分。例如,crc生成器212可以使用可以具有线性特性的多个操作来生成奇偶校验,尽管其他变型也是可能的并且以此涵盖。在非限制性的示例中,多个操作可以包括诸如-p=p+a*d的数学运算,其中p表示预计算奇偶校验,a表示标量值/系数,并且d表示数据向量。在一些实施例中,标量值a等于1。在一些实施例中,标量值可以大于1或具有更高阶(order)。

在方法600的框604中,crc生成器212可以使用预计算奇偶校验生成奇偶校验crc。在一些实施例中,crc生成器可以基于一种或多种crc算法来生成奇偶校验crc。crc算法的非限制性示例包括crc32c,尽管其他合适的算法也适用。

在方法600的框606处继续,数据接口211可以获取与数据向量相关联的简化crc并且在框608处将简化crc与奇偶校验crc进行比较以确定匹配。在一些实施例中,由数据接口211进行的比较可以用于预测奇偶校验crc。例如,数据接口可以确定简化crc与奇偶校验crc是否匹配(即,匹配指示对奇偶校验crc的准确预测)以证实从其导出简化crc的数据向量的完整性。在一些情况下,奇偶校验crc和还与简化crc相关联的数据向量相关联。因此,如果数据接口211在框608处确定简化crc与奇偶校验crc不匹配,则数据接口可以在框610处标记错误。然而,如果数据接口确定奇偶校验crc与简化crc相匹配,则数据接口211可以在块612处继续存储操作。例如,响应于由数据接口211在框608处确定奇偶校验crc与简化crc匹配,数据接口211可以将数据向量存储在存储设备110n中,尽管应该理解的是,数据接口211还可以将数据向量存储在诸如数据存储、闪存驱动器或其他合适的存储介质的其他存储位置中。

方法600以多种方式改进现有系统。在一些实施例中,当数据接口将简化crc与奇偶校验crc进行比较608时,来自这个比较的结果可以指示处理的数据是无差错的。例如,当计算系统对数据向量纠删编码时,计算设备201可以在继续存储编码的数据向量之前使用方法600以确定在编码过程期间的任何阶段是否引入了错误。例如,与计算设备201相关联的数据接口可以比较与编码的数据向量相关联的简化crc并且将简化crc和与编码的数据向量相关联的奇偶校验crc进行比较。如果数据接口211确定与编码的数据向量相关联的简化crc和与编码的数据向量相关联的奇偶校验crc相匹配,则数据接口可以继续存储编码的数据向量。然而,如果数据向量确定与编码数据相关联的简化crc和与编码的数据向量相关联的奇偶校验crc不匹配,则数据接口211可以标记错误。如本文其他地方所讨论的,错误可以是在计算的处理和/或数据传输期间出现的任何适用的错误,诸如系统总线错误、内部总线错误、缓存位翻转错误、内存位翻转错误和/或还可以是被引入到编码的数据向量中的其他系统错误。

在以上描述中,出于解释的目的,阐述了众多具体细节。然而,显而易见的是,可以在没有这些具体细节的任何给定子集的情况下实践所公开的技术。在其他情况下,结构和设备以框图形式显示。例如,在上面参照用户接口和特定硬件的一些实施方式中描述了所公开的技术。此外,上述公开的技术主要在在线服务的上下文中;然而,所公开的技术适用于其他数据源和其他数据类型(例如,例如图像、音频、网页的其他资源的集合)。

说明书中对“一个实施方式”或“实施方式”的引用意味着结合该实施方式所述的特定特征、结构或特性被包括在所公开技术的至少一个实施方式中。说明书中各处出现的短语“在一个实施方式中”并不一定都是指代相同的实施方式。

以上详细描述的一些部分是以对在计算机存储器内的数据位进行操作的过程和符号表示的形式来呈现的。过程通常可以视为导致结果的自我一致的步骤序列。步骤可以涉及物理量的物理控制。这些量采用能够被存储、传送、组合、比较和以其他方式控制的电或磁信号的形式。这些信号可以称为是以位、值、元件、符号、字符、术语、数字等的形式。

这些和类似的术语可以与适当的物理量相关联,并且可以认为是应用于这些量的标签。除非特别指出,否则从前面的讨论中显而易见,应该理解的是在通篇描述中,利用例如“处理”或“计算(computing)”或“计算(calculating)”或“确定”或“显示”等术语的讨论,可以指代计算机系统或类似的电子计算设备的动作和过程,其控制并将计算机系统的寄存器和存储器内表示为物理(电子)量的数据转换成类似地表示为在计算机系统存储器或寄存器或其他这样的信息存储、传输或显示设备内的物理量的其他数据。

所公开的技术还可以涉及用于执行本文的操作的装置。这个设备可以为了所需目的而专门构造,或者它可以包括由计算机中存储的计算机程序选择性地激活或重新配置的通用目的计算机。这样的计算机程序可以存储在计算机可读存储介质中,例如但是不限于,包括软盘、光盘、cdrom、以及磁盘、只读存储器(rom)、随机存取存储器(ram)、eprom、eeprom、磁卡或光卡的任何类型的盘、包括具有非易失性存储器的usb密钥的闪存或适用于存储电子指令的任何类型的介质,每个介质耦接到计算机系统总线。

所公开的技术可以采用完全硬件的实施方式、完全软件的实施方式或者包含硬件和软件元件两者的实施方式的形式。在一些实施方式中,技术以软件来实现,其包括但是不限于固件、常驻软件、微码等。

进一步地,所公开的技术可以采用从提供程序代码以由计算机或任何指令执行系统使用或与其结合使用的非暂态计算机可用或计算机可读介质可访问的计算机程序产品的形式。为了本描述的目的,计算机可用或计算机可读介质可以是可以包含、存储、传递、传播、或传输程序以供指令执行系统、装置、或设备使用或与其结合使用的任何装置。

适合于存储和/或执行程序代码的计算系统或数据处理系统将包括通过系统总线直接或间接耦接到存储器元件的至少一个处理器(例如,硬件处理器)。存储器元件可以包括在程序代码的实际执行期间使用的本地存储器、大容量存储器、以及提供至少一些程序代码的临时存储的缓存存储器,以减少在执行期间必须从大容量存储器检索代码的次数。

输入/输出或i/o设备(包括但是不限于键盘、显示器、指点设备等)可以直接或通过中间i/o控制器耦接到系统。

网络适配器还可以耦接到系统,以使得数据处理系统能够通过中间专用或公共网络而耦接到其他数据处理系统或远程打印机或存储设备。调制解调器、电缆调制解调器和以太网卡只是少数当前可用类型的网络适配器。

最后,本文呈现的过程和显示可以不是固有地涉及任何特定的计算机或其他装置。各种通用目的系统可以与根据本文的教导的程序一起使用,或者可以证明构造更专用的设备以执行所需的方法步骤是方便的。各种这些系统所需的结构将出现在以下的描述。另外,所公开的技术不是参照任何特定的编程语言来描述的。将可以理解的是,可以使用各种编程语言以实现本文所述的技术教导。

为了说明和描述的目的,本技巧(technique)和技术的实施方式的在前描述已经呈现。其目的不是穷举或将本技巧和技术限制于所公开的确切形式。鉴于上述教导,许多修改和变化是可能的。其旨在使本技巧和技术的范围不受该详细描述的限制。本技巧和技术可以在不脱离其精神或基本特性的情况下以其他特定形式来实现。同样,模块、例程、特征、属性、方法学和其他方面的特定命名和划分不是强制的或重要的,并且实施本技巧和技术或其特征的机制可以具有不同的名称、划分和/或格式。此外,本技术的模块、例程、特征、属性、方法学和其它方面可以实现为软件、硬件、固件或三者的任何组合。而且,无论哪个组件,其中一个示例是模块,以软件实现,该组件都可以作为独立程序、作为较大型程序的一部分、作为多个独立程序、作为静态或动态链接库、作为内核可加载模块、作为设备驱动器和/或以现在或将来在计算机编程中已知的每个或任何其他方式来实现。另外,本技巧和技术绝不限于以任何特定的编程语言或者用于任何特定的操作系统或环境的实施方式。因此,本技巧和技术的公开旨在说明,而不是限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1