支持SR-IOV的存储资源访问方法、存储控制器及存储设备
技术领域
本发明涉及通信技术领域,尤其涉及一种支持单根输入/输出虚拟化SR-IOV的存储资源访问方法、存储控制器及存储设备。
背景技术
单根输入/输出(Input/Output,I/O)虚拟化(Single Root I/O Virtualization,SR-IOV)是对快速外设互连总线接口(Peripheral Component Interconnect,PCIe)规范的延伸,它促使各类系统镜像或用户随机存取物理I/O资源上的子集,从而获得更好的数据移动,达到基础硬件资源的共享。
PCIe固态硬盘(Solid State Driver,SSD)具备高带宽、高IOPS(Input/OutputOperations Per Second,每秒输入/输出操作)、低延时的特点,硬件潜力大。
然而,现在技术并没有提供让存储设备(如PCIe SSD)支持SR-IOV的实现方法,从而使得现有存储设备无法支持SR-IOV,无法更好地实现硬件资源共享以提升存储设备中存储资源的利用率。
发明内容
本发明实施例提供一种支持SR-IOV的存储资源访问方法、存储控制器及存储设备,用于解决现有技术存在着的存储设备无法更好地实现硬件资源共享以提升存储设备中存储资源的利用率的问题。
第一方面,本发明实施例提供了一种支持单根输入/输出虚拟化的控制器实现方法,由存储设备中的存储控制器执行,所述存储设备还包括存储介质,所述存储控制器用于分别连接主机以及所述存储介质,其中,所述主机运行有虚拟机监控器以及一个或多个虚拟机,所述存储控制器中包括物理功能PF以及与所述PF关联的一个或多个虚拟功能VF,所述PF与所述虚拟机监控器进行直接通信,每个所述VF与一个所述虚拟机进行直接通信,所述方法包括:
将所述存储介质整合为统一存储资源,并将所述统一存储资源划分为多个存储子资源;
根据预设分配原则将所述存储子资源分配给所述PF和所述VF中的至少一个,并维护一个资源分配表,其中,所述资源分配表包括存储子资源与所述PF以及所述VF中的至少一个的映射关系;
接收所述虚拟机发送给目的VF或者所述虚拟机监控器发送给目的PF的主机命令;
根据所述目的VF或目的PF查找所述资源分配表,根据所述资源分配表中的存储子资源与所述PF或者所述VF的映射关系对所述目的PF或者所述目的VF对应的存储子资源进行与所述主机命令对应的操作。
在第一方面的第一种可能的实现方式中,所述主机包括内存,所述内存包括至少一个队列,所述PF或者所述VF中的至少一个分别对应一个或多个不同的所述队列;
所述接收所述虚拟机发送给目的VF或者所述虚拟机监控器发送给目的PF的主机命令包括:
当获知所述主机将所述主机命令放到所述主机内存中的所述队列后,发起直接内存存取DMA操作,从所述主机内存中的队列中所述目的VF或者所述目的PF对应的队列中获取所述主机命令。
结合第一方面第一种可能的实现方式,在第二种可能的实现方式中,所述存储控制器还包括多个中断资源,所述多个中断资源被分配给所述主机内存中的队列,使得一个或多个所述队列对应一个中断资源,所述方法还包括:
通过所述DMA操作将需要发送给所述主机的控制器命令传输到主机中的内存;
通过与所述目的VF或者所述目的PF的目的队列对应的中断资源通知所述主机去获取控制器命令;
其中,所述目的VF或者所述目的PF的目的队列为:所述主机内存中的队列中所述目的VF或者所述目的PF对应的队列。
结合第一方面第二种可能的实现方式,在第三种可能的实现方式中:
所述中断资源为MSI-x中断,所述主机内存中每个所述队列对应一个MSI-x中断。
结合第一方面,或者第一方面第一至第三种任意一种可能的实现方式,在第四种可能的实现方式中,所述主机命令中包括用于标识所述存储子资源的存储子资源相对标识ID,所述资源分配表中的存储子资源用存储子资源绝对ID来标识;
所述根据所述目的VF或目的PF查找所述资源分配表,根据所述资源分配表中的存储子资源与所述PF或者所述VF的映射关系对所述目的VF或者所述目的VF对应的存储子资源进行与所述主机命令对应的操作包括:
根据所述资源分配表中的存储子资源与所述PF或者所述VF的映射关系找到与所述目的VF或所述目的PF对应的存储子资源,并根据存储子资源相对ID与存储子资源绝对ID之间的对应关系找到与携带在所述主机命令中的存储子资源相对ID对应的存储子资源绝对ID,对与找到的存储子资源绝对ID对应的存储子资源进行操作。
结合第一方面,或者第一方面第一至第四种任意一种可能的实现方式,在第五种可能的实现方式中,所述根据预设分配原则将所述存储子资源分配给所述PF和所述VF中的至少一个,并维护一个资源分配表包括:
根据预设分配原则将至少一个所述存储子资源分配给一个所述PF,并将所述存储子资源与所述PF的映射关系保存至所述资源分配表;或者
根据预设分配原则将至少一个所述存储子资源分配给一个所述VF,并将所述至少一个所述存储子资源与所述VF的映射关系保存至所述资源分配表;或者
根据预设分配原则将一个所述存储子资源分配给多个所述VF,并将所述存储子资源与各个所述VF的映射关系保存至所述资源分配表。
结合第一方面,或者第一方面第一至第五种任意一种可能的实现方式,在第六种可能的实现方式中,所述PF用于执行全局性的存储控制器功能;
其中,所述全局性的存储控制器功能包括:Firmware Download或者Firmware Active命令的实现、Format命令的实现,或者全盘复位的关机功能中的至少一种。
第二方面,本发明实施例提供了一种支持单根输入/输出虚拟化的存储控制器,所述存储控制器用于分别连接主机以及存储介质,其中,所述主机运行有虚拟机监控器以及一个或多个虚拟机,所述存储控制器中包括物理功能PF以及与所述PF关联的一个或者多个虚拟功能VF,所述VF与所述虚拟机监控器进行直接通信,每个所述VF与一个所述虚拟机进行直接通信,包括:
整合模块,用于将所述存储介质整合为统一存储资源,并将所述统一存储资源划分为多个存储子资源;
分配模块,用于根据预设分配原则将所述整合模块所划分的所述存储子资源分配给所述PF和所述VF中的至少一个,并维护一个资源分配表,其中,所述资源分配表包括存储子资源与所述PF以及所述VF中的至少一个的映射关系;
接收模块,用于接收所述虚拟机发送给目的VF或者所述虚拟机监控器发送给目的PF的主机命令;
操作模块,用于根据所述目的VF或目的PF查找所述资源分配表,根据所述资源分配表中的存储子资源与所述PF或者所述VF的映射关系对所述目的PF或者所述目的VF对应的存储子资源进行与所述接收模块接收到的所述主机命令对应的操作。
在第二方面的第一种可能的实现方式中,所述主机包括内存,所述内存包括至少一个队列,所述PF或者所述VF中的至少一个分别对应一个或多个不同的所述队列;
所述接收模块具体用于:
在获知所述主机将所述主机命令放到所述主机内存中的所述队列后,发起直接内存存取DMA操作,从所述主机内存中的队列中所述目的VF或者所述目的PF对应的队列中获取所述主机命令。
结合第二方面第一种可能的实现方式,在第二种可能的实现方式中,所述存储控制器还包括多个中断资源,所述多个中断资源被分配给所述主机内存中的队列,使得一个或多个所述队列对应一个中断资源;
所述存储控制器还包括:
传输模块,用于通过所述DMA操作将需要发送给所述主机的控制器命令传输到主机中的内存;
通知模块,用于通过与所述目的VF或者所述目的PF的目的队列对应的中断资源通知所述主机去获取控制器命令;
其中,所述目的VF或者所述目的PF的目的队列为:所述主机内存中的队列中所述目的VF或者所述目的PF对应的队列。
结合第二方面第二种可能的实现方式,在第三种可能的实现方式中,所述中断资源为MSI-x中断,所述主机内存中每个所述队列对应一个MSI-x中断。
结合第二方面,或者第二方面第一至第三种任意一种可能的实现方式,在第四种可能的实现方式中,所述主机命令中包括用于标识所述存储子资源的存储子资源相对标识ID,所述资源分配表中的存储子资源用存储子资源绝对ID来标识;
所述操作模块具体用于:
根据所述资源分配表中的存储子资源与所述PF或者所述VF的映射关系找到与所述目的VF或所述目的PF对应的存储子资源,并根据存储子资源相对ID与存储子资源绝对ID之间的对应关系找到与携带在所述主机命令中的存储子资源相对ID对应的存储子资源绝对ID,对与找到的存储子资源绝对ID对应的存储子资源进行操作。
结合第二方面,或者第二方面第一至第四种任意一种可能的实现方式,在第五种可能的实现方式中,所述分配模块具体用于:
根据预设分配原则将至少一个所述存储子资源分配给一个所述PF,并将所述存储子资源与所述PF的映射关系保存至所述资源分配表;或者
根据预设分配原则将至少一个所述存储子资源分配给一个所述VF,并将所述至少一个所述存储子资源与所述VF的映射关系保存至所述资源分配表;或者
根据预设分配原则将一个所述存储子资源分配给多个所述VF,并将所述存储子资源与各个所述VF的映射关系保存至所述资源分配表。
结合第二方面,或者第二方面第一至第五种任意一种可能的实现方式,在第六种可能的实现方式中,所述PF用于执行全局性的存储控制器功能;
其中,所述全局性的存储控制器功能包括:Firmware Download或者Firmware Active命令的实现、Format命令的实现,或者全盘复位的关机功能中的至少一种。
第三方面,本发明实施例提供了一种存储设备,包括:存储控制器以及存储介质;
所述存储控制器与所述存储介质相连,并且用于与外部的主机相连,以使所述主机通过所述存储控制器读写所述存储介质中的数据,所述主机运行有虚拟机监控器以及一个或多个虚拟机,所述存储控制器中包括物理功能PF以及与所述PF关联的一个或多个虚拟功能VF,所述PF与所述虚拟机监控器进行直接通信,每个所述VF与一个所述虚拟机进行直接通信;
所述存储控制器用于:
将所述存储介质整合为统一存储资源,并将所述统一存储资源划分为多个存储子资源;
根据预设分配原则将所述存储子资源分配给所述PF和所述VF中的至少一个,并维护一个资源分配表,其中,所述资源分配表包括存储子资源与所述PF以及所述VF中的至少一个的映射关系;
接收所述虚拟机发送给目的VF或者所述虚拟机监控器发送给目的PF的主机命令;
根据所述目的VF或目的PF查找所述资源分配表,根据所述资源分配表中的存储子资源与所述PF或者所述VF的映射关系对所述目的PF或者所述目的VF对应的存储子资源进行与所述主机命令对应的操作。
在第三方面的第一种可能的实现方式中,所述主机包括内存,所述内存包括至少一个队列,所述PF或者所述VF中的至少一个分别对应一个或多个不同的所述队列;
所述存储控制器用于所述接收所述虚拟机发送给目的VF或者所述虚拟机监控器发送给目的PF的主机命令时,具体用于:
当获知所述主机将所述主机命令放到所述主机内存中的所述队列后,发起直接内存存取DMA操作,从所述主机内存中的队列中所述目的VF或者所述目的PF对应的队列中获取所述主机命令。
在第三方面的第一种可能的实现方式中,所述存储控制器还包括多个中断资源,所述多个中断资源被分配给所述主机内存中的队列,使得一个或多个所述队列对应一个中断资源,所述存储控制器还用于:
通过所述DMA操作将需要发送给所述主机的控制器命令传输到主机中的内存;
通过与所述目的VF或者所述目的PF的目的队列对应的中断资源通知所述主机去获取控制器命令;
其中,所述目的VF或者所述目的PF的目的队列为:所述主机内存中的队列中所述目的VF或者所述目的PF对应的队列。
结合第三方面第二种可能的实现方式,在第三种可能的实现方式中,
所述中断资源为MSI-x中断,所述主机内存中每个所述队列对应一个MSI-x中断。
结合第三方面,或者第三方面第一至第三种任意一种可能的实现方式,在第四种可能的实现方式中,所述主机命令中包括用于标识所述存储子资源的存储子资源相对标识ID,所述资源分配表中的存储子资源用存储子资源绝对ID来标识;
所述存储控制器用于根据所述目的VF或目的PF查找所述资源分配表,根据所述资源分配表中的存储子资源与所述PF或者所述VF的映射关系对所述目的PF或者所述目的VF对应的存储子资源进行与所述主机命令对应的操作时,具体用于:
根据所述资源分配表中的存储子资源与所述PF或者所述VF的映射关系找到与所述目的VF或所述目的PF对应的存储子资源,并根据存储子资源相对ID与存储子资源绝对ID之间的对应关系找到与携带在所述主机命令中的存储子资源相对ID对应的存储子资源绝对ID,对与找到的存储子资源绝对ID对应的存储子资源进行操作。
结合第三方面,或者第三方面第一至第四种任意一种可能的实现方式,在第五种可能的实现方式中,所述存储控制器用于根据预设分配原则将所述存储子资源分配给所述PF和所述VF中的至少一个,并维护一个资源分配表时,具体用于:
根据预设分配原则将至少一个所述存储子资源分配给一个所述PF,并将所述存储子资源与所述PF的映射关系保存至所述资源分配表;或者
根据预设分配原则将至少一个所述存储子资源分配给一个所述VF,并将所述至少一个所述存储子资源与所述VF的映射关系保存至所述资源分配表;或者
根据预设分配原则将一个所述存储子资源分配给多个所述VF,并将所述存储子资源与各个所述VF的映射关系保存至所述资源分配表
第四方面,本发明实施例提供了一种存储系统,所述存储系统包括主机以及第三方面或者第三方面任一种可能的实现方式中的存储设备。
在本发明实施例中,本发明实施例通过对存储设备中的存储介质进行整合、分配,并根据虚拟机或者虚拟机监控器发送的命令对接收命令的VF或者PF对应的存储子资源进行操作,给出了存储设备如何具体实现对SR-IOV支持的实现方式,从而可以提高存储设备中存储资源的利用率以及提高存储设备的性能。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的PCIe SSD的系统结构示意图;
图2是本发明实施例提供的支持SR-IOV的存储资源访问方法的一实施例流程示意图;
图3是本发明实施例提供的支持SR-IOV的存储资源访问方法的另一实施例流程示意图;
图4是本发明实施例提供的NAND Flash资源的映射示意图;
图5是本发明实施例提供的支持SR-IOV的存储控制器的一实施例结构示意图;
图6是本发明实施例提供的支持SR-IOV的存储控制器的另一实施例结构示意图;
图7是本发明实施例提供的存储控制器的又一实施例结构示意图;
图8是本发明实施例提供的存储设备结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本发明实施例中所描述的支持单根输入/输出虚拟化的控制器实现方法可由存储设备中的存储控制器执行。例如,如图1所示,该存储设备可以是固态硬盘SSD,SSD包括存储控制器(SSD控制器)以及存储介质(也可以称“存储资源”或者“物理存储资源”,具体可以为NAND Flash),存储控制器与存储介质相连,同时,也与主机相连(可通过PCIe等高速接口与主机相连),以使主机通过存储控制器来读写存储介质中的数据。
本发明实施例中的主机可以是服务器,或者PC,或者其他需要连接存储设备的计算单元。主机中包括虚拟机监控器VMM、一个或者多个虚拟机VM(包括VM0、VM1、VM2……VM n,其中,n为自然数)。上述存储控制器中包括PF,以及与PF关联的一个或者多个VF(如图中所示的VF0、VF1、VF2,…,VFn等,其中,n为自然数)。在本发明实施例中,主机与存储控制器之间可以基于NVMe协议进行通信,上述PF与虚拟机监控器进行直接通信,每个VF与一个虚拟机进行直接通信,例如,PF可与虚拟机监控器VMM进行直接通信,VF1可与VM1直接通信,VF2可与VM2直接通信等。上述PF与虚拟机监控器之间、以及VF与VM之间的直接通信技术为本领域技术人员所公知的技术,这里不进行具体描述。
参见图2,本发明实施例中所描述的支持SR-IOV的存储资源访问方法包括:
S101,将存储设备中的存储介质整合为统一存储资源,并将所述统一存储资源划分为多个存储子资源。
可选地,本发明实施例中所描述的存储设备具体可为PCIe SSD(即接口为PCIe接口的SSD),上述存储设备中包括的存储介质具体可为NAND Flash。具体实现中,为了将PCIe SSD中的存储介质更好地分配给PF和各个VF,存储控制器可将PCIe SSD中的存储介质整合为统一存储资源,将统一存储资源划分为多个存储子资源,以将上述多个存储子资源分配给PF和各个VF。
具体的,如图1,存储控制器可通过闪存转换层(Flash Translation Layer,FTL)技术将NAND Flash映射成单一的逻辑空间(即SSD逻辑空间),用绝对逻辑区块地址(Logical Block Address,LBA)来表示,例如:Abs_Start_LBA~Abs_End_LAB;其中,上述单一的逻辑空间即为将NAND Flash进行整合得到的统一存储资源。将上述NAND Flash映射为单一的逻辑空间之后,再将单一的逻辑空间划分为不同的区段,即,将上述单一的逻辑空间划分为多个LBA范围,每个区段(即每个LBA范围)为一个命名空间Namespace(简称NS),其中,上述各个NS的大小可相同,也可不同,在此不做限制。其中,上述由单一的逻辑空间划分得到的NS即为有统一存储资源划分得到的存储子资源。存储控制器可记录每个NS在上述单一的逻辑空间(即全局逻辑空间)的绝对LBA范围,进而可将上述各个NS分配给PF或者VF使用。
S102,根据预设分配原则将所述存储子资源分配给所述PF和所述VF中的至少一个,并维护一个资源分配表,其中,所述资源分配表包括存储子资源与所述PF以及所述VF中的至少一个的映射关系。
在一些可行的是实施方式中,存储控制器通过PF将PCIe SSD中的存储介质整合成统一存储资源,并将统一存储资源划分为多个存储子资源之后,则可根据预设分配原则将上述存储子资源分配给PF或者VF,并维护一个资源分配表。具体的,存储控制器可根据虚拟机监控器发送的分配命令将上述存储子资源分配给PF和VF,其中,上述资源分配表中包括存储子资源和PF或者VF的映射关系。具体的,上述资源分配表还包括PF的标识信息、与上述PF关联的每个VF的标识信息。存储控制器可建立PF的标识信息与分配给该PF的存储介质的映射关系,以通过上述PF的标识信息查询分配给该PF的存储介质。存储控制器还可建立VF的标识信息与分配给该VF的存储介质的映射关系,以通过上述VF的标识信息查询分配给该VF的存储介质。其中,存储控制器可根据虚拟机监控器发送的分配命令将上述存储子资源分配给PF和VF。
S103,接收所述虚拟机发送给目的VF或者所述虚拟机监控器发送给目的PF的主机命令。
本实施例中,“主机命令”即为主机发送的命令,如I/O命令。具体可以由主机中运行的虚拟机或者虚拟机监控器来发送。
可选地,在具体实现中,本实施例所描述的主机包括内存,在运行时,主机的内存中包括至少一个队列,上述PF或者VF对应一个或者多个不同的队列。虚拟机或者虚拟机监控器发送主机命令时可使用队列来发送,虚拟机或者虚拟机监控器发送主机命令时具体使用哪个队列,则往该队列对应的存储空间写该主机命令对应的数据。本实施例中,主机中的虚拟机或者虚拟机监控器可将主机命令放到主机内存中的目的VF或者目的PF对应的队列,再通知存储控制器从主机内存的队列中获取主机命令。
存储控制器获知主机将主机命令放到主机内存中的队列后,则可发起直接内存存取(Direct Memory Access,DMA)操作,从主机内存的队列中上述目的VF或者目的PF对应的队列中获取上述主机命令。
S104,根据所述目的VF或目的PF查找所述资源分配表,根据所述资源分配表中的存储子资源与所述PF或者所述VF的映射关系对所述目的PF或者所述目的VF对应的存储子资源进行与所述主机命令对应的操作。
可选地,具体实现中,上述虚拟机监控器给PF发送命令采用的是直通的方式,存储控制器通过上述目的PF对应的队列接收到主机命令时可获得上述PF的标识信息。此外,存储控制器中实现PCIe通信的功能模块采用SR-IOV直通模式,可得知虚拟机发送的I/O命令直通到哪个VF(例如VF1),即目的VF,进而可在PCIe报文中控制字段添加上VF1的标识信息(例如VF1的ID),将上述携带VF1的标识信息的报文发送至存储控制器中的处理模块。存储控制器中的处理模块可解析上述携带VF1的标识信息的PCIe报文,从上述PCIe报文中获取VF1的标识信息。
具体实现中,存储控制器获取得到PF的标识信息或者VF的标识信息之后,则可根据上述PF的标识信息或者VF的标识信息查询资源分配表,从上述资源分配表中查找得到分配给PF或者VF的存储子资源,进而可对PF对应的存储子资源或者VF对应的存储子资源进行与上述主机命令对应的操作。存储控制器获取得到PF对应的存储子资源(具体可为NS)之后,则可将上述NS中的数据通过DMA的方式传输到主机物理内存地址中。数据传输完成之后,存储控制器可生成响应主机命令的控制器命令,通过DMA的方式将控制器命令传输到主机中的内存,并通过上述目的PF或者目的VF的目的队列对应的中断资源发送中断通知主机去获取控制器命令。
可选地,在本发明实施例中,上述PF可以用于执行上述NVMe协议中的全局性的存储控制器功能。其中,上述全局性的存储控制器功能包括:FirmwareDownload或者Firmware Active命令的实现、Format命令的实现,或者全盘复位的关机功能等。在本发明实施例中,VF用于实现轻量级的SSD控制器功能,包括磁盘IO功能以及少部分SSD控制功能,对于上述全局性的功能,只能在PF中实现。例如,以主机接口协议NVMe为例,类似Firmware Download,FirmwareActive等命令,因为是全局性的命令,仅在PF实现,VF不支持,虚拟机如果下发Firmware Download或者Firmware Active,VF将返回失败。对于Format命令,PF和VF均可支持Namespace的secure erase,对应Chang LBA Format则只有PF支持。对于关机策略,VF接收到关机指令之后,仅对自身相关资源进行复位,包括IO队列等;PF接收到关机指令之后,除了复位自身资源之外,还得通知全盘进行复位,包括后端NAND Flash管理表项的保存等。
在本发明实施例中,存储控制器中的PF还可用于实现单根I/O虚拟化的使能,存储设备中的存储介质的查询、分配以及资源分配表的维护等功能。具体的,主机中的虚拟机监控器可加载PF驱动,使能SR-IOV功能,创建管理队列,并通过PF驱动管理队列下发资源查询命令给PF,PF接收到上述查询命令之后,则可将存储设备中包括的存储介质、中断资源以及队列资源的状态返回给虚拟机监控器。虚拟机监控器接收到PF返回的存储介质中断资源以及队列资源的状态之后,则可向PF发送分配命令,PF可对分配命令进行解析,根据上述分配命令将统一存储资源划分为多个存储子资源,进而将存储子资源、队列资源和中断资源分配给PF或者VF。
在本发明实施例中,存储控制器可将存储设备中的存储介质整合为统一存储资源,将上述统一存储资源划分为多个存储子资源,进而根据主机发送的分配命令将多个存储子资源分配给PF或者VF,将存储子资源与PF或者VF的映射关系保存至资源分配表。当存储控制器接收到虚拟机或者虚拟机监控器发送的命令时,则可根据接收命令的PF或者VF的标识查询资源分配表,根据子资源与PF或者VF的映射关系对存储子资源进行操作。本发明实施例所描述的方法,可支持单根输入/输出虚拟化技术,提高存储设备的I/O性能和存储设备中存储资源的利用率。
实施例二
参见图3,基于上述实施例,本发明实施例提供了一种支持SR-IOV的存储资源访问方法,包括:
S201,将存储设备中的存储介质整合为统一存储资源,并将所述统一存储资源划分为多个存储子资源。
可选地,本发明实施例中所描述的支持单根输入/输出虚拟化的控制器实现方法可由存储控制器执行,其中,如图1,上述存储控制器与主机、存储介质的结构关系可参见本发明实施例提供的支持单根输入/输出虚拟化的控制器实现方法的第一实施例前面的描述内容,在此不再赘述。
具体实现中,本发明实施例中所描述的将存储设备中的存储介质整合为统一存储资源,并将统一存储资源划分为多个存储子资源的具体实现过程可参见上述本发明实施例一中的步骤S101,在此不再赘述。
进一步的,如图4,图4是本发明实施例中描述的NAND Flash资源的映射示意图。存储控制器通过FTL技术功能将NAND Flash映射成单一的逻辑空间(SSD逻辑空间),记为Abs_NS,并以绝对LBA的起点和终点来表示单一的逻辑空间的范围(即统一存储资源),例如:Abs_Start_LBA~Abs_End_LAB。存储控制器可根据预设划分规则将上述单一的逻辑空间划分为N个(N为自然数)大小不同的LBA范围(或者大小相同的LBA范围,下面将以大小不同的LBA范围为例进行具体说明)(即区段NS,可记为Abs_NS1、Abs_NS2、Abs_NS3,…,Abs_NSn等)。具体的,可先将单一的逻辑空间划分为N个NS,并记录每个NS在上述单一的逻辑空间中的位置(即绝对逻辑空间地址),包括起始位置和终止位置,如下表1:
表1
Abs_NS(绝对逻辑空间) |
Start_LBA(起始位置) |
End_LAB(终止位置) |
Abs_NS1 |
Abs_Start_LBA1 |
Abs_End_LAB1 |
Abs_NS2 |
Abs_Start_LBA2 |
Abs_End_LAB2 |
Abs_NS3 |
Abs_Start_LBA3 |
Abs_End_LAB3 |
…… |
...... |
…… |
具体实现中,假设上述单一的逻辑空间的范围为0x0000000-0x3fffffff,即Abs_NS:0x0000000-0x3fffffff,存储控制器可根据预设的划分规则将上述单一的逻辑空间划分为N个(例如6个)大小不同的NS,并记录每个NS的起始位置和终止位置,如下表2:
表2
Abs_NS |
Start_LBA(起始位置) |
End_LAB(终止位置) |
Abs_NS1 |
0x0000000 |
0x7ffffff |
Abs_NS2 |
0x8000000 |
0xfffffff |
Abs_NS3 |
0x1000000 |
0x17ffffff |
Abs_NS4 |
0x1800000 |
0x1fffffff |
Abs_NS5 |
0x2000000 |
0x2ffffff |
Abs_NS6 |
0x3000000 |
0x3ffffff |
可选地,存储控制器还可将主机内存中的队列与上述PF或者VF建立对应关系,使得PF或者VF至少对应一个NS和至少一个队列(即主机内存中的队列中的至少一个),每个队列对应一个不同的中断资源。其中,如图1,上述PF或者VF对应的NS或者队列可用NS IDs或者Queue IDs进行标记。
S202,根据预设分配原则将所述存储子资源分配给所述PF和所述VF中的至少一个,并维护一个资源分配表,其中,所述资源分配表包括存储子资源与所述PF以及所述VF中的至少一个的映射关系。
具体实现中,存储控制器将存储子资源分配给PF或者VF中的至少一个,并维护一个资源分配表的具体实现过程可参见上述本发明实施例一中的步骤S102,在此不再赘述。
进一步的,在本发明实施例中,上述资源分配表中还可包括:PF或者VF的标识信息与分配给该PF或者VF的队列资源和中断资源的映射关系,其中,上述队列资源具体为PCIe SSD中的PF或者VF对应的主机内存中的队列的标识信息(具体可为队列号)等。在本发明实施例中,每个队列对应一个不同的中断资源,使得每个PF对应至少一个中断资源,每个VF对应至少一个中断资源。具体实现中,上述PF或者VF与主机内存中的队列的对应关系具体可表现为PF或者VF与主机内存中的队列的队列号的对应关系,并且上述对应关系还可根据具体应用场景进行变化,即可根据具体应用场景对主机内存中的队列的队列号进行重新分配,改变其对应的PF或者VF。
可选的,存储控制器中的PF可见PCIe SSD中的所有存储介质和中断资源,以及PF或者VF对应的主机内存中的队列等资源信息。其中,上述中断资源具体可为消息信号中断(Message Signaled Interrupt,MSI)的扩展MSI-x中断,主机内存中每个队列对应一个MSI-x中断。具体实现中,上述中断资源具体还可为MSI中断,主机内存中每个队列对应一个MSI中断,上述中断资源的具体表现形式在此不做限制。
进一步的,可选地,存储控制器将存储子资源和中断资源进行分配,建立主机内存中的队列(具体可为I/O队列)与PF或者VF的对应关系时,可通过PF根据虚拟机监控器发送的分配命令将上述存储子资源、I/O队列资源(例如I/O队列的队列号)或者中断资源分配给PF和VF。其中,上述分配命令中可包括预设分配原则,PF可根据上述预设分配原则将一个NS分配给一个PF,并将上述NS与PF的映射关系保存至资源分配表中。
可选的,PF还可根据预设分配原则将一个或者多个NS分配给一个VF(分配给VF的NS即为VF的绝对的逻辑空间),并将上述NS与VF的映射关系保存至资源分配表中。或者根据预设分配原则将一个NS分配给多个VF,即不同的VF可共用相同的NS,并将上述NS与各个VF的映射关系保存至资源分配表中。同理,存储控制器还可根据预设分配原则将PCIe SSD中的一个I/O队列资源及其对应的中断资源分配给PF或者VF,并将上述I/O队列与PF或者VF的映射关系,或者上述中断资源与PF或者VF的映射关系保存至所述资源分配表。此外,存储控制器还可根据预设分配原则将主机内存中的一个或者多个队列的队列号,以及其对应的中断资源分配给一个VF,并将主机内存中的一个或者多个I/O队列的队列号与VF的映射关系,或者一个或者多个中断资源与VF的映射关系保存至资源分配表中。
具体实现中,上述资源分配表中还包括PF的标识信息、与上述PF关联的每个VF的标识信息。存储控制器可建立PF的标识信息与分配给该PF的NS、I/O队列的队列号或者中断资源的映射关系,以通过上述PF的标识信息查询分配给该PF的NS、I/O队列的队列号或者中断资源。存储控制器还可建立VF的标识信息与分配给该PF的NS、I/O队列的队列号或者中断资源的映射关系,以通过上述VF的标识信息查询分配给该VF的NS、I/O队列的队列号或者中断资源。如下表3:
表3
S203,接收所述虚拟机发送给目的VF或者所述虚拟机监控器发送给目的PF的主机命令。
可选地,上述目的VF为与虚拟机直接通信的VF,上述PF为与虚拟机监控器直接通信的PF。具体实现中,存储控制器接收虚拟机或者虚拟机监控器发送的主机命令的具体实现过程可参见上述本发明实施例一中的步骤S103,在此不再赘述。
S204,根据所述目的VF或者所述目的PF的标识信息查找所述资源分配表,从所述资源分配表中获取所述目的VF或者所述目的PF对应的存储子资源。
具体实现中,存储控制器根据目的PF或者目的VF的标识信息查询资源分配表的具体实现过程可参见上述本发明实施例一中的步骤S104,在此不再赘述。
S205,根据存储子资源相对ID与存储子资源绝对ID之间的对应关系,从所述目的VF或者所述目的PF对应的存储子资源中,找到与携带在所述主机命令中的存储子资源相对ID对应的存储子资源绝对ID,对与找到的存储子资源绝对ID对应的存储子资源进行操作。
具体实现中,虚拟机向存储控制器请求物理资源之前,虚拟机可先向存储控制器发送查询命令,向存储控制器请求查询PCIe SSD的物理资源的状态信息。上述查询命令中携带目的PF或者目的VF的标识信息。存储控制器可根据目的PF或者目的VF的标识信息查询资源分配表,确定目的PF或者目的VF的能力表项,包括目的PF或者目的VF可占用的存储介质、I/O队列资源和中断资源等。例如,虚拟机1可向存储控制器查询VF1的能力表项,如下表4:
表4
虚拟机1获取得到上述VF1的能力表项之后,则可将上述VF1的能力表项发送给VF1,VF1获知自身可占用的NS、I/O队列和中断等资源信息之后,则可将上述NS、I/O队列和中断等资源信息进行记录,建立用于标识上述NS、I/O队列和中断资源的相对ID。例如,VF1可建立其可占用的NS(即存储子资源)的相对ID、I/O队列的相对ID和中断资源的相对ID等,如:VF1:[NS1、NS2、NS3],[IO1、IO2、IO3],[IRQ1、IRQ2、IRQ3],其中,[NS1、NS2、NS3]则为VF1的相对的逻辑空间。同理,VF2可向PF请求查询其能力表项,并建立其可占用的NS的相对ID、I/O队列的相对ID和中断资源的相对ID等,如:VF2:[NS 1、NS2],[IO1、IO2],[IRQ1、IRQ2]。
各个虚拟机记录了直接与其通信的VF的能力表项之后,则可向存储控制器发送I/O命令,上述I/O命令中包括虚拟机所请求的VF的标识信息,以及VF对应的多个NS中的NS相对ID,VF对应的多个I/O队列中的I/O队列相对ID,VF对应的多个中断资源中的中断资源相对ID等。例如,VF1对应的NS相对ID(NS1或者NS2或者NS3),VF1对应的I/O队列的相对ID(IO1或者IO2或者IO3),VF1对应的中断资源的相对ID(IRQ1或者IRQ2或者IRQ3)等。
存储控制器接收到上述I/O命令之后,可根据VF的标识信息查询资源分配表,从上述资源分配表中获取VF(例如VF1)对应的所有NS(Abs_NS2,Abs_NS3,Abs_NS4)、所有I/O队列资源(Abs_Q2,Abs_Q3,Abs_Q4),以及所有中断资源(Abs_IRQ2,Abs_IRQ3,Abs_IRQ4)。进而根据存储子资源相对ID与存储子资源绝对ID之间的对应关系,从上述VF1对应的所有NS中获取NS1对应的NS(Abs_NS2),同理。存储控制器可根据I/O队列相对ID与I/O队列绝对ID的对应关系,从VF1对应的所有I/O队列资源中获取IO1对应的I/O队列资源(Abs_Q2),根据中断资源相对ID与中断资源绝对ID的对应关系,从VF1对应的所有中断资源中获取IRQ1对应的中断资源(Abs_IRQ2)等。
可选地,存储控制器获取得到PF对应的NS、I/O队列和中断资源之后,则可将NS的数据通过DMA的方式传输到主机物理内存地址中。所有数据DMA到主机物理内存之后,则可通过PF对应的I/O队列资源向主机发送响应主机命令的控制器命令。存储控制器将所有数据DMA到主机物理内存之后,可生成控制器命令,并将控制器命令DMA到主机内存中,并通过上述队列对应的中断资源发送中断通知主机有命令来了,主机可从主机队列中提取控制器命令。
在本发明实施例中,存储控制器可将PCIe SSD中的存储介质整合为统一存储资源,将上述统一资源划分为多个存储子资源,进而根据主机发送的分配信息将存储子资源分配给PF和VF,将存储子资源与PF或者VF的映射关系保存至资源分配表。当存储控制器接收到虚拟机或者虚拟机监控器发送的I/O命令时,则可根据目的PF或者目的VF的标识信息查询资源分配表,根据存储子资源与PF或者VF的映射关系对目的PF以及目的VF对应的存储子资源进行操作。本发明实施例所描述的方法,可支持单根输入/输出虚拟化技术,提高存储设备的I/O性能和存储设备中存储资源的利用率。
实施例三
参见图5,基于上述各实施例,本发明实施例提供了一种支持SR-IOV的存储控制器,包括:
整合模块10,用于将存储设备中的存储介质整合为统一存储资源,并将所述统一存储资源划分为多个存储子资源。
分配模块20,用于根据预设分配原则将所述整合模块所划分的所述存储子资源分配给所述PF和所述VF中的至少一个,并维护一个资源分配表,其中,所述资源分配表包括存储子资源与所述PF以及所述VF中的至少一个的映射关系。
接收模块30,用于接收所述虚拟机发送给目的VF或者所述虚拟机监控器发送给目的PF的主机命令。
操作模块40,用于根据所述目的VF或目的PF查找所述资源分配表,根据所述资源分配表中的存储子资源与所述PF或者所述VF的映射关系对所述目的PF或者所述目的VF对应的存储子资源进行与所述接收模块接收到的所述主机命令对应的操作。
具体实现中,本发明实施例提供的支持单根输入/输出虚拟化的存储控制器,即为上述实施例中所描述的存储控制器200,存储控制器200与主机100、存储介质300的连接关系可参见上述描述内容,在此不再赘述。
可选地,本发明实施例中所描述的存储设备具体可为PCIe SSD,上述存储设备中包括的存储介质具体可为NAND Flash。具体实现中,本发明实施例中所描述的存储控制器中各个模块的具体实现方式可参见上述本发明实施例一中的步骤S101-S104,在此不再赘述。
在本发明实施例中,存储控制器可将PCIe SSD中的存储介质整合为统一存储资源,将上述统一存储资源划分为多个存储子资源,进而根据主机发送的分配信息将多个存储子资源分配给PF或者VF,将存储子资源与PF或者VF的映射关系保存至资源分配表。当存储控制器接收到虚拟机或者虚拟机监控器发送的命令时,则可根据接收命令的PF或者VF的标识查询资源分配表,根据子资源与PF或者VF的映射关系对存储子资源进行操作。本发明实施例所描述的方法,可支持单根输入/输出虚拟化技术,提高存储设备的I/O性能和存储设备中存储资源的利用率。
实施例四
参见图6,基于上述各实施例,本发明实施例提供了一种支持SR-IOV的存储控制器。本发明实施例中所描述的存储控制器,包括:
整合模块10,用于将存储设备中的存储介质整合为统一存储资源,并将所述统一存储资源划分为多个存储子资源。
分配模块50,用于根据预设分配原则将所述整合模块所划分的所述存储子资源分配给所述PF和所述VF中的至少一个,并维护一个资源分配表,其中,所述资源分配表包括存储子资源与所述PF以及所述VF中的至少一个的映射关系。
接收模块60,用于接收所述虚拟机发送给目的VF或者所述虚拟机监控器发送给目的PF的主机命令。
操作模块80,用于根据所述目的VF或目的PF查找所述资源分配表,根据所述资源分配表中的存储子资源与所述PF或者所述VF的映射关系对所述目的PF或者所述目的VF对应的存储子资源进行与所述接收模块接收到的所述主机命令对应的操作。
可选地,上述接收模块60可执行上述实施例中所描述的接收模块30所执行的实现方式,还可具体用于:
在获知所述主机将所述主机命令放到所述主机内存中的所述队列后,发起直接内存存取DMA操作,从所述主机内存中的队列中所述目的VF或者所述目的PF对应的队列中获取所述主机命令。
可选地,本发明实施例提供的存储控制器还包括:
传输模块90,用于通过所述DMA操作将需要发送给所述主机的控制器命令传输到主机中的内存;
通知模块70,用于通过与所述目的VF或者所述目的PF的目的队列对应的中断资源通知所述主机去获取控制器命令。
可选地,上述操作模块80可执行上述实施例中所描述的操作模块40所执行的实现方式,还可具体用于:
根据所述资源分配表中的存储子资源与所述PF或者所述VF的映射关系找到与所述目的VF或所述目的PF对应的存储子资源,并根据存储子资源相对ID与存储子资源绝对ID之间的对应关系找到与携带在所述主机命令中的存储子资源相对ID对应的存储子资源绝对ID,对与找到的存储子资源绝对ID对应的存储子资源进行操作。
可选地,上述分配模块50可执行上述实施例中所描述的分配模块20所执行的实现方式,还可具体用于:
根据预设分配原则将至少一个所述存储子资源分配给一个所述PF,并将所述存储子资源与所述PF的映射关系保存至所述资源分配表;或者
根据预设分配原则将至少一个所述存储子资源分配给一个所述VF,并将所述至少一个所述存储子资源与所述VF的映射关系保存至所述资源分配表;或者
根据预设分配原则将一个所述存储子资源分配给多个所述VF,并将所述存储子资源与各个所述VF的映射关系保存至所述资源分配表。
可选地,本发明实施例中所描述的存储控制器具体如图1中所描述的存储控制器,上述存储控制器与主机、存储介质的结构关系可参见本发明实施例提供的支持单根输入/输出虚拟化的控制器实现方法的第一实施例前面的描述内容,在此不再赘述。
具体实现中,本发明实施例中所描述的存储控制器中各个模块可执行上述实施例三中所描述的各个模块的具体实施方式,进一步的,还可执行上述实施例二中所描述的实施方式,其具体实现方式可参见上述实施例二中的步骤S201-S205,在此不再赘述。
在本发明实施例中,存储控制器可将PCIe SSD中的存储介质整合为统一存储资源,将上述统一资源划分为多个存储子资源,进而根据主机发送的分配信息将存储子资源分配给PF和VF,将存储子资源与PF或者VF的映射关系保存至资源分配表。当存储控制器接收到虚拟机或者虚拟机监控器发送的I/O命令时,则可根据目的PF或者目的VF的标识信息查询资源分配表,根据存储子资源与PF或者VF的映射关系对目的PF以及目的VF对应的存储子资源进行操作。本发明实施例所描述的存储控制器可支持单根输入/输出虚拟化技术,提高存储设备的I/O性能和存储设备中存储资源的利用率。
实施例五
参见图7,基于上述各实施例,本发明实施例提供了一种存储控制器1000,包括处理芯片1001及其附属电路1002。其中,上述处理芯片1001具体可包括:现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者专用集成电路(Application Specific Integrated Circuit,ASIC)等。其中,上述FPGA或者ASIC可内置存储介质1003,也可外挂存储介质1003。
具体实现中,可对上述FPGA芯片或者ASIC芯片进行编程来完成主机的读写请求的接收,并对Flash芯片组进行各种访问即控制。具体的,上述存储控制器1000可用于执行本发明实施例提供的支持SR-IOV的控制器实现方法,具体可参见本发明实施例提供的支持SR-IOV的控制器实现方法的第一实施例和第二实施例中所描述的具体实现方式,在此不再赘述。
实施例六
参见图8,基于上述各实施例,本发明实施例提供了一种存储设备800,包括存储控制器801以及存储介质802,其中,存储控制器801用于:
将存储介质整合为统一存储资源,并将统一存储资源划分为多个存储子资源;
根据预设分配原则将存储子资源分配给PF和VF中的至少一个,并维护一个资源分配表,其中,资源分配表包括存储子资源与PF以及VF中的至少一个的映射关系;
接收虚拟机发送给目的VF或者虚拟机监控器发送给目的PF的主机命令;
根据目的VF或目的PF查找资源分配表,根据资源分配表中的存储子资源与PF或者VF的映射关系对目的PF或者目的VF对应的存储子资源进行与主机命令对应的操作。
可选地,本发明实施例中,主机包括内存,内存包括至少一个队列,PF或者VF中的至少一个分别对应一个或多个不同的队列;
存储控制器用于接收虚拟机发送给目的VF或者虚拟机监控器发送给目的PF的主机命令时,具体用于:
当获知主机将主机命令放到主机内存中的队列后,发起直接内存存取DMA操作,从主机内存中的队列中目的VF或者目的PF对应的队列中获取主机命令。
可选地,本发明实施例中,存储控制器还包括多个中断资源,多个中断资源被分配给主机内存中的队列,使得一个或多个队列对应一个中断资源,存储控制器还用于:
通过DMA操作将需要发送给主机的控制器命令传输到主机中的内存;
通过与目的VF或者目的PF的目的队列对应的中断资源通知主机去获取控制器命令;
其中,目的VF或者目的PF的目的队列为:主机内存中的队列中目的VF或者目的PF对应的队列。
可选地,本发明实施例中,中断资源为MSI-x中断,主机内存中每个队列对应一个MSI-x中断。
可选地,本发明实施例中,主机命令中包括用于标识存储子资源的存储子资源相对标识ID,资源分配表中的存储子资源用存储子资源绝对ID来标识;
存储控制器用于根据目的VF或目的PF查找资源分配表,根据资源分配表中的存储子资源与PF或者VF的映射关系对目的PF或者目的VF对应的存储子资源进行与主机命令对应的操作时,具体用于:
根据资源分配表中的存储子资源与PF或者VF的映射关系找到与目的VF或目的PF对应的存储子资源,并根据存储子资源相对ID与存储子资源绝对ID之间的对应关系找到与携带在主机命令中的存储子资源相对ID对应的存储子资源绝对ID,对与找到的存储子资源绝对ID对应的存储子资源进行操作。
可选地,本发明实施例中,存储控制器用于根据预设分配原则将存储子资源分配给PF和VF中的至少一个,并维护一个资源分配表时,具体用于:
根据预设分配原则将至少一个存储子资源分配给一个PF,并将存储子资源与PF的映射关系保存至资源分配表;或者
根据预设分配原则将至少一个存储子资源分配给一个VF,并将至少一个存储子资源与VF的映射关系保存至资源分配表;或者
根据预设分配原则将一个存储子资源分配给多个VF,并将存储子资源与各个VF的映射关系保存至资源分配表。
需要说明的是,由于发明实施例基于上述各实施例,因此,本发明实施例上述控制器用于执行的功能具体可以参见前述实施例中的具体描述,这里不再赘述。
实施例七
基于上述各实施例,本发明实施例提供了一种存储系统,包括主机以及实施例六所提供的存储设备,其结构示意图可以参考图1以及图8,其中,主机以及存储设备已在上述各实施例中进行了详细的介绍,这里不再进行赘述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。