CN110413212B - 识别待写入数据中的可简化内容的方法、设备和计算机程序产品 - Google Patents
识别待写入数据中的可简化内容的方法、设备和计算机程序产品 Download PDFInfo
- Publication number
- CN110413212B CN110413212B CN201810401755.0A CN201810401755A CN110413212B CN 110413212 B CN110413212 B CN 110413212B CN 201810401755 A CN201810401755 A CN 201810401755A CN 110413212 B CN110413212 B CN 110413212B
- Authority
- CN
- China
- Prior art keywords
- data
- content
- written
- reduced
- simplified
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
- G06F3/0641—De-duplication techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0661—Format or protocol conversion arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/02—Indexing scheme relating to groups G06F7/02 - G06F7/026
- G06F2207/025—String search, i.e. pattern matching, e.g. find identical word or best match in a string
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2211/00—Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
- G06F2211/007—Encryption, En-/decode, En-/decipher, En-/decypher, Scramble, (De-)compress
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/40—Specific encoding of data in memory or cache
- G06F2212/401—Compressed data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开的实施例涉及识别待写入数据中的可简化内容的方法、设备和计算机程序产品。该方法包括接收与待写入数据有关的信息,该信息指示该待写入数据中包含可简化内容,该可简化内容包括具有第一简化模式的数据。该方法还包括基于该信息,识别该待写入数据中的该可简化内容。该方法还包括基于该第一简化模式,对该可简化内容进行简化。使用本公开的技术方案,可以实现利用应用与存储装置之间的通信的主动I/O模式识别方案。此外,使用本公开的技术方案还可以容易地对可识别的新模式进行扩充,并且也不存在传统方案中的诸多I/O模式限制。
Description
技术领域
本公开的实施例总体上涉及数据存储领域,具体地涉及识别待写入数据中的可简化内容的方法、设备和计算机程序产品。
背景技术
在对磁盘进行输入输出(I/O)操作时,系统(例如,VNX Unity)可以针对待写入数据(也可以被称为I/O数据)进行模式识别(也可以被称为I/O模式识别)。具体而言,当待写入数据要被写入到预分配对象时,可对其以实施联机模式检测以识别其是否包括静态预定义模式集合中的模式。例如,当待写入数据包含全0或者全1的数据(字符串)时,包括全0模式或者全1模式的那些数据(也可以被称为模式数据)可以不被写入到磁盘中。此时,基于在待写入数据中检测到上述预定义模式,系统可以不针对这些待写入数据在磁盘上分配空间,而是仅更新针对这些模式数据的元数据。
传统方案中对I/O数据进行的I/O模式识别属于被动I/O模式识别,其仅可以支持非常有限种类的I/O模式,即,全0模式和全1模式,并且仅支持8字节的可重复模式,同时其模式模型设计也非常复杂
发明内容
本公开的实施例提供了识别待写入数据中的可简化内容的方法、设备和计算机程序产品。
在本公开的第一方面,提供了一种识别待写入数据中的可简化内容的方法。该方法包括:接收与待写入数据有关的信息,所述信息指示所述待写入数据中包含可简化内容,所述可简化内容包括具有第一简化模式的数据;基于所述信息,识别所述待写入数据中的所述可简化内容;以及基于所述第一简化模式,对所述可简化内容进行简化。
在本公开的第二方面,提供了一种识别待写入数据中的可简化内容的设备。该设备包括:至少一个处理单元;至少一个存储器,所述至少一个存储器被耦合到所述至少一个处理单元并且存储用于由所述至少一个处理单元执行的指令,所述指令当由所述至少一个处理单元执行时,使得所述设备执行动作,所述动作包括:接收与待写入数据有关的信息,所述信息指示所述待写入数据中包含可简化内容,所述可简化内容包括具有第一简化模式的数据;基于所述信息,识别所述待写入数据中的所述可简化内容;以及基于所述第一简化模式,对所述可简化内容进行简化。
在本公开的第三方面,提供了一种计算机程序产品。该计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,所述机器可执行指令在被执行使得机器执行根据本公开的第一方面所描述的方法的任意步骤。
提供发明内容部分是为了以简化的形式来介绍对概念的选择,它们在下文的具体实施方式中将被进一步描述。发明内容部分无意标识本公开的关键特征或必要特征,也无意限制本公开的范围。
附图说明
通过结合附图对本公开示例性实施例进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施例中,相同的参考标号通常代表相同部件。
图1示出了不利用模式识别和利用模式识别的数据写入的对比图100。
图2示出了根据本公开的实施例的存储系统200的示意图;
图3示出了根据本公开的实施例的识别待写入数据中的可简化内容的方法300的流程图;
图4示出了根据本公开的实施例的WRITE SAME命令400的示意图;
图5示出了根据本公开的实施例的WRITE SCATTERED命令500的示意图;
图6示出了根据本公开的实施例的WRITE SCATTERED命令500的数据写入示例600的示意图;
图7示出了根据本公开的实施例的两级哈希表700的示意图;
图8示出了根据本公开的实施例的另一识别待写入数据中的可简化内容的方法800的流程图;
图9示出了根据本公开的实施例的又一识别待写入数据中的可简化内容的方法900的流程图;
图10示出了可以用来实施本公开内容的实施例的示例设备1000的示意性框图。
在各个附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以按照各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
I/O模式识别对于节省用于写入数据的磁盘空间以及减少对磁盘的读取而言非常重要。以下示出的表1以虚拟桌面基础架构(VDI)这一应用对存储系统的I/O数据写入来说明了缩减I/O数据写入中的模式数据的重要性。
表1:模式数据在I/O数据写入中所占的比例
模式 | 模式数目 | 全部数据块 | 数据块百分比 | 块大小百分比 |
全部模式 | 12,566 | 884,942,459 | 100% | 66.4721% |
1.可简化模式 | 325 | 881,696,712 | 99.6332% | 66.2283% |
1.1全0模式 | 1 | 841,261,035 | 95.0639% | 63.1910% |
1.2全1模式 | 1 | 1,570,392 | 0.17745% | 0.1180% |
1.3其他可简化模式 | 323 | 38,865,285 | 4.39184% | 2.9193% |
2.不可简化模式 | 12,241 | 3,245,747 | 0.36677% | 0.2438% |
如表1中所记载的,尽管可简化在I/O数据写入中的全部模式数目中所占的比例并不大(12,566个中的325个),但是其所占的数据块百分比却非常惊人(99.6332%),其中,全0模式和全1模式所占的数据块百分比达到了95.0639%+0.17745%=95.24135%。因此,如果能够对这些可简化模式的I/O数据写入进行缩减和简化将是非常有利的。同时,应当理解,尽管在表1中所记载的示例中其他可简化模式所占的数据块百分比并不很大(4.39184%),但是在其他示例中其也可能占据很大的数据块百分比。
传统方案中的模式识别仅能够在I/O数据被写入到存储系统中时,在8KB的数据中每次识别8字节的全0模式和全1模式。以下示出的表2记载了相应的字节模式和模式编号。
表2:模式识别中的字节模式与模式编号
字节模式 | 模式编号 |
0x00 | 0 |
0xFF | 1 |
图1示出了不利用模式识别和利用模式识别的数据写入的对比图100。如图1中所示,图1的左侧为不利用模式识别的数据写入的场景,而图1的右侧为利用模式识别的数据写入的场景。如图1的左侧所示,在不利用模式识别的数据写入的场景中,当全0待写入数据110-1被写入到磁盘阵列120-1中时,需要在用户数据存储装置122-1中分配存储空间来写入这些全0数据,并且需要在元数据存储装置121-1中存储与所写入的用户数据有关的元数据。
相比之下,如图1的右侧所示,在利用模式识别的数据写入的场景中,当全0待写入数据110-2被写入到磁盘阵列120-2中时,仅需要在数据存储装置121-2中存储对这些全0待写入数据110-2的描述(例如,在某些地址中存储的均为0),而无需实际地在用户数据存储装置122-2中分配存储空间来写入这些全0数据。
因此,在利用模式识别的数据写入的场景中,可以减少对用户数据存储装置122-2的存储空间使用,甚至可以无需对用户数据存储装置122-2进行读写操作。
具体而言,在利用模式识别的数据写入的场景中,以全0写入数据为例,当全0待写入数据到达存储系统时,模式识别引擎将针对每8KB的数据,以不同的偏移来采样8字节的数据,如果采样操作不成功,则按照不利用模式识别的数据写入操作来对待写入数据进行普通处理。如果采样成功,则对比采样的数据是否与预定义模式集合(例如,哈希表)中的模式(即,全0模式或全1模式)匹配,如果采样的数据并不是全0模式和全1模式的,则按照不利用模式识别的数据写入操作来对待写入数据进行普通处理。如果采样的数据与全0模式或全1模式匹配,则继续针对完整的8KB数据按照不同的采样与预定义模式集合中的模式进行比较,如果完整的8KB数据不满足预定义模式集合中的模式,则按照不利用模式识别的数据写入操作来对待写入数据进行普通处理。如果完整的8KB数据满足全0模式或全1模式,则块设备文件系统将作为模式数据的这些待写入数据简化(例如,翻译)成特殊元数据,并且将这些元数据存储在元数据存储装置中(或者更新元数据存储装置中的元数据),而并不在用户数据存储装置中存储这些模式数据。而后,当进行针对这些模式数据的读取操作时,可以通过读取这些元数据来恢复模式数据以用于读取。这些操作属于联机模式检测中的内容。
在当前的设计中,模式识别与数据压缩一起被启用或者禁用,并且采样和比较的过程是非常重要的,由于这个过程是被动的过程,因此其消耗了大量的CPU计算能力,从而有可能不利地影响整个存储系统的性能。同时,由于上述模式识别操作属于某种类型的静态去重复,因此在管理界面中可以将原有的术语“压缩”改变为“数据缩减”。换言之,如果具有相同模式的连续I/O数据来自应用服务器,则可以容易地将其去重复以使得压缩器服务能够节省存储空间。因此,采取模式识别可以增加压缩率并且改进数据写入性能。
然而,如以上在背景技术中所描述的,传统方案中存在很多不足。具体而言,对于一些存储装置(例如,VNX存储装置),其中的核心部件包括块设备文件系统(CBFS),该块设备文件系统可以包含用于检测I/O模式的逻辑。由于块设备文件系统内部包含缓冲区高速缓存,因此I/O数据可以在该缓冲区高速缓存中驻留一段时间以用于更多的文件系统操作,在此时可以对I/O数据进行联机模式检测(ILPD)。然而,对于当前的联机模式检测而言,其属于被动I/O模式识别,即,其只有当例如由应用向磁盘发出数据写入请求并且传输I/O数据时才会被启用,并且仅被动地针对I/O数据进行I/O模式识别。同时,当前的联机模式检测只能够识别预定义的模式,并且这些预定义的模式难以被扩充,因为模式定义是被硬编码在源代码中。具体而言,当前的联机模式检测仅可以支持非常有限种类的I/O模式,即,全0模式和全1模式,并且仅支持8字节的可重复模式。再者,当前的模式模型设计也非常复杂。
为了至少部分地克服传统方案中存在的上述问题,本公开的实施例提供了一种新颖的模式识别方案。该方案为利用应用与存储装置之间的通信的主动I/O模式识别方案,其需要由应用来针对其自身发送的待写入数据进行一部分模式识别操作,从而使得可以将模式识别的工作负荷中的一部分卸载到应用侧,以减少存储系统侧的工作负荷,这是因为应用明确地知晓其希望进行的I/O操作以及由其发出的待写入数据的内容。此外,该方案还可以容易地对可识别的新模式进行扩充,并且也不存在对诸如8KB和8字节的模式数据大小方面的I/O模式限制。
本公开的实施例中所提供的模式识别方案可以用于虚拟机环境(例如,VMware虚拟机环境)中,并且例如可以适用于例如VMware架构的虚拟机、以及例如支持VMware API(VAPI的)其他应用,而无需对该模式识别方案进行任何改变。应当理解,本公开的实施例中所提供的模式识别方案也可以适用于诸如数据库、Exchange邮件服务之类的通用应用。
图2示出了根据本公开的实施例的存储系统200的示意图,存储系统200可以是VNXUnity。如图2中所示,存储系统200包括模式识别单元210和主机侧220,模式识别单元210包括模式高速缓存211和提交逻辑212。本公开的实施例中所提供的模式识别方案主要由模式识别单元210和主机侧220实现,其中模式高速缓存211可以用于存储预先确定的简化模式集合(即,模式的集合),提交逻辑212可以用于将经简化的模式数据写入到存储系统200的存储装置中。存储系统200中的其他部件的布置与功能与传统存储系统中的相应布置与功能类似。
当存储系统200操作时,例如,主机侧负责处理传入SCSI命令以及将请求230打包到内部IOCTL中。具体而言,主机侧可以从主机应用(例如,VMware、虚拟机、虚拟桌面基础架构)接收命令(该命令可以包括WRITE SAME或者其他应WRITE SCATTERED命令),并且将请求230与具体标志(flag)传递给更低软件层以通知更低堆栈240以进行模式识别操作。
模式高速缓存211处理传入I/O数据包。当与WRITE SAME I/O请求数据包(IRP)一起的标志指示待写入数据包括用户数据的多个重复时,模式高速缓存211可以不进行任何采样与比较,而是仅仅在预先确定的模式集合(例如,以哈希表的形式)进行查找,如果存在命中,则可以对写入数据执行进一步的简化操作;如果不存在命中,则可以将新的模式包括到预先确定的模式集合中(例如,通过将计算出的哈希键插入到哈希表中)。
而后,简化后的最少保留数据(例如,被多次重复的用户数据)以及重复次数可以被提交逻辑212提交以用于后续处理(例如,被存储或者更新到元数据存储装置中)。同时,由于已经获得了简化后的最少保留数据以及重复次数,因此后续的压缩器服务也可以通过经由压缩器服务的高速路径接收上述数据来非常高速地实现对待写入数据的压缩操作。
基于以上参照图2对根据本公开的实施例的存储系统200所进行的描述,以下参照图3至图9来详细描述根据本公开的实施例的识别待写入数据中的可简化内容的方法300、800和900的具体流程和操作。具体而言,图3至图9参照图2中所示的存储系统200、从存储系统200的角度而被描述。应当理解的是,以下描述的流程和操作还可以包括未示出的附加步骤和操作和/或可以省略所示出的步骤和操作,本公开的范围在此方面不受限制。
图3示出了根据本公开的实施例的识别待写入数据中的可简化内容的方法300的流程图。应当理解的是,方法300还可以包括未示出的附加步骤和/或可以省略所示出的步骤,本公开的范围在此方面不受限制。
方法300开始于框302,在框302,存储系统200从应用接收与待写入数据有关的信息。根据本公开的实施例,该信息指示待写入数据中包含可简化内容,并且该可简化内容包括具有第一简化模式的数据。根据本公开的一些实施例,该信息也可以指示待写入数据中不包含可简化内容,此时存储系统200无需对待写入数据执行采样和比较。根据本公开的另一些实施例,当存储系统200只接收到待写入数据而并未接收到上述信息时,存储系统200可以认为待写入数据中不包含可简化内容,从而并不对待写入数据执行采样和比较。
在传统方案中,数据通过小型计算机系统接口(SCSI)在应用与存储系统200之间被传输,因此模式信息(例如,指示待写入数据中包含可简化内容的信息)无法从SCSI数据路径被传输。然而,根据本公开的实施例,可以例如通过一组API(例如,VMware vSphere存储API-阵列继承(VAAI))来扩展SCSI块原语以实现模式信息的传输。例如,API可以定义一组存储原语,这些存储原语使得ESXi能够将某些存储操作卸载到阵列,这减少了ESXi主机上的资源开销,并且能够极大地改进诸如存储克隆、归零等存储器密集操作的性能。
根据本公开的实施例,前述VAAI块原语包括:Atomic Test&Set(ATS)、XCOPY(Extended Copy)以及WRITE SAME(ZERO),其中原语WRITE SAME(ZERO)(也可以被称为命令)可以被用于传输模式信息(不限于传输全0模式)。
图4示出了根据本公开的实施例的WRITE SAME命令400的示意图。
如图4中所示,WRITE SAME命令400中包括逻辑块地址地段和逻辑块的数目字段。对虚拟磁盘的最普通操作之一时将磁盘的大部分初始化为0以将虚拟机与远程安全隔离。例如,大多数虚拟桌面基础架构数据集均包括全0模式。WRITE SAME命令400可以用于将磁盘的大部分进行归零操作。在利用WRITE SAME命令400对磁盘进行归零操作时,可以通过标识为0的逻辑块地址来完成该操作,而无需在传输链路上传输数据。应当注意的是,WRITESAME命令400并不限于全0模式,而是可以用于诸如全1以及全其他数值等模式。
使用WRITE SAME命令400可以将例如以下配置任务加速:
·针对eagerzeroedthick目标磁盘的克隆操作。
·针对精简配置虚拟磁盘分配新文件块。
·针对zerothick虚拟磁盘初始化以前的未写入文件块。
WRITE SAME命令400的数据输出缓冲器610将包含所有的0。单个0操作具有默认的、1MB的归零大小。因此,当监视VAAI计数器时,有可能将观察到WRITE SAME命令400在esxtop中的以16个的批量递增。这是因为根据本公开的实施例,针对VAAI可以发起16个并行的工作线程。因此,在通过WRITE SAME命令400进行归零操作时,可以看到16个WRITESAME命令400的批量递增。SCSI块命令-4(http://www.t10.org/members/w_sbc4.htm)中定义了WRITE SAME命令400,其中WRITE SAME命令400的操作码为0x93。
在操作中,WRITE SAME命令400请求存储系统200从数据输出缓冲器610、针对指定范围的逻辑块寻址(LBA)中的每个LBA传输单个逻辑块。图4中的逻辑块地址字段是LBA地址,并且其数目由图4中的逻辑块的数目字段描述。
根据本公开的实施例,也可以使用WRITE SCATTERED命令来传输模式信息。图5示出了根据本公开的实施例的WRITE SCATTERED命令500的示意图。
如图5中所示,WRITE SCATTERED命令500中包括逻辑块数据偏移字段、LBA范围描述符的数目字段以及缓冲区传送长度字段。因此,WRITE SCATTERED命令500可以被用于传输除全0模式、全1模式以及全其他数值等模式之外的模式数据。
图6示出了根据本公开的实施例的WRITE SCATTERED命令500的数据写入示例600示意图,图中左侧的部分为数据输出缓冲器610,右侧的部分为介质上的逻辑块620。根据本公开的实施例,WRITE SCATTERED命令500使用数据输出缓冲器610中的一组LBA范围描述符613、614来描述LBA的范围,以描述针对将被写入的第一LBA的逻辑块地址611以及将被写入的逻辑块的数目612。WRITE SCATTERED命令500针对同一数据输出缓冲器610中的每个LBA范围将将被写入的逻辑块数据提供为LBA范围描述符613。针对每个相关联的LBA范围描述符613的逻辑块数据按照与LBA范围描述符613相同的顺序被提供,并且遵循LBA范围描述符613和可选的填充614。
WRITE SCATTERED命令500中的逻辑块数据偏移字段指示数据输出缓冲器610中的逻辑块数据的开始。由LBA范围描述符613指定的每个LBA范围标识与来自数据输出缓冲器610的逻辑块数据相关联的一组连续LBA。
应当理解,本公开的实施例并不被限定为利用使用WRITE SAME命令400和WRITESCATTERED命令500来传输模式信息,而是可以使用任何可行的方式来传输模式信息。
在图2的存储系统中,主机侧220被用来与前端(双模iSCSI和FC)驱动器250通信。双模是指这些驱动器能够向逻辑单元(LU)发起I/O以及服务目标端I/O。主机侧220的部件处理SCSI语义并且将把读取缓冲器/写入缓冲器SCSI请求230传递给I/O堆栈240作为IOCTL。
对于前端而言,存储系统200呈现一组端口以允许主机访问阵列的存储特征。这些端口落入两个宽泛类别,即以太网通道和光纤通道。以太网端口被用于文件服务和块服务二者,而光纤通道仅被用于块服务。前端端口250由订户线接口电路(SLIC)提供,这些SLIC被插入到服务提供方的背后。针对这些端口的设备驱动器在两个位置中被提供,即,针对网络设备的LINUX内核(也使用LINUX TCP/IP堆栈240)和在用户空间数据路径容器中。
块服务部分地依赖于同一组LINUX设备驱动程序和TCP/IP堆栈240,但使用不同的方法将数据从LINUX内核移动到数据路径容器中以用于处理。这主要用于iSCSI服务。光纤通道服务表示另一半的块服务世界。用户空间容器SAFE具有在其中运行光纤通道设备驱动器,使用内核中的CSX Helper容器以桥接内核与用户空间之间的鸿沟。来自iSCSI和光纤通道驱动器二者的请求进入TCD/TDD层(也被称为主机侧220)以用于SCSI命令处理。主机侧将传入的通用数据块(CDB)请求转换为沿着数据路径堆栈的不同操作。
主机侧220具有两个驱动器,TCD 221和TDD 222。在存储系统200的编程模块中,TCD 221位于微型端口驱动器和TDD 222的中间。TCD 221提供了控制/配置界面以创建/更改/删除的功能。第二个功能是从微型端口驱动器接收SCSI命令,并且将主机SCSI命令引向LUN/卷260,命令将被寻址到发送到存在的LU并且被发送给TDD驱动器222。
TDD 222是针对被寻址到磁盘的SCSI命令提供正确语义的响应。它将SCSI转换为IRP(I/O请求包)的内部命令并发送给较低层数据堆栈240。IRP的定义可以位于https://docs.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/i-o-request-packets。
在图2的存储系统中,对于微型端口到主机侧的I/O请求接口,微型端口驱动程器接收SCSI命令过程并且设置它的公共驱动器(CPD)接口。CPD接口主要由一组基本I/O请求组成,并且其次由微型端口直接调用的TCD例程和TCD直接调用的微型端口例程组成。根据本公开的实施例,新的模式信息可以被被封装到如下CPD结构中:
在这种数据结构中,logic_addr和logic_block是用户数据的数据地址和块编号,pattern_flag指示针对请求的WRITE SAME命令或WRITE SCATTERED SCSI命令。模式缓存将继续根据这一标记具有不同行为来进行处理。
在TCD驱动器221取回模式信息后,每个SCSI CDB将被复制到具有优先级信息的主机侧内部结构AcceptCCB中。AcceptCCB与每个到达的SCSI CDB相关联。AcceptCCB一直存在,直到状态被发送给主机,直到请求被清理完毕。其结构如下所示:
之后,IRP需要被从预先分配的池中分配。IRP是优于IOCTRL接口的、传输优先级信息的最佳方式。
在图2的存储系统中,对于主机侧到磁盘侧的I/O请求接口,磁盘侧(Diskside,TDD)表示主机旁边的堆栈的层。对于每个IRP,定义了EMCPAL_IRP_STACK_FLAGS宏,并且利用CacheIrpFlags类中的方法SetFlags()和GetFlags对IRP标志数据类型进行打包。针对IRP标志定义了两个模式标志。TDD 222将IRP标志设置为AcceptCCB中的CCB_Priority。其结构如下所示:
#define SL_K10_PER_SCSI_PATTERN_WRITE_SAME
#define SL_K10_PER_SCSI_PATTERN_WRITE_SCATTERED
然后,主机侧220调用IoCallDriver()将I/O IRP发送给较低的磁盘驱动器。在主机侧220的预处理之后,模式信息被从SCSI命令CDB提取并且被封装到存储系统的堆栈内的IRP中,这些堆栈将在底层堆栈中被继续处理。
应当理解,上述结构仅为示例而并不是对本公开的实施例的限制。任何能够满足本实施例中所要求的功能需要的结构均可以被用来实现本公开的实施例。
继续参考图3,在框304,存储系统200基于在框320接收到的信息来识别待写入数据中的可简化内容。根据本公开的实施例,可简化内容是指模式数据。因此,根据本公开的一些实施例,存储系统200在接收到该信息后,对待写入数据进行采样,以得到数据样本,并且基于得到的数据样本来从待写入数据中识别可简化内容。
根据本公开的一些实施例,当该信息仅指示待写入数据中包含可简化内容时,存储系统200可以按照预先设置的采样粒度(例如,8字节、16字节、32字节等)来对待写入数据进行采样。根据本公开的另一些实施例,存储系统200可以具有学习和判断的能力,从而使得可以从待写入数据中识别出具有之前并未遇到过的简化模式的可简化内容。
根据本公开的另一些实施例,在框302处接收到的信息还指示可简化内容所具有的第一简化模式,从而使得存储系统200在识别待写入数据中的可简化内容时可以根据该第一简化模式来进行识别。该第一简化模式例如可以包括重复数据的大小(例如,8KB、16KB等)、重复的数据的内容以及重复的次数中的一项或者多项。
在框306中,存储系统200基于第一简化模式来对可简化内容进行简化。根据本公开的实施例,存储系统200在获知了可简化内容的第一简化模式后,即可以根据该第一简化模式来对可简化内容进行化简。
根据本公开的一些实施例,这一步骤可以进一步包括:存储系统200确定该第一简化模式,存储系统200在预先确定的简化模式集合中查找该第一简化模式,存储系统200响应于在简化模式集合中查找到该第一简化模式,确定与该第一简化模式对应的简化操作,以及存储系统200基于确定的简化操作来对可简化内容进行简化。
如上所述,如果在框302处接收到的信息还指示可简化内容所具有的第一简化模式,则存储系统200可以直接从该信息中提取(确定)第一简化模式,并且在识别待写入数据中的可简化内容时也可以根据确定的该第一简化模式来进行识别。这与传统方案不同。具体而言,在传统方案的IPLD解决方案中,CBFS需要缓冲在缓冲器高速缓存内的I/O数据并且进行两次循环采样,并且如果两次采样完全相等,则其将尝试执行下一过程。然而,根据本公开的实施例,这并不是必需的,因为传入的IRP可以带有具有IRP标志的模式信息,并且CBFS将检查该标志并且执行相应的动作。
在上述步骤中,简化模式集合可以采取任何可以包括多个数据项并且支持查找的数据格式。根据本公开的一些实施例,该简化模式集合可以包括哈希表,并且由于根据本公开的实施例的简化模式集合可以支持多达十万个简化模式,因此为了便于查找,也可以采取两级甚至多级哈希表的实现方式。
在图2的存储系统中,由主机侧220封装的IRP是部分不透明的结构,其表示I/O请求数据包,并且从主机侧220被传递给映射的LUN层260和CBFS设备堆栈。而后,如上所述,可以使用哈希表来实施根据本公开的实施例的简化模式集合。
图7示出了根据本公开的实施例的两级哈希表700的示意图,其中左侧的部分为数据缓冲器710,中间的部分为模式哈希720,右侧的部分为次级模式哈希730。根据本公开的一些实施例,在从IRP获取模式信息之后,数据内容可以被哈希化并且被存储在模式哈希数据结构中,如图7中所示,任何模式都需要搜索哈希数据结构(简化模式集合)以检查它是否已经存在。
在图2的存储系统中,CBFS实现isPattern(),其主要提供了该模块的接口。它将检查数据包中的IRP标志,并且检查它是WRITE SAME还是WRITE SCATTERED(不透明框)。如果结果为真,则将该缓冲区视为候选模式缓冲区,并且在模式哈希表中执行搜索,从4个主要位置计算4个小样本作为哈希键。如果已经找到一个模式元素721,那么将为这个缓冲区执行“优化内存比较”以确保结果稳定。最后,将返回一个模式ID,用户可以获得具有由这一模式ID预先填充的模式的固定缓冲区。
根据本公开的一些实施例,为了利用有限的哈希表空间来支持大量的模式类型731,可以使用两级哈希数组的数据结构。只有一小部分模式被固定在存储器中(根据本公开的一些实施例,只有全0和全1模式被固定)。当通过读取访问其他模式时,将生成并返回新的缓冲区。两级哈希表的意义在于,可以在模式元素这一级中定义范围更大的模式元素721(例如,第一数目的字节循环、第二数目的字节循环等),并且在类型这一级中定义具体的类型731(例如,循环的内容)。在哈希表的查找过程中,如果查找命中,则意味着简化模式集合中已经包括了当前正在被查找的第一简化模式,此时只需按照与该第一简化模式对应的简化操作对带写入数据进行化简即可。
根据本公开的一些实施例,如果是全0模式或者全1模式,则无需实际写入任何待写入数据,而仅仅需要写入或者更新元数据来进行描述。
根据本公开的一些实施例,在哈希表的查找过程中,如果在哈希数据结构中查找未命中,则可以将新的哈希键插入到哈希表中,以扩充哈希表。同时,可以确定针对与该新的哈希键对应的简化操作。
根据公开的一些实施例,可以将全0模式和全1模式(以及可能的其他全单字符模式,例如,全数字2、3、4等)称为单字符重复类型。相应地,可以将其他的重复类型(例如,多个字符循环重复)称为非单字符重复类型。这时,当对可简化内容进行简化时,响应于第一简化模式为非单字符重复类型,可以从可简化内容中确定最少保留数据(例如,重复的多个字符)以及与该最少保留数据有关的描述数据(例如,前述重复的多个字符的位置和重复的次数),并且将上述最少保留数据和描述数据存储在存储系统200中。根据本公开的一些实施例,上述最少保留数据可以作为用户数据被存储,并且上述描述数据可以作为元数据被存储。当存储系统200后续接收到针对该可简化内容的读取I/O请求时,存储系统200可以通过读出该最少保留数据和描述数据来恢复成该可简化内容,以用于满足该读取I/O请求。
根据本公开的一些实施例,在框306被执行之后,即,在存储系统200基于第一简化模式对可简化内容进行了简化之后,存储系统200可以如上所述存储经简化的内容。如上所述,当第一简化模式为单字符重复类型时,可以不实际存储用户数据,而是仅仅存储或者更新元数据。而当第一简化模式为非单字符重复类型时,经简化的内容包括上述最少保留数据和描述数据。
以上结合图3中所示出的流程图描述了根据本公开的实施例的识别待写入数据中的可简化内容的方法300。利用上述方法,能够实现利用应用与存储系统200之间的通信的主动I/O模式识别方案,其中由应用针对其自身发送的待写入数据进行一部分模式识别操作以提供与待写入数据有关的信息,从而使得可以将模式识别的工作负荷中的一部分卸载到应用侧,以减少存储系统200的工作负荷。
根据本公开的另一些实施例,当具体地结合图2与图7来描述时,根据本公开的实施例的识别待写入数据中的可简化内容的方法300可以被描述为另一种形式。
图8示出了根据本公开的实施例的另一识别待写入数据中的可简化内容的方法800的流程图。应当理解的是,方法800还可以包括未示出的附加步骤和/或可以省略所示出的步骤,本公开的范围在此方面不受限制。
方法800开始于框802,在框802,存储系统200提取I/O IRP。
在框804,存储系统200根据与该I/O IRP一起的标记来判断该I/O是否为模式I/O。响应于该I/O不是模式I/O,操作过程前进到框806;否则,操作过程前进到框808。
在框806,由于该I/O不是模式I/O并且因此无法进行简化操作,因此存储系统200执行普通的数据写入操作。
在框808,由于该I/O是模式I/O,因此存储系统200对该I/O进行采样。
在框810,存储系统200判断对该I/O的采样结果是否为全0或者全1。响应于对该I/O的采样结果为全0或者全1,操作过程前进到框812;否则,操作过程前进到框814。
在框812,由于对该I/O的采样结果为全0或者全1,因此存储系统200无需查找哈希表,而是可以直接前进到框818,在其中对该I/O进行提交,即,进行简化和存储操作。
在框814,由于该I/O的采样结果不为全0或者全1,因此存储系统200在哈希表中进行查找,并且判断哈希查找是否在哈希表中命中。响应于哈希查找在哈希表中命中,操作过程前进到框818,在其中对该I/O进行提交;否则,操作过程前进到框816。
在框816,由于哈希查找在哈希表中未命中,存储系统200针对该模式I/O计算新的哈希键,并且将计算出的哈希键插入到哈希表中,随后,操作过程前进到框818。
在框818,无论操作过程是从框812、框814还是框816前进到的框818,存储系统200都对该I/O进行提交,即,进行简化和存储操作。
根据本公开的实施例,方法800中的某些步骤的顺序可以不必按照图8中所示出的顺序而被执行,而是可以按照相反的顺序被执行或者被并行执行。例如,方法800中的步骤810和814可以按照相反的顺序被执行或者被并行执行,而不会影响方法800的实施。
根据本公开的实施例,当存储系统200对该I/O进行提交时,提交逻辑212为WRITESAME命令和WRITE SCATTERED命令分别实现了两种不同的逻辑。
对于全0模式的WRITE SAME命令,如果isPattern()返回真并且将数据固定在缓冲区高速缓存中,则压缩服务将接管快速路径过程逻辑中的下一阶段处理。压缩服务仅保存一个唯一的用户数据,并且将块的数量标记为元数据。针对这情况,没有或者几乎没有对CPU的负担。对于其他WRITE SAME命令,所有1或可重复模式不限于8个字节,而仅限于SBC-4,因此几乎可以支持无数个模式。
对于WRITE SCATTERED命令,WRITE SCATTERED命令针对与LBA范围描述符613相同的数据输出缓冲器610中的每个LBA范围提供待写入的逻辑块数据615。相同的数据(有时具有填充)将被写入到若干LBA范围621中,从存储系统200的角度来看,它也是WRITE SAME命令,只不过是集成了具有不连续LBA范围的多次写入。该范围将被视为与WRITE SAME命令相同的行为。
根据本公开的另一些实施例,当具体地结合图2与图7来描述时,根据本公开的实施例的识别待写入数据中的可简化内容的方法300可以被描述为又一种形式。
图9示出了根据本公开的实施例的又一识别待写入数据中的可简化内容的方法900的流程图。应当理解的是,方法900还可以包括未示出的附加步骤和/或可以省略所示出的步骤,本公开的范围在此方面不受限制。根据本公开的实施例,方法900中仅包括I/O写入命令是WRITE SAME命令或者WRITE SCATTERED命令的情况。
方法900开始于框902,在框902,存储系统200判断I/O写入命令是否为WRITE SAME命令。响应于I/O写入命令是WRITE SAME命令,操作过程前进到框904;否则,操作过程前进到框906。
在框904,存储系统200在哈希表中进行查找,并且判断哈希查找是否在哈希表中命中。响应于哈希查找在哈希表中命中,操作过程前进到框914;否则,操作过程前进到框910。
在框906,存储系统200开始进行与WRITE SCATTERED命令的操作,操作过程前进到框908。由于I/O写入命令不是WRITE SAME命令,因此存储系统200可以确定I/O写入命令是WRITE SCATTERED命令,并且进而开始进行与WRITE SCATTERED命令的操作。
在框908,存储系统200从数据输出缓冲器610提取信息,操作过程前进到框904。
在框910,存储系统200判断WRITE SAME命令是否指示全0或者全1。响应于WRITESAME命令指示全0或者全1,操作过程前进到框914;否则,操作过程前进到框912。由此可见,在方法900中,不将WRITE SAME命令指示全0或者全1视为哈希查找在哈希表中命中,或者说,哈希表中并不存储指示全0或者全1的哈希键。
在框912,存储系统200在后端冲刷用户数据内容,即,对用户数据内容(或经简化的数据内容)进行存储,操作过程前进到框914。
在框914,存储系统200更新对应的元数据。通过方法900的步骤可以看出,在I/O写入命令是WRITE SAME命令的情况下,当哈希查找在哈希表中命中或者WRITE SAME命令指示全0或者全1时,无需进行用户数据的冲刷,而仅仅需要更新对应的元数据。
在框916,存储系统200判断WRITE SCATTERED命令是否均被完成。响应于WRITESCATTERED命令均被完成,操作过程前进到框918,此时提交操作完成;否则,操作过程前进到框908,存储系统200继续从数据输出缓冲器610提取信息。根据本公开的一些实施例,当数据缓冲器710中的数据如图7中所示包括多种不同长短的数据时,完成一次WRITESCATTERED命令可能无法针对数据缓冲器710中的全部数据完成数据提交操作,这时,需要进行多次循环以使得数据缓冲器710中的数据均被提交。
通过以上参考图1至图9的描述,可以看出,根据本公开的实施例的技术方案相对于传统方案具有诸多优点。使用本公开的实施例的技术方案,可以克服传统方案中的对I/O数据进行的I/O模式识别属于被动I/O模式识别,仅可以支持非常有限种类的I/O模式(即,全0模式和全1模式),仅支持8字节的可重复模式,以及模式模型设计非常复杂等问题。
相比之下,本公开的实施例中提供的模式识别方案使得能够实现利用应用与存储装置之间的通信的主动I/O模式识别方案,其中由应用针对其自身发送的待写入数据进行一部分模式识别操作,从而使得可以将模式识别的工作负荷中的一部分卸载到应用侧,以减少存储系统侧的工作负荷。此外,本公开的实施例中提供的模式识别方案还可以容易地对可识别的新模式进行扩充,并且也不存在对诸如8KB和8字节的模式数据大小方面的I/O模式限制。
图10图示出了可以用来实施本公开内容的实施例的示例设备1000的示意性框图。如图所示,设备1000包括中央处理单元(CPU)1001,其可以根据存储在只读存储器(ROM)1002中的计算机程序指令或者从存储单元1008加载到随机访问存储器(RAM)1003中的计算机程序指令,来执行各种适当的动作和处理。在RAM 1003中,还可存储设备1000操作所需的各种程序和数据。CPU 1001、ROM1002以及RAM 1003通过总线1004彼此相连。输入/输出(I/O)接口1005也连接至总线1004。
设备1000中的多个部件连接至I/O接口1005,包括:输入单元1006,例如键盘、鼠标等;输出单元1007,例如各种类型的显示器、扬声器等;存储单元1008,例如磁盘、光盘等;以及通信单元1009,例如网卡、调制解调器、无线通信收发机等。通信单元1009允许设备100通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
上文所描述的各个过程和处理,例如方法300、方法800和方法900,可由处理单元1001执行。例如,在一些实施例中,方法300、方法800和方法900可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1008。在一些实施例中,计算机程序的部分或者全部可以经由ROM 1002和/或通信单元1009而被载入和/或安装到设备100上。当计算机程序被加载到RAM 1003并由CPU1001执行时,可以执行上文描述的方法300、方法800和方法900的一个或多个动作。
本公开可以是方法、设备、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是、但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
这里参照根据本公开实施例的方法、设备(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (17)
1.一种识别待写入数据中的可简化内容的方法,所述方法包括:
接收写入数据命令,所述写入数据命令包含与待写入数据有关的信息,所述信息指示所述待写入数据是否包含可简化内容,所述可简化内容包括具有第一简化模式的数据;
基于所述信息指示所述待写入数据不包含可简化内容,向存储装置写入所述数据而不简化;
基于所述信息指示所述待写入数据包含可简化内容,然后:
1)识别所述待写入数据中的所述可简化内容;
2)基于所述第一简化模式,将所述可简化内容简化为简化数据;以及
3)向存储装置写入所述简化数据以及所述简化数据要求响应于所述数据的后续读取而恢复的指示,以及
维护哈希表,所述哈希表可用于将采样数据标识为可简化数据,
其中识别所述可简化内容包括对所述待写入数据采样并且确定采样结果是否指示所述待写入数据具有要求使用所述哈希表以将所述待写入数据标识为具有所述可简化内容的模式,并且如果是这样,则在所述哈希表中执行哈希查找以确定(1)在命中的情况下,所述可简化内容是已知的并且所述写入数据命令然后被执行,以及(2)在未命中的情况下,计算针对所述可简化内容的新哈希值并且将计算出的所述哈希值插入所述哈希表中以用于后续使用,
并且其中所述哈希表是两级哈希表,其中(1)第一级是捕获关于可简化内容的第一信息的主级,并且(2)第二级是由所述第一级的元素引用的次级,所述第二级捕获关于可简化内容的不同的第二信息。
2.根据权利要求1所述的方法,其中识别所述待写入数据中的所述可简化内容包括:
对所述待写入数据进行采样,以得到数据样本;以及
基于所述数据样本来从所述待写入数据中识别所述可简化内容。
3.根据权利要求1所述的方法,其中对所述可简化内容进行简化包括:
确定所述第一简化模式;
在预先确定的简化模式集合中查找所述第一简化模式;
响应于在所述简化模式集合查找到所述第一简化模式,确定与所述第一简化模式对应的简化操作;以及
基于确定的所述简化操作,对所述可简化内容进行简化。
4.根据权利要求3所述的方法,还包括:
响应于在所述简化模式集合未查找到所述第一简化模式,将所述第一简化模式包括到所述简化模式集合中。
5.根据权利要求3所述的方法,其中与待写入数据有关的所述信息指示所述可简化内容的第一简化模式,其中确定所述第一简化模式包括:
从与待写入数据有关的所述信息中提取所述第一简化模式。
6.根据权利要求1所述的方法,其中对所述可简化内容进行简化包括:
响应于所述第一简化模式为非单字符重复类型,从所述可简化内容中确定最少保留数据和与所述最少保留数据有关的描述数据,以存储所述最少保留数据和所述描述数据,其中所述最少保留数据能够基于所述描述数据而被恢复成所述可简化内容。
7.根据权利要求1所述的方法,其中所述写入数据命令被包含在I/O请求包中,所述I/O请求包具有指示所述待写入数据是否包含可简化内容的标志。
8.根据权利要求7所述的方法,其中所述标志是所述写入数据命令是Write Same命令还是Write Scattered命令的指示符,所述Write Same和所述Write Scattered命令二者由应用使用以向存储装置写入具有可简化内容的数据。
9.根据权利要求1所述的方法,其中所述第一信息是描述所述可简化内容中的数据的重复的循环的大小的循环信息,并且所述第二信息是描述所述可简化内容的重复循环的数据内容的类型信息。
10.一种识别待写入数据中的可简化内容的设备,包括:
至少一个处理单元;
至少一个存储器,所述至少一个存储器被耦合到所述至少一个处理单元并且存储用于由所述至少一个处理单元执行的指令,所述指令当由所述至少一个处理单元执行时,使得所述设备执行动作,所述动作包括:
接收写入数据命令,所述写入数据命令包含与待写入数据有关的信息,所述信息指示所述待写入数据是否包含可简化内容,所述可简化内容包括具有第一简化模式的数据,
基于所述信息指示所述待写入数据不包含可简化内容,向存储装置写入所述数据而不简化;
基于所述信息指示所述待写入数据包含可简化内容,然后:
1)识别所述待写入数据中的所述可简化内容,
2)基于所述第一简化模式,将所述可简化内容简化为简化数据,以及
3)向存储装置写入所述简化数据以及所述简化数据要求响应于所述数据的后续读取而恢复的指示,以及
维护哈希表,所述哈希表可用于将采样数据标识为可简化数据,
其中识别所述可简化内容包括对所述待写入数据采样并且确定采样结果是否指示所述待写入数据具有要求使用所述哈希表以将所述待写入数据标识为具有所述可简化内容的模式,并且如果是这样,则在所述哈希表中执行哈希查找以确定(1)在命中的情况下,所述可简化内容是已知的并且所述写入数据命令然后被执行,以及(2)在未命中的情况下,计算针对所述可简化内容的新哈希值并且将计算出的所述哈希值插入所述哈希表中以用于后续使用,
并且其中所述哈希表是两级哈希表,其中(1)第一级是捕获关于可简化内容的第一信息的主级,并且(2)第二级是由所述第一级的元素引用的次级,所述第二级捕获关于可简化内容的不同的第二信息。
11.根据权利要求10所述的设备,其中识别所述待写入数据中的所述可简化内容包括:
对所述待写入数据进行采样,以得到数据样本;以及
基于所述数据样本来从所述待写入数据中识别所述可简化内容。
12.根据权利要求10所述的设备,其中对所述可简化内容进行简化包括:
确定所述第一简化模式;
在预先确定的简化模式集合中查找所述第一简化模式;
响应于在所述简化模式集合查找到所述第一简化模式,确定与所述第一简化模式对应的简化操作;以及
基于确定的所述简化操作,对所述可简化内容进行简化。
13.根据权利要求12所述的设备,其中所述动作还包括:
响应于在所述简化模式集合未查找到所述第一简化模式,将所述第一简化模式包括到所述简化模式集合中。
14.根据权利要求12所述的设备,其中与待写入数据有关的所述信息指示所述可简化内容的第一简化模式,其中确定所述第一简化模式包括:
从与待写入数据有关的所述信息中提取所述第一简化模式。
15.根据权利要求10所述的设备,其中对所述可简化内容进行简化包括:
响应于所述第一简化模式为非单字符重复类型,从所述可简化内容中确定最少保留数据和与所述最少保留数据有关的描述数据,以存储所述最少保留数据和所述描述数据,其中所述最少保留数据能够基于所述描述数据而被恢复成所述可简化内容。
16.根据权利要求10所述的设备,其中所述第一信息是描述所述可简化内容中的数据的重复的循环的大小的循环信息,并且所述第二信息是描述所述可简化内容的重复循环的数据内容的类型信息。
17.一种非瞬态计算机可读介质,存储指令集,所述指令集在被执行使得机器执行根据权利要求1至9中的任一权利要求所述的方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810401755.0A CN110413212B (zh) | 2018-04-28 | 2018-04-28 | 识别待写入数据中的可简化内容的方法、设备和计算机程序产品 |
US16/272,605 US10936227B2 (en) | 2018-04-28 | 2019-02-11 | Method, device, and computer program product for recognizing reducible contents in data to be written |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810401755.0A CN110413212B (zh) | 2018-04-28 | 2018-04-28 | 识别待写入数据中的可简化内容的方法、设备和计算机程序产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110413212A CN110413212A (zh) | 2019-11-05 |
CN110413212B true CN110413212B (zh) | 2023-09-19 |
Family
ID=68292531
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810401755.0A Active CN110413212B (zh) | 2018-04-28 | 2018-04-28 | 识别待写入数据中的可简化内容的方法、设备和计算机程序产品 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10936227B2 (zh) |
CN (1) | CN110413212B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110109867B (zh) | 2018-01-18 | 2023-03-31 | 伊姆西Ip控股有限责任公司 | 改进在线模式检测的方法、装置和计算机程序产品 |
CN113721838B (zh) * | 2021-07-22 | 2023-12-19 | 成都忆芯科技有限公司 | 用于存储设备的写、读数据方法、存储控制器以及dma引擎 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5850565A (en) * | 1996-08-26 | 1998-12-15 | Novell, Inc. | Data compression method and apparatus |
US6879266B1 (en) * | 1997-08-08 | 2005-04-12 | Quickshift, Inc. | Memory module including scalable embedded parallel data compression and decompression engines |
CN106464713A (zh) * | 2014-05-02 | 2017-02-22 | 华为技术有限公司 | 用于分层压缩的系统和方法 |
US9679040B1 (en) * | 2010-05-03 | 2017-06-13 | Panzura, Inc. | Performing deduplication in a distributed filesystem |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070233477A1 (en) * | 2006-03-30 | 2007-10-04 | Infima Ltd. | Lossless Data Compression Using Adaptive Context Modeling |
WO2008034213A1 (en) * | 2006-09-18 | 2008-03-27 | Infobright Inc. | A method and system for data compression in a relational database |
US20150010143A1 (en) | 2009-04-30 | 2015-01-08 | HGST Netherlands B.V. | Systems and methods for signature computation in a content locality based cache |
US8694703B2 (en) | 2010-06-09 | 2014-04-08 | Brocade Communications Systems, Inc. | Hardware-accelerated lossless data compression |
US9201892B2 (en) * | 2011-08-30 | 2015-12-01 | International Business Machines Corporation | Fast snapshots |
US20150039837A1 (en) * | 2013-03-06 | 2015-02-05 | Condusiv Technologies Corporation | System and method for tiered caching and storage allocation |
US10146435B2 (en) * | 2013-07-31 | 2018-12-04 | Hitachi, Ltd. | Storage system and data write method |
KR101653692B1 (ko) * | 2013-08-19 | 2016-09-02 | 후아웨이 테크놀러지 컴퍼니 리미티드 | 데이터 오브젝트 처리 방법 및 장치 |
US9710166B2 (en) * | 2015-04-16 | 2017-07-18 | Western Digital Technologies, Inc. | Systems and methods for predicting compressibility of data |
US20180004659A1 (en) * | 2016-07-01 | 2018-01-04 | Intel Corporation | Cribbing cache implementing highly compressible data indication |
-
2018
- 2018-04-28 CN CN201810401755.0A patent/CN110413212B/zh active Active
-
2019
- 2019-02-11 US US16/272,605 patent/US10936227B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5850565A (en) * | 1996-08-26 | 1998-12-15 | Novell, Inc. | Data compression method and apparatus |
US6879266B1 (en) * | 1997-08-08 | 2005-04-12 | Quickshift, Inc. | Memory module including scalable embedded parallel data compression and decompression engines |
US9679040B1 (en) * | 2010-05-03 | 2017-06-13 | Panzura, Inc. | Performing deduplication in a distributed filesystem |
CN106464713A (zh) * | 2014-05-02 | 2017-02-22 | 华为技术有限公司 | 用于分层压缩的系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
US20190332301A1 (en) | 2019-10-31 |
CN110413212A (zh) | 2019-11-05 |
US10936227B2 (en) | 2021-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111324308B (zh) | 用于访问存储器的存储器装置 | |
CN106663047B (zh) | 用于优化的签名比较和数据复制的系统和方法 | |
CN108628942B (zh) | 区块链节点设备、分布式数据库的数据读取及写入方法 | |
US9880941B2 (en) | Sharing an accelerator context across multiple processes | |
US10282307B1 (en) | Lock-free shared hash map | |
US20210173572A1 (en) | System and method for managing volumes of data in a block storage system | |
JP7047228B2 (ja) | データ照会方法、装置、電子機器、可読記憶媒体、及びコンピュータープログラム | |
CN111737564B (zh) | 一种信息查询方法、装置、设备及介质 | |
US11947842B2 (en) | Method for writing data in append mode, device and storage medium | |
EP3660651A1 (en) | Data accessing method, apparatus, and storage medium | |
US20070150432A1 (en) | Method and mechanism for loading XML documents into memory | |
CN110413212B (zh) | 识别待写入数据中的可简化内容的方法、设备和计算机程序产品 | |
US8782375B2 (en) | Hash-based managing of storage identifiers | |
CN110352410B (zh) | 跟踪索引节点的访问模式以及预提取索引节点 | |
CN113127382A (zh) | 用于追加写的数据读取方法、装置、设备和介质 | |
US10083125B2 (en) | Method to efficiently implement synchronization using software managed address translation | |
KR20180080684A (ko) | 메모리에 저장된 데이터 검색 방법 및 시스템 | |
CN112970011A (zh) | 记录查询优化中的谱系 | |
US20210133918A1 (en) | Method, electronic device and computer program product for expanding memory of gpu | |
EP4120088A1 (en) | Key packing for flash key value store operations | |
US20240028519A1 (en) | Data processing method, electronic device and computer program product | |
CN117041392B (zh) | 数据包的处理方法、装置、电子设备和介质 | |
US11500590B2 (en) | Method, device and computer program product for data writing | |
US20230048813A1 (en) | Method of storing data and method of reading data | |
US20240119037A1 (en) | Techniques for adaptive independent compression of key and non-key portions of database rows in index organized tables (iots) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |