具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
此外,附图仅为本公开的示意性图解,图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
下面结合附图对本公开示例实施方式进行详细说明。
图1是本公开示例性实施例中固态硬盘写入控制方法的流程图。
参考图1,固态硬盘写入控制方法100可以包括:
步骤S1,采集预设时段内的一或多个写入请求,获取每个所述写入请求的预设参数以及所述预设时段内的写入请求特征;
步骤S2,根据所述预设参数和所述写入请求特征确定每个所述写入请求对应所述第一存储类型或所述第二存储类型;
步骤S3,根据每个所述写入请求对应的存储类型,将所述写入请求的写入数据流写入所述第一存储类型对应的存储区或者所述第二存储类型对应的存储区。
本公开实施例通过根据预设时段内的写入请求集中判断每个写入请求对应的存储类型,进而将每个写入请求分别写入其对应存储类型的存储区,能够尽量避免在后续对写入的数据进行存储类型转换,从而可以避免存储类型转换带来的数据错误和固态硬盘写入次数浪费。此外,通过在固态硬盘中设置存储类型不定的第三存储区,可以根据固态硬盘的实际数据写入情况调整不同存储类型对应的存储区的容量,进一步减少存储类型转换的必要性。
下面,对固态硬盘写入控制方法100的各步骤进行详细说明。
在步骤S1,采集预设时段内的一或多个写入请求,获取每个所述写入请求的预设参数以及所述预设时段内的写入请求特征。
本公开实施例中的预设时段是执行方法100的当前时间点之前的预设时段,例如当前时间点的前1分钟内。预设时段的时间长度固态,起始时间和结尾时间随当前时间点的变化而变化。
在一个实施例中,当前时间点可以是最近一个写入请求的写入时间点,即,方法100可以响应最新的写入请求而执行,从而避免预设时段内不存在写入请求的情况浪费控制资源。在另一个实施例中,方法100也可以在满足设定的触发条件后定期执行,例如每10秒定期执行一次,此时当前时间点为方法100执行的时间点。设定的触发条件例如为出现写入请求。在该实施例中,为了避免写入请求稀少,可以设置方法100定期执行的次数,在方法100定期执行到该次数之前,如果出现新的触发条件,重新计算定期执行的次数;如果在方法100定期执行的次数达到该次数后仍没有出现新的触发条件,可以停止定期执行方法100。
通过实时采集预设时段内的一或多个写入请求,可以实时判断每个写入请求的微观特征和预设时段内的写入请求的宏观特征,准确地判断每个写入请求的最重要的存储需求和最低的存储需求,进而准确判断对每个写入请求最合适的存储类型。
在一个实施例中,写入请求的预设参数可以包括写入地址和响应时间要求,预设时段内的写入请求特征包括预设时段内的写入请求数量、预设时段内的写入请求的写入地址涉及的存储页数。其中,写入请求的写入地址用于统计预设时段内的写入请求的写入地址涉及的存储页数。预设时段内的写入请求的写入地址涉及的存储页数较少,说明预设时段内的写入请求的连续性强,对存储空间要求高;预设时段内的写入请求的写入地址涉及的存储页数较多,说明预设时段内的写入请求较为稀疏或者较为随机。
除了上述预设参数,还可以提取各写入请求的数据量等参数,以进行后续判断。本领域技术人员可以自行设置能够反应写入请求的数据存储需求的预设参数,本公开对此不作特殊限制。
在步骤S2,根据所述预设参数和所述写入请求特征确定每个所述写入请求对应所述第一存储类型或所述第二存储类型。
在本公开实施例中,第一存储类型为存储性能较高、存储容量较小的存储类型,第二存储类型为与第一存储类型相比,存储容量较大、存储性能相对较低的存储类型。
在一个实施例中,第一存储类型包括单层式存储类型,第二存储类型包括多层式存储类型、三层式存储类型、四层式存储类型中的一种。其中单层式存储类型对应存储单元为SLC,多层式存储类型对应存储单元为MLC,三层式存储类型对应存储单元为TLC,四层式存储类型对应存储单元为QLC。
在其他实施例中,也可以将第一存储类型设置为多层式存储类型,将第二存储类型设置为三层式存储类型或者四层式存储类型;或者,将第一存储类型设置为三层式存储类型,将第二存储类型设置为四层式存储类型等。随着科技发展,存储类型将更加丰富,本公开实施例不对第一存储类型和第二存储类型的具体类型做严格限制,只要满足上述存储性能和存储容量的原则即可。
在本公开实施例中,实时判断每个写入请求的最重要的存储需求和最低的存储需求,从而确定对每个写入请求最合适的存储类型,尽量避免后续转换已写入数据的存储类型。
下面,以写入请求的预设参数可以包括写入地址和响应时间要求,预设时段内的写入请求特征包括预设时段内的写入请求数量、预设时段内的写入请求的写入地址涉及的存储页数为例进行说明。当预设参数和写入请求特征包括其他类型的数据时,可以按照下列实施例的原理形成新的实施例。
图2是本公开一个实施例中步骤S2的子流程图。
参考图2,在一个实施例,写入请求的预设参数可以包括写入地址和响应时间要求,预设时段内的写入请求特征包括预设时段内的写入请求数量、预设时段内的写入请求的写入地址涉及的存储页数,步骤S2可以包括:
步骤S21,在一个写入请求的响应时间要求小于第一预设值时,确定该写入请求对应第一存储类型;
步骤S22,在预设时段内的写入请求数量小于第二预设值时,将预设时段内的一或多个写入请求中不对应第一存储类型的写入请求,均确定为对应第二存储类型;
步骤S23,在预设时段内的写入请求数量大于等于第二预设值且在预设时段内的写入请求的写入地址涉及的存储页数超过第三预设值时,确定预设时段内的一或多个写入请求均对应第一存储类型;
步骤S24,在预设时段内的写入请求数量大于第二预设值且在预设时段内的写入请求的写入地址涉及的存储页数不超过第三预设值时,将预设时段内的一或多个写入请求中不对应第一存储类型的写入请求,均确定为对应第二存储类型。
当一个写入请求的响应时间要求小于第一预设值时,说明该写入请求对存储性能要求较高,可以判断存储性能是该写入请求的最重要的存储需求,此时,直接将该写入请求标记为对应性能较优的第一存储类型,无需与其他请求协同判断。
当预设时段内的写入请求数量小于第二预设值时,说明最近预设时段的写入请求数量稀少,这存在两种可能。第一种是最近预设时段的写入请求连续,但是存在数据量较大、传输时间较长的写入请求,降低了预设时段内的写入请求的数量。第二种是最近预设时段的写入请求较为稀疏,数据写入不频繁。对于第一种情况,应当优先满足其对存储容量的要求,确定这些写入请求中未被标记为第一存储类型的请求均对应存储容量较大的第二存储类型。对于第二种情况,说明最近预设时段对写入请求的处理时间比较充裕,可以降低对存储过程的性能要求,优先使用性能较差的第二存储类型的存储方式。
当预设时段内的写入请求数量大于等于第二预设值时,说明近期写入频繁,正在进行大批量写入。此时,可以判断当前的大批量写入是大批量顺序写入还是大批量随机写入。
当预设时段内的写入请求的写入地址涉及的存储页数超过第三预设值时,说明当前的大批量写入请求的写入地址较为分散和随机,对存储空间的需求低,且最近预设时段对写入请求的处理时间比较不充裕,此时可以优先选择将最近预设时段内的一批写入请求均设置为对应存储性能较好、存储空间不大的第一存储类型。
当预设时段内的写入请求的写入地址涉及的存储页数未超过第三预设值时,说明当前的大批量写入请求的写入地址较为连续,对存储空间的需求高,此时可以优先选择将最近预设时段内的一批写入请求中没有较高的响应时间需求的写入请求均设置为对应存储空间较大的第二存储类型。
上述第一预设值、第二预设值、第三预设值均可以根据实际情况自行设置,本公开对此不作特殊限制。
通过使用每个写入请求的预设参数(微观特征)以及预设时段内的写入请求特征(宏观特征)实时分析当前每个写入请求的存储需求,可以准确为每个写入请求设定最合适的存储方式,尽量避免在后续进行存储类型转换。
需要说明的是,如果设置预设时段的最晚时间为最近一个写入请求的达到时间,则需要频繁获取预设时段内的写入请求特征,当写入请求较为密集时,会带来较大的数据处理负担。因此,可以在将执行方法100的触发条件设置为写入请求到达的同时,对两次执行方法100的时间点设置最小间隔。
在一些情况下,连续两次执行方法100时对应的预设时段可能存在重合,涉及的写入请求存在重合。此时,可以根据时间在后的预设时段的写入请求特征确定的每个写入请求的存储类型对两个预设时段内重复的每个尚未完成写入的写入请求进行存储,即根据最新到达的写入请求,更新先前的尚未存储的写入请求的存储类型。
在步骤S3,根据每个所述写入请求对应的存储类型,将所述写入请求的写入数据流写入所述第一存储类型对应的存储区或者所述第二存储类型对应的存储区。
固态硬盘主要包括存储阵列和连接存储阵列的控制器。
存储阵列包括多个存储通道(channel),每个存储通道包含多个颗粒封装(package),这些多颗粒封装之间共享传输通道,不过每个颗粒封装可以独立执行操作指令。每个颗粒封装包含多个颗粒(die),同样每个颗粒可以独立执行操作指令;每个颗粒由多个存储片(plane)组成,每个存储片中包含一个寄存器,用于作为缓存作用。在一个存储片内部包含多个存储块(block),每个存储块由固定数量的存储页(page)组成,同时,存储块是擦除操作的基本单元,并且只能承受有限次数的擦除,而存储页是读/写操作的最小单元。
在本公开实施例中,固态硬盘包括第一存储区、第二存储区、第三存储区,每个存储区均包括多个存储块(block)。
图3是本公开一个实施例中固态硬盘的示意图。
参考图3,固态硬盘300主要包括存储阵列31和控制器32。
存储阵列31包括第一存储区311、第二存储区312、第三存储区313,其中第一存储区311被设定为对应第一存储类型,即第一存储区311中的存储单元均为同一存储类型的存储单元;第二存储区312被设定为对应第二存储类型,即第二存储区312中的存储单元均为同一存储类型的存储单元;第三存储区313的存储类型不定,且第三存储区313与第一存储区311和第二存储区312的地址均连续。
在一个实施例中,第一存储区311包括第一预设数量个存储块,第二存储区312包括第二预设数量个存储块,第一预设数量和第二预设数量均为固定值。第一存储区311中的存储块地址连续,可以涉及一或多个存储片;第二存储区312中的存储块地址连续,可以涉及一或多个存储片;第三存储区313中的存储块地址连续,可以涉及一或多个存储片。第一存储区311、第二存储区312、第三存储区313中的存储块不重合。
在一个实施例中,可以直接将对应第一存储类型的写入请求写入第一存储区311,将对应第二存储类型的写入请求写入第二存储区312。但是在另一些实施例中,当固态硬盘300的使用时间较长、读写次数较多时,可能存在第一存储区311或者第二存储区312不够用的情况。此时可以根据每个写入请求对应的存储类型、第一存储区311的剩余存储空间、第二存储区312的剩余存储空间设置第三存储区313对应的存储类型,调用第三存储区313进行支持,以避免转换已存储数据的存储类型。
图4是本公开一个实施例中使用第三存储区的流程图。
参考图4,使用第三存储区进行存储的过程可以包括:
步骤S41,确定对应所述第一存储类型的写入请求的第一数据量以及对应所述第二存储类型的写入请求的第二数据量;
步骤S42,在所述第一数据量超过所述第一存储区的剩余存储空间时,将所述第三存储区设置为对应第一存储类型;
步骤S43,在所述第一数据量未超过所述第一存储区的剩余存储空间,且所述第二数据量超过所述第二存储区的剩余存储空间时,将所述第三存储区设置为对应第二存储类型。
在图4所示实施例中,可以实时判断第一存储区311的剩余存储空间是否能够满足当前对应第一存储类型的写入请求的总的数据量,以及第二存储区312的剩余存储空间是否能够满足当前对应第二存储类型的写入请求的总的数据量。
如果仅有一个存储区不能满足当前数据的存储需求,则直接将第三存储区313设置为该存储区对应的存储类型,以支持该存储区进行存储。由于第三存储区313与第一存储区311和第二存储区312的存储地址均连续,在设置了存储类型后,能够与第一存储区311或第二存储区312协同存储连续数据,不会发生同一数据流被分为不同地址进行存储的情况。
如果第一存储区311和第二存储区312均不能满足存储需求,优先将第三存储区313设置为对应第一存储类型,以满足对存储性能的要求。
在尚无对第三存储区313写入数据的需求时,可以将第三存储区313默认设置为任意存储类型;在判断需要使用第三存储区313时,将第三存储区313设置为需要的存储类型;在对第三存储区313写入数据后,除非发生预设的特殊事件,否则不对第三存储区的存储类型进行转换,以避免对已写入数据进行存储类型转换。
在设置第三存储区313对应的存储类型时,可以对第三存储区313的全部存储单元均设置相同的存储类型,也可以按照实际的存储需求对全部存储单元设置不完全相同的存储类型。
图5是本公开另一个实施例中固态硬盘的示意图。
参考图5,在另一个实施例中,第三存储区313包括多个存储地址连续的子存储区313i,每个子存储区313i对应的存储类型不完全相同。
在固态硬盘如图5所示时,可以根据每个写入请求对应的存储类型、第一存储区的剩余存储空间、第二存储区的剩余存储空间将第三存储区中的至少一个子存储区设置为对应第一存储类型,和/或,根据每个写入请求对应的存储类型、第一存储区的剩余存储空间、第二存储区的剩余存储空间将第三存储区中的至少一个子存储区设置为对应第二存储类型;其中,对应第一存储类型的子存储区与第一存储区的存储地址连续,对应第二存储类型的子存储区与第二存储区的存储地址连续。
如图5所示,可以将与第一存储区311的地址连续的多个相邻的子存储区313a~313c均设置为第一存储类型,将与第二存储区312的地址连续的多个相邻的子存储区313y、313z均设置为第二存储类型。从而实现第三存储区313的复用。
多个子存储区313i的存储容量大小可以固定,由此,可以根据图4实施例中的第一数据量超过第一存储区311的剩余存储空间的多少,来确定将多少个临近第一存储区311的子存储区313i设置为第一存储类型;和/或,根据图4实施例中的第二数据量超过第二存储区312的剩余存储空间的多少,来确定将多少个临近第二存储区312的子存储区313i设置为第二存储类型。
如果下一批预设时段内的写入请求到达,仍需要调用第三存储区313来辅助存储时,如果需要将一部分子存储区313i设置为第一存储类型,则按照与已经被设置为第一存储类型的子存储区313i的地址的距离由近到远将更多子存储区313i设置为第一存储类型。将更多子存储区313i设置为第二存储类型的方式相同,不再赘述。
在第三存储区313多次进行辅助存储后,如果剩余的子存储区313i的总存储容量不足以支撑当前的存储需求,则可以直接告警。
在另一些实施例中,还可以将第三存储区313中的一些子存储区313i设置为第三存储类型、第四存储类型等,以为特殊数据提供更丰富和全面的存储类型选择。
图6是本公开再一个实施例中固态硬盘的存储空间划分示意图。
参考图6,在再一个实施例中,靠近第一存储区311的多个子存储区313i被设置为对应第一存储类型,靠近第二存储区312的多个子存储区313i被设置为对应第二存储类型,位于第一存储类型的子存储区和第二存储类型的子存储区之间的固定数量的子存储区被设置为对应第三存储类型。第三存储类型与第一存储类型和第二存储类型均不相同,例如,当第一存储类型为SLC,第二存储类型为TLC时,第三存储类型可以为MLC或者QLC。第三存储类型的存储性能可以介于第一存储类型和第二存储类型之间,也可以同时优于第一存储类型和第二存储类型,或者同时劣于第一存储类型和第二存储类型(但是能提供更大的存储空间)。
综上所述,本公开实施例在固态硬盘中设置存储类型固定、存储空间固定的第一存储区和第二存储区,同时根据实时的写入请求的特点进行数据写入,能够为每个写入请求确定满足其最重要的存储需求和最低存储需求的存储类型,合理对每个写入请求的数据流进行存储,避免后续更改已存储数据的存储类型,造成不必要的数据转换和写入次数浪费。此外,通过在第一存储区和第二存储区之间设置可以灵活变动的第三存储区,能够降低固定第一存储区和第二存储区带来的存储容量需求无法满足的风险,同时减少转换存储类型的风险。第三存储区还能提供更细致和丰富的存储类型、存储容量选择,提高固态硬盘的使用灵活性,整体提高了固态硬盘的写入性能。
对应于上述方法实施例,本公开还提供一种固态硬盘写入控制装置,可以用于执行上述方法实施例。
图7是本公开示例性实施例中一种固态硬盘写入控制装置的方框图。
参考图7,固态硬盘写入控制装置700可以包括:
特征提取模块71,设置为采集预设时段内的一或多个写入请求,获取每个所述写入请求的预设参数以及所述预设时段内的写入请求特征;
存储类型确定模块72,设置为根据所述预设参数和所述写入请求特征确定每个所述写入请求对应所述第一存储类型或所述第二存储类型;
数据写入模块73,设置为根据每个所述写入请求对应的存储类型,将所述写入请求的写入数据流写入所述第一存储类型对应的存储区或者所述第二存储类型对应的存储区。
在本公开的一种示例性实施例中,所述第一存储类型包括单层式存储类型,所述第二存储类型包括多层式存储类型、三层式存储类型、四层式存储类型中的一种。
在本公开的一种示例性实施例中,所述写入请求的预设参数包括写入地址和响应时间要求,所述预设时段内的写入请求特征包括所述预设时段内的写入请求数量、所述预设时段内的写入请求的写入地址涉及的存储页数。
在本公开的一种示例性实施例中,存储类型确定模块72设置为:在一个所述写入请求的所述响应时间要求小于第一预设值时,确定该写入请求对应所述第一存储类型;在所述预设时段内的写入请求数量小于第二预设值时,将所述预设时段内的一或多个写入请求中不对应所述第一存储类型的写入请求,均确定为对应所述第二存储类型;在所述预设时段内的写入请求数量大于等于所述第二预设值且在所述预设时段内的写入请求的写入地址涉及的存储页数超过第三预设值时,确定所述预设时段内的一或多个写入请求均对应所述第一存储类型;在所述预设时段内的写入请求数量大于等于所述第二预设值且在所述预设时段内的写入请求的写入地址涉及的存储页数不超过所述第三预设值时,将所述预设时段内的一或多个写入请求中不对应所述第一存储类型的写入请求,均确定为对应所述第二存储类型。
在本公开的一种示例性实施例中,还包括第三存储区调用模块74,第三存储区调用模块74设置为:根据每个所述写入请求对应的存储类型、所述第一存储区的剩余存储空间、所述第二存储区的剩余存储空间设置所述第三存储区对应的存储类型。
在本公开的一种示例性实施例中,第三存储区调用模块74设置为:确定对应所述第一存储类型的写入请求的第一数据量以及对应所述第二存储类型的写入请求的第二数据量;在所述第一数据量超过所述第一存储区的剩余存储空间时,将所述第三存储区设置为对应第一存储类型;在所述第一数据量未超过所述第一存储区的剩余存储空间,且所述第二数据量超过所述第二存储区的剩余存储空间时,将所述第三存储区设置为对应第二存储类型。
在本公开的一种示例性实施例中,所述第三存储区包括多个存储地址连续的子存储区,每个所述子存储区对应的存储类型不完全相同,第三存储区调用模块74设置为:根据每个所述写入请求对应的存储类型、所述第一存储区的剩余存储空间、所述第二存储区的剩余存储空间将所述第三存储区中的至少一个所述子存储区设置为对应所述第一存储类型,和/或,根据每个所述写入请求对应的存储类型、所述第一存储区的剩余存储空间、所述第二存储区的剩余存储空间将所述第三存储区中的至少一个所述子存储区设置为对应所述第二存储类型;其中,对应所述第一存储类型的子存储区与所述第一存储区的存储地址连续,对应所述第二存储类型的子存储区与所述第二存储区的存储地址连续。
由于装置700的各功能已在其对应的方法实施例中予以详细说明,本公开于此不再赘述。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和构思由权利要求指出。