本技术实施方式涉及数据处理,特别是涉及一种命名空间的数据处理方法、系统、主机及存储介质。
背景技术:
1、随着固态硬盘的容量越大,通常通过多命名空间来将较大的固态硬盘创建成多个小的命名空间给主机使用,每个命名空间在主机上体现的就是一个独立的物理存储设备。比如在linux上,每个命名空间对应一个独立的块设备,在window上,每个命名空间就是一个独立的物理卷。每个命名空间可以满足主机不同应用的数据存储需求,但是由于每个命名空间都在进行io读写的时候,没有好的方案做到对每个命名空间的流控,导致在主机上没有把命名空间的特性应用起来。
2、目前,固态硬盘的多命名空间(multiple namespaces)的多个命名空间之间的流控没有一个标准的流控方案,现有的技术方案是各个厂家提供自己特有的命令来配置命名空间的带宽和iops,这种方案对于每个命名空间如果下发的io并发数和压力差不多的时候是有效的,但当每个命名空间的业务不同,下发的io并发数和压力相差很大时,也即当部分命名空间的数据流量过大时,会导致其他命名空间的性能降低,从而使得闪存设备性能的稳定性降低,比如ssd盘内的io资源总数为1024个,2gb命名空间的业务量较大,io并发数较高,占1000个io资源,即使高优先级调度4gb的命名空间,但剩下的io资源数只有24个,资源较少,也会影响到4gb命名空间的性能。
技术实现思路
1、本技术实施例提供一种命名空间的数据处理方法、系统、主机及存储介质,通过根据命名空间的优先级,确定命名空间的io队列深度,再根据io队列深度,确定每一命名空间对应的并发io请求数量,根据每一个块设备对应的第一最大并发io请求数量,确定向每一个块设备下发的第一io数据量,本技术能够防止部分命名空间的数据流量过大,导致到其他命名空间的性能降低,从而提高闪存设备性能的稳定性。
2、本技术实施例提供以下技术方案:
3、第一方面,本技术实施例提供一种命名空间的数据处理方法,应用于闪存设备,闪存设备包括至少两个命名空间,每一个命名空间一一对应一个块设备,方法包括:
4、获取每一个命名空间的优先级;
5、根据每一个命名空间的优先级,确定每一个命名空间一一对应的第一io队列深度;
6、根据每一个命名空间对应的第一io队列深度,确定每一个块设备对应的第一最大并发io请求数量;
7、根据每一个块设备对应的第一最大并发io请求数量,确定向每一个块设备下发的第一io数据量,其中,第一io数据量小于或等于第一最大并发io请求数量。
8、在一些实施例中,每一块设备对应的第一最大并发io请求数量等于其对应的命名空间对应的第一io队列深度;
9、在获取每一个命名空间的优先级之前,方法还包括:
10、通过第一配置命令,设置每一命名空间对应的优先级。
11、在一些实施例中,每一个命名空间的优先级一一对应一个系数,根据每一个命名空间的优先级,确定每一个命名空间一一对应的第一io队列深度,包括:
12、获取提交队列的队列深度;
13、根据提交队列的队列深度以及命名空间的优先级对应的系数,确定第一io队列深度,其中,第一io队列深度=命名空间的优先级对应的系数*提交队列的深度。
14、在一些实施例中,根据每一个命名空间的优先级,命名空间的优先级包括第一优先级、第二优先级和第三优先级,第一优先级对应第一系数,第二优先级对应第二系数,第三优先级对应第三系数;
15、根据提交队列的队列深度以及命名空间的优先级对应的系数,确定第一io队列深度,包括:
16、若命名空间的优先级为第一优先级,则将命名空间对应的第一io队列深度确定为第一系数*提交队列的队列深度;
17、若命名空间的优先级为第二优先级,则将命名空间对应的第一io队列深度确定为第二系数*提交队列的队列深度,其中,第二系数小于第一系数;
18、若命名空间的优先级为第三优先级,则将命名空间对应的第一io队列深度确定为第三系数*提交队列的队列深度,其中,第三系数小于第二系数。
19、在一些实施例中,方法还包括:
20、检测当前命名空间对应的并发io请求数量是否超过预设阈值,其中,预设阈值=(所有命名空间对应的并发io请求的总和/命名空间的总数量)*预设系数;
21、当检测到当前命名空间对应的并发io请求数量超过预设阈值时,将命名空间对应的io队列深度调整为第二io队列深度;
22、根据第二io队列深度,将块设备对应的最大并发io请求数量调整为第二最大并发io请求数量。
23、在一些实施例中,根据第二io队列深度,将块设备对应的最大并发io请求数量调整为第二最大并发io请求数量,包括:
24、在接收到闪存设备发送的第一异步事件通知之后,向闪存设备发送命名空间识别命令,以使闪存设备返回第二io队列深度;
25、根据第二io队列深度,将块设备对应的最大并发io请求数量调整为第二最大并发io请求数量,,其中,每一块设备对应的第二最大并发io请求数量等于其对应的命名空间对应的第二io队列深度。
26、在一些实施例中,方法还包括:
27、向闪存设备发送第二配置命令,其中,第二配置命令包括命名空间对应的变更后的优先级;
28、根据变更后的优先级,将命名空间的io队列深度调整为第三io队列深度;
29、根据第三io队列深度,确定每一块设备对应的第三最大并发io请求数量;
30、根据每一个块设备对应的第三最大并发io请求数量,确定向每一个块设备下发的第三io数据量,其中,第三io数据量小于或等于第三最大并发io请求数量。
31、在一些实施例中,根据第三io队列深度,确定每一个块设备对应的第三最大并发io请求数量,包括:
32、在接收到闪存设备发送的第二异步事件通知之后,向闪存设备发送命名空间识别命令,以使闪存设备返回第三io队列深度;
33、根据第三io队列深度,确定每一块设备对应的第三最大并发io请求数量,其中,第三io数据量小于或等于第三最大并发io请求数量。
34、第二方面,本技术实施例提供一种命名空间的数据处理系统,系统包括:
35、闪存设备,通信连接主机,闪存设备用于接收主机发送的第一配置命令,其中,第一配置命令包括每一命名空间对应的优先级;根据每一个命名空间的优先级,确定每一个命名空间一一对应的第一io队列深度,并向主机发送第一异步事件通知,其中,一个命名空间对应一个第一io队列深度,优先级与第一io队列深度成正相关;
36、主机,通信连接闪存设备,主机用于在接收到闪存设备发送的第一异步事件通知之后,向闪存设备发送命名空间识别命令,以使闪存设备向主机返回第一io队列深度;根据第一io队列深度,确定块设备对应的第一最大并发io请求数量;根据每一个块设备对应的第一最大并发io请求数量,确定向每一个块设备下发的第一io数据量,其中,第一io数据量小于或等于第一最大并发io请求数量。
37、在一些实施例中,主机包括块设备驱动模块,块设备驱动模块用于根据第一io队列深度,确定块设备对应的第一最大并发io请求数量;根据每一个块设备对应的第一最大并发io请求数量,确定向每一个块设备下发的第一io数据量,其中,第一io数据量小于或等于第一最大并发io请求数量。
38、在一些实施例中,闪存设备包括固件模块,固件模块用于检测当前命名空间对应的io并发请求是否超过预设阈值,其中,预设阈值=(所有命名空间对应的io并发请求的总和/命名空间的总数量)*预设系数;
39、闪存设备还用于当检测到某一块设备对应的io并发请求超过预设阈值时,将命名空间对应的io队列深度由第一io队列深度调整为第二io队列深度,并向主机发送第二异步事件通知;
40、主机还用于在接收到闪存设备发送的第二异步事件通知之后,向闪存设备发送命名空间识别命令,以使闪存设备向主机返回第二io队列深度;根据第二io队列深度,确定块设备对应的第二最大并发io请求数量;根据块设备对应的第二最大并发io请求数量,确定向块设备下发的第二io数据量,其中,第二io数据量小于或等于第二最大并发io请求数量。
41、第三方面,本技术实施例提供一种主机,包括:
42、至少一个处理器;和
43、与至少一个处理器通信连接的存储器;其中,
44、存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行如第一方面的命名空间的数据处理方法。
45、第四方面,本技术实施例提供一种非易失性计算机可读存储介质,非易失性计算机存储介质中存储有计算机程序或指令,当计算机程序或指令被执行时,实现如第一方面中任一项的命名空间的数据处理方法
46、本技术实施方式的有益效果是:区别于现有技术的情况,本技术实施方式提供一种命名空间的数据处理方法,应用于闪存设备,闪存设备包括至少两个命名空间,每一个命名空间一一对应一个块设备,方法包括:获取每一个命名空间的优先级;根据每一个命名空间的优先级,确定每一个命名空间一一对应的第一io队列深度;根据每一个命名空间对应的第一io队列深度,确定每一个块设备对应的第一最大并发io请求数量;根据每一个块设备对应的第一最大并发io请求数量,确定向每一个块设备下发的第一io数据量,其中,第一io数据量小于或等于第一最大并发io请求数量,本技术能够通过根据命名空间的优先级,确定命名空间的io队列深度,再根据io队列深度,确定每一命名空间对应的并发io请求数量,根据每一个块设备对应的第一最大并发io请求数量,确定向每一个块设备下发的第一io数据量,本技术能够防止部分命名空间的数据流量过大,导致到其他命名空间的性能降低,从而提高闪存设备性能的稳定性。