一种提升SPDK磁盘IO速度的方法及装置制造方法及图纸

技术编号:37421129 阅读:14 留言:0更新日期:2023-04-30 09:43
本发明专利技术公开了一种提升SPDK磁盘IO速度的方法及装置,涉及云计算和数据存储领域,该方法包括进行vhost target层和bdev设备驱动层的拆分,并创建vhost线程池和bdev线程池;基于vhost线程池的线程进行vhost target层的处理,基于bdev线程池的线程进行bdev设备驱动层的处理。本发明专利技术能够极大地提升虚拟机的IO性能,并且该种优化并不修改vhost target的操作方法,从而有效提升处理效率。从而有效提升处理效率。从而有效提升处理效率。

【技术实现步骤摘要】
一种提升SPDK磁盘IO速度的方法及装置


[0001]本专利技术涉及云计算和数据存储领域,具体涉及一种提升SPDK磁盘IO速度的方法及装置。

技术介绍

[0002]SPDK是一套存储开发套件,专门为专用设备(如NVMe SSD等)而设计,其提供了一系列高性能、可扩展、用户态下面的工具和库,且当前大量应用于云计算领域。SPDK具有三大优势:1、存储设备的驱动代码运行于用户态,而不是在内核态运行,避免了内核与用户态的上下文切换,节省了CPU(Central Processing Unit,中央处理器)开销;2、轮询模式驱动,改变了IO(Input/Output,输入/输出)中断处理模式,IO请求提交后会立即得到响应,而不会等待中断唤醒,减少了延迟;3、IO路径中避免锁的使用,而采用消息机制,从而避免锁的开销。
[0003]SPDK分为3个层次,最上层是存储协议层,对外暴露出iscsi target、vhost target、nvme

of target等不同的协议接口;中间层为存储服务层,主要提供具体的存储服务,该层又包括块设备抽象层,块设备抽象层下面为各种具体的驱动,例如malloc(动态内存分配)、ceph rbd、aio等;最底层为具体的存储设备驱动层,例如nvme设备驱动等。
[0004]对于SPDK的IO模型,以vhost target(用于加速IO处理)为例:虚拟机OS(操作系统)申请一块内存作为共享内存,组织成virtio queue(一种队列形式)的形式,存放IO请求和IO完成信息等,虚拟机进程和vhost进程(SPDK功能的载体进程)间通过这块内存进行IO信息的传递,Virtio queue与虚拟机内部设备驱动的queue(队列)一一对应。参见图1所示,IO处理的流程如下:1、虚拟机内OS系统将IO请求按照virtio ring(一种队列)的形式放到共享内存队列中;2、vhost线程从共享内存队列中获取到IO请求,然后将请求转化成Bdev层(SPDK块设备层)请求,然后经过bdev层的具体设备驱动转化成对真实设备的操作。
[0005]可以明显看出,现有的IO模型存在以下问题:1、虚拟机内部一个设备存在多个设备队列,也就是存在多个virtio queue,但是只有一个vhost线程从多个共享队列中获取IO请求进行处理;2、bdev层的处理与vhost target层同处于一个线程中,如果后端设备是一个慢设备,则bdev层处理时间便会较长,从而导致整个流程处理时间较长,即便vhost target时间很短,也要等待慢设备处理完成,导致整个流程处理效率低下。

技术实现思路

[0006]针对现有技术中存在的缺陷,本专利技术的目的在于提供一种提升SPDK磁盘IO速度的方法及装置,能够极大地提升虚拟机的IO性能,并且该种优化并不修改vhost target的操作方法,从而有效提升处理效率。
[0007]为达到以上目的,本专利技术提供的一种提升SPDK磁盘IO速度的方法,具体包括以下步骤:
[0008]进行vhost target层和bdev设备驱动层的拆分,并创建vhost线程池和bdev线程
池;
[0009]基于vhost线程池的线程进行vhost target层的处理,基于bdev线程池的线程进行bdev设备驱动层的处理。
[0010]在上述技术方案的基础上,
[0011]所述vhost线程池的线程用于与虚拟机共享内存进行交互,从共享内存中获取或向共享内存中放入IO请求;
[0012]所述vhost线程池的线程还用于将IO请求转化为bdev设备驱动层所需的请求,并将转换后的IO请求发送至bdev线程池的线程进行处理。
[0013]在上述技术方案的基础上,所述bdev线程池基于预设策略选择线程进行转换后的IO请求的处理。
[0014]在上述技术方案的基础上,所述vhost线程池为多线程模式,当虚拟机配置了多队列时,队列均匀分配于vhost线程池的线程上。
[0015]在上述技术方案的基础上,所述bdev线程池中的线程数量自定义配置,且bdev线程池中的线程数量为0或正整数。
[0016]本专利技术提供的一种提升SPDK磁盘IO速度的装置,包括:
[0017]创建模块,其用于进行vhost target层和bdev设备驱动层的拆分,并创建vhost线程池和bdev线程池;
[0018]处理模块,其用于基于vhost线程池的线程进行vhost target层的处理,基于bdev线程池的线程进行bdev设备驱动层的处理。
[0019]在上述技术方案的基础上,
[0020]所述vhost线程池的线程用于与虚拟机共享内存进行交互,从共享内存中获取或向共享内存中放入IO请求;
[0021]所述vhost线程池的线程还用于将IO请求转化为bdev设备驱动层所需的请求,并将转换后的IO请求发送至bdev线程池的线程进行处理。
[0022]在上述技术方案的基础上,所述bdev线程池基于预设策略选择线程进行转换后的IO请求的处理。
[0023]在上述技术方案的基础上,所述vhost线程池为多线程模式,当虚拟机配置了多队列时,队列均匀分配于vhost线程池的线程上。
[0024]在上述技术方案的基础上,所述bdev线程池中的线程数量自定义配置,且bdev线程池中的线程数量为0或正整数。
[0025]与现有技术相比,本专利技术的优点在于:通过创建vhost线程池和bdev线程池,以分别进行vhost target层的处理和bdev设备驱动层的处理,使得虚拟机的配置了多队列的磁盘设备可以同时被多个vhost线程池的线程处理,而不是只能被一个线程处理,同时,vhost线程池的线程获取到IO请求后,提交给bdev线程池处理,不需要等到IO请求下发到真实设备,vhost线程池的线程可以继续从共享队列中获取IO请求进行处理,从而极大地优化提升了虚拟机的IO性能,并且该种优化并不修改vhost target的操作方法,能够有效提升处理效率。
附图说明
[0026]为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0027]图1为现有的IO处理流程示意图;
[0028]图2为本专利技术实施例中一种提升SPDK磁盘IO速度的方法的流程图;
[0029]图3为本专利技术的IO处理流程示意图;
[0030]图4为bdev线程池的线程数配置为0时,IO处理流程示意图。
具体实施方式
[0031]本专利技术实施例提供一种提升SPDK磁盘IO速度的方法,通过创建vhost线程池和bdev线程池,以分别进行vhost target层的处理和bdev设备驱动层的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种提升SPDK磁盘IO速度的方法,其特征在于,具体包括以下步骤:进行vhost target层和bdev设备驱动层的拆分,并创建vhost线程池和bdev线程池;基于vhost线程池的线程进行vhost target层的处理,基于bdev线程池的线程进行bdev设备驱动层的处理。2.如权利要求1所述的一种提升SPDK磁盘IO速度的方法,其特征在于:所述vhost线程池的线程用于与虚拟机共享内存进行交互,从共享内存中获取或向共享内存中放入IO请求;所述vhost线程池的线程还用于将IO请求转化为bdev设备驱动层所需的请求,并将转换后的IO请求发送至bdev线程池的线程进行处理。3.如权利要求2所述的一种提升SPDK磁盘IO速度的方法,其特征在于:所述bdev线程池基于预设策略选择线程进行转换后的IO请求的处理。4.如权利要求1所述的一种提升SPDK磁盘IO速度的方法,其特征在于:所述vhost线程池为多线程模式,当虚拟机配置了多队列时,队列均匀分配于vhost线程池的线程上。5.如权利要求1所述的一种提升SPDK磁盘IO速度的方法,其特征在于:所述bdev线程池中的线程数量自定义配置,且bdev线程池中的线程数量为0或正整数。6.一种提升SPD...

【专利技术属性】
技术研发人员:芦志朋刘乐乐褚晓强张友加
申请(专利权)人:中电云数智科技有限公司
类型:发明
国别省市:

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

1