【技术实现步骤摘要】
可扩展性的NVMe存储虚拟化方法和系统
[0001]本专利技术涉及存储虚拟化的
,具体地,涉及可扩展性的NVMe存储虚拟化方法和系统,尤其涉及一种高可扩展性的NVMe存储虚拟化方法和系统。
技术介绍
[0002]随着云计算技术,尤其是虚拟化技术的发展,云服务产商提供的云服务愈加稳定与成熟,这也吸引了更多的客户租用云服务,云环境更加复杂,需求更加多样。在存储方面,云服务产商一方面关注云存储性能,另一方面关注如何提高系统可扩展性,从而能为更多的客户提供服务,提高存储资源利用率,减少运营成本。近几年,具有轻便性,高可扩展性的容器技术以及结合传统虚拟机高隔离性特性的安全容器技术被广泛应用在云环境中,得益于容器的轻便性,云厂商使用容器来进行快速和大规模部署,对云环境混合部署虚拟机、安全容器、容器以及系统可扩展性提出新的要求,也给当前云存储虚拟化框架带来新的挑战。比如,在高密度容器云环境下,如果云存储虚拟化框架可扩展性较差,势必导致存储资源无法被充分利用,提高运营成本,降低竞争力。
[0003]当前一些传统虚拟化技术对可扩展性支持较差。传统NVMe SSD虚拟化框架更多关注单机单设备场景下对单一应用场景的存储支持,无法满足复杂云场景下虚拟机/安全容器和容器混合部署以及高可扩展性的需求。主流的软件管理NVMe虚拟化方案有virtio、spdk、vfio和mdev。Virtio主要包括virtio
‑
blk和virtio
‑
scsi,因为安全容器kata
‑
cont ...
【技术保护点】
【技术特征摘要】
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.一种可扩展...
【专利技术属性】
技术研发人员:姚建国,吴志成,彭博,管海兵,
申请(专利权)人:上海交通大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。