可扩展性的NVMe存储虚拟化方法和系统技术方案

技术编号:32552989 阅读:51 留言:0更新日期:2022-03-05 11:53
本发明专利技术提供了一种可扩展性的NVMe存储虚拟化方法和系统,该方法基于中介透传虚拟化方案,支持对虚拟机、安全容器、容器的混合部署,同时满足对高密度部署安全容器、容器的可扩展性需求,该方案实现在系统NVMe驱动层,根据vfio mdev框架提供的接口,创建虚拟的mdev设备,将mdev设备通过vfio传递给虚拟机,从而提供虚拟机使用NVMe设备的能力。它通过修改物理队列分配与调度方式、优化I/O轮询线程处理I/O任务过程、修改存储资源分配方式、优化NVMe指令地址翻译过程这四个方面提高系统整体的可扩展性。扩展性。扩展性。

【技术实现步骤摘要】
可扩展性的NVMe存储虚拟化方法和系统


[0001]本专利技术涉及存储虚拟化的
,具体地,涉及可扩展性的NVMe存储虚拟化方法和系统,尤其涉及一种高可扩展性的NVMe存储虚拟化方法和系统。

技术介绍

[0002]随着云计算技术,尤其是虚拟化技术的发展,云服务产商提供的云服务愈加稳定与成熟,这也吸引了更多的客户租用云服务,云环境更加复杂,需求更加多样。在存储方面,云服务产商一方面关注云存储性能,另一方面关注如何提高系统可扩展性,从而能为更多的客户提供服务,提高存储资源利用率,减少运营成本。近几年,具有轻便性,高可扩展性的容器技术以及结合传统虚拟机高隔离性特性的安全容器技术被广泛应用在云环境中,得益于容器的轻便性,云厂商使用容器来进行快速和大规模部署,对云环境混合部署虚拟机、安全容器、容器以及系统可扩展性提出新的要求,也给当前云存储虚拟化框架带来新的挑战。比如,在高密度容器云环境下,如果云存储虚拟化框架可扩展性较差,势必导致存储资源无法被充分利用,提高运营成本,降低竞争力。
[0003]当前一些传统虚拟化技术对可扩展性支持较差。传统NVMe SSD虚拟化框架更多关注单机单设备场景下对单一应用场景的存储支持,无法满足复杂云场景下虚拟机/安全容器和容器混合部署以及高可扩展性的需求。主流的软件管理NVMe虚拟化方案有virtio、spdk、vfio和mdev。Virtio主要包括virtio

blk和virtio

scsi,因为安全容器kata

container默认采用virtio

scsi,所以以virtio

scsi为代表进行分析,virtio

scsi支持安全容器和普通runc容器混部,但是通过实验进行性能测试,数据表明在容器密度较高的情况下多个容器之间性能差异较大,性能公平性较差,并且IOPS性能表现差于mdev方案,如图1所示。Spdk需要将NVMe设备与原始驱动先进行解绑,然后再与自己的用户态驱动进行绑定,所以只能支持安全容器运行,无法同时支持普通容器,而且当前kata

container对spdk的支持还不够成熟。Vfio虽然通过设备直通能够带来较好的性能提升,但缺牺牲了设备共享能力,不符合高密度多容器共享设备的需求。Mdev

NVMe方案基于VFIO

mdev,对宿主机的NVMe驱动进行修改,只要通过sysfs系统创建mdev设备就能供虚拟机使用,并且能够预留一部分NVMe物理队列资源给原生驱动,因此能够同时支持安全容器和容器进行混部,创建mdev设备需要预先分配好NVMe物理队列资源,并且在mdev设备释放之前无法重新分配物理队列资源,因此能创建mdev的数量受限于总的分配给mdev的物理队列资源,同时创建一个mdev设备就需要一个I/O轮询线程,对服务cpu资源占用较高,因此mdev方案的可扩展性较差。硬件辅助虚拟化方案主要是SR

IOV,通过PF创建多个VF后无法保留原生PF,只能将VF直通给虚拟机,因此不支持普通容器运行,同时SR

IOV需要硬件特性支持,硬件成本较高,缺乏虚拟机监控器的介入也限制了SR

IOV资源分配的灵活性和可扩展性。
[0004]在高密度云场景下,对NVMe存储资源的分配与调度必须具有灵活性和可扩展性,同时保证共享资源之间的隔离性与公平性,减少不同虚拟机和容器之间的性能干扰,以及不同虚拟机和容器之间物理资源的公平配置,以提供良好的整体服务质量。
[0005]在公开号为CN104049912A的专利文献中公开了一种基于虚拟化平台的虚拟化存储管理,该方法的具体方法包括:平台,并在虚拟化平台上开发一个存储管理虚拟机;2)存储管理虚拟把节点上的直连磁盘机汇聚成存储资源池;3)建立各台服务器节点上的存储管理虚拟机通信之间机制;4)每个节点上的存储资源池,汇聚成一个应用存储资源池;5)通过虚拟网络将应用存储资源池,提供给虚拟化平台,作为虚拟化的基础资源。
[0006]因此,需要提出一种技术方案以改善上述技术问题。

技术实现思路

[0007]针对现有技术中的缺陷,本专利技术的目的是提供一种可扩展性的NVMe存储虚拟化方法和系统。
[0008]根据本专利技术提供的一种可扩展性的NVMe存储虚拟化方法,所述方法包括如下步骤:
[0009]步骤S1:输入系统分配给虚拟机/安全容器的物理队列数目,构建物理资源池,剩余设备物理队列将预留给原生NVMe驱动,给普通容器使用;
[0010]步骤S2:输入系统所需要的轮询控制器数目,系统创建相应数目的轮询控制器,每个轮询控制器创建一个I/O轮询线程,处理I/O任务;
[0011]步骤S3:输入虚拟机/安全容器需要的存储资源数量,存储资源管理模块分配给相应的存储资源;
[0012]步骤S4:虚拟机/安全容器被分配给对应的轮询控制器;
[0013]步骤S5:轮询控制器给虚拟机/安全容器分配物理队列,I/O轮询线程处理虚拟机/安全容器的I/O任务,通过NVMe指令地址翻译模块进行地址翻译;
[0014]步骤S6:判断I/O任务是否结束,若没有结束则返回步骤S5继续执行。
[0015]优选地,所述步骤S1中构建物理队列资源池包括如下步骤:
[0016]步骤S1.1:根据输入系统的物理队列数目获取原生NVMe驱动中相应的物理队列数目,标识为mdev queue,与原生NVMe驱动其他物理队列进行区分;
[0017]步骤S1.2:将所有的mdev queues进行包装,添加mdev需要使用的属性,用全局结构pool维护;
[0018]步骤S1.3:提供轮询控制器模块申请物理队列资源的接口,分配给轮询控制器所需的物理队列资源。
[0019]优选地,所述步骤S2中创建轮询控制器包括如下步骤:
[0020]步骤S2.1:向物理资源池申请需要的物理队列资源,添加到预备物理资源池;
[0021]步骤S2.2:创建I/O轮询线程,并绑定到CPU核心上;
[0022]步骤S2.3:轮询控制器初始化虚拟机链表,创建虚拟机/安全容器时根据其虚拟控制器id分配到相应的轮询控制器,添加到虚拟机链表上;
[0023]步骤S2.4:I/O轮询线程遍历虚拟机链表,判断虚拟机是否有I/O任务需要处理,按设定的调度算法调度虚拟机;
[0024]步骤S2.5:初始化I/O上下文,根据虚拟机的虚拟队列从预备物理资源池获取物理队列,将物理队列与虚拟队列进行绑定,物理队列分为1:1物理队列以及1:N物理队列;
[0025]步骤S2.6:I/O轮询线程处理I/O任务,包括从虚拟提交队列读取NVMe指令、翻译
NVMe指令和提交NVMe指令;从虚拟完成队列写入NVMe指令完成信息;从物理完成队列读取NVMe指令完成信息;本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种可扩展性的NVMe存储虚拟化方法,其特征在于,所述方法包括如下步骤:步骤S1:输入系统分配给虚拟机/安全容器的物理队列数目,构建物理资源池,剩余设备物理队列将预留给原生NVMe驱动,给普通容器使用;步骤S2:输入系统所需要的轮询控制器数目,系统创建相应数目的轮询控制器,每个轮询控制器创建一个I/O轮询线程,处理I/O任务;步骤S3:输入虚拟机/安全容器需要的存储资源数量,存储资源管理模块分配给相应的存储资源;步骤S4:虚拟机/安全容器被分配给对应的轮询控制器;步骤S5:轮询控制器给虚拟机/安全容器分配物理队列,I/O轮询线程处理虚拟机/安全容器的I/O任务,通过NVMe指令地址翻译模块进行地址翻译;步骤S6:判断I/O任务是否结束,若没有结束则返回步骤S5继续执行。2.根据权利要求1所述的可扩展性的NVMe存储虚拟化方法,其特征在于,所述步骤S1中构建物理队列资源池包括如下步骤:步骤S1.1:根据输入系统的物理队列数目获取原生NVMe驱动中相应的物理队列数目,标识为mdev queue,与原生NVMe驱动其他物理队列进行区分;步骤S1.2:将所有的mdev queues进行包装,添加mdev需要使用的属性,用全局结构pool维护;步骤S1.3:提供轮询控制器模块申请物理队列资源的接口,分配给轮询控制器所需的物理队列资源。3.根据权利要求1所述的可扩展性的NVMe存储虚拟化方法,其特征在于,所述步骤S2中创建轮询控制器包括如下步骤:步骤S2.1:向物理资源池申请需要的物理队列资源,添加到预备物理资源池;步骤S2.2:创建I/O轮询线程,并绑定到CPU核心上;步骤S2.3:轮询控制器初始化虚拟机链表,创建虚拟机/安全容器时根据其虚拟控制器id分配到相应的轮询控制器,添加到虚拟机链表上;步骤S2.4:I/O轮询线程遍历虚拟机链表,判断虚拟机是否有I/O任务需要处理,按设定的调度算法调度虚拟机;步骤S2.5:初始化I/O上下文,根据虚拟机的虚拟队列从预备物理资源池获取物理队列,将物理队列与虚拟队列进行绑定,物理队列分为1:1物理队列以及1:N物理队列;步骤S2.6:I/O轮询线程处理I/O任务,包括从虚拟提交队列读取NVMe指令、翻译NVMe指令和提交NVMe指令;从虚拟完成队列写入NVMe指令完成信息;从物理完成队列读取NVMe指令完成信息;步骤S2.7:将物理队列与虚拟队列进行解绑,返回步骤S2.4。4.根据权利要求1所述的可扩展性的NVMe存储虚拟化方法,其特征在于,所述步骤S3中分配虚拟机/安全容器需要的存储资源包括如下步骤:步骤S3.1:通过fdisk创建一个NVMe分区,所有mdev设备共用该分区;步骤S3.2:将该NVMe分区划分成固定大小的份额;步骤S3.3:输入虚拟机/安全容器需要的存储资源数量,系统分配给相应的存储资源片段,记录该片段在分区的起始偏移量;下次分配从未分配的片段开始;
步骤S3.4:根据该片段在分区的起始偏移量翻译NVMe指令中的Start Logical Block Address,完成对相应存储资源的访问。5.根据权利要求1所述的可扩展性的NVMe存储虚拟化方法,其特征在于,所述步骤S4中使用round

robin算法分配虚拟机/安全容器等额的运行时间片包括如下步骤:步骤S4.1:设定round

robin的时间片vctrl_poll_ms以及虚拟机进入idle状态的时间阈值idle_timeout_ms,设n为一个轮询控制器需要调度的总虚拟机数量,求出idle_timeout_ms:idle_timeout_ms=vctrl_poll_ms*n*2步骤S4.2:通过last记录虚拟机刚被调度的时间,now记录虚拟机当前的时间,设now与last的差值为δ,如果δ<vctrl_poll_ms,则说明虚拟机仍拥有执行I/O任务的时间片,继续执行I/O任务;如果δ≥vctrl_poll_ms,则调度下一个虚拟机;步骤S4.3:通过last_io_t记录虚拟机最后一次执行I/O任务的时间,设当前时间now与last_io_t的差值为β,如果β>idle_timeout_ms,说明虚拟机无I/O活动的时间已经超过阈值idle_timeout_ms,进入idle状态,不再需要被调度,等到有I/O任务后再重新加入调度队列;所述步骤S5中使用硬件IOMMU进行I/O地址翻译包括如下步骤:步骤S5.1:加载NVMe模块时创建IOMMU domain;步骤S5.2:虚拟机I/O地址空间发生变化时,添加一个虚拟机各异的起始偏移量,调用vfio_pin_pages接口获取连续的物理页的起始地址HPA,将物理页固定住,通过IOMMU domain提供的接口进行IOMMU映射和反映射,记录GPA与HPA的映射关系;步骤S5.3:翻译NVMe指令,将NVMe指令中的GPA添加一个虚拟机各异的起始偏移量;步骤S5.4:IOMMU将GPA翻译成HPA,进行dma操作,完成I/O读写任务;步骤S5.5:卸载NVMe模块时释放IOMMU domain的资源。6.一种可扩展...

【专利技术属性】
技术研发人员:姚建国吴志成彭博管海兵
申请(专利权)人:上海交通大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1