Chinaunix首页 | 论坛 | 博客
  • 博客访问: 331148
  • 博文数量: 659
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5700
  • 用 户 组: 普通用户
  • 注册时间: 2022-03-07 15:28
个人简介

天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。

文章分类

全部博文(659)

文章存档

2024年(210)

2023年(247)

2022年(202)

我的朋友

分类: 网络与安全

2022-05-22 20:48:02


本文关键词:intel  spdk  bdev  qos


序:

intel spdk软件在存储领域应用广泛。因其可以高效管理linux系统的nvme ssd盘,又支持vhost-user协议可以对接qemu虚拟机,在云计算领域通常被用来做本地盘云主机的存储管理软件。如此优秀的一款软件,有必要仔细分析其内部的实现机制,本篇文章主要介绍spdk qos机制。


spdk qos做在bdev层,是面向块设备的qos,不是面向客户端的qos。面向客户端的qos需要做在协议层,部分协议例如iscsi协议本身有qos机制,不过这部分机制不在spdk qos里面讨论, spdk qos可以理解为就是bdev qos


spdk qos机制:

目前共支持4qos,分别是IOPS qosBPS qosBPS rqosBPS wqos4qos均放在spdk_bdev_qos->rate_limits数组里面,因此新增加qos也很简单,可直接在数组里面新增qos类型,比如IOPS rqosIOPS wqos。增加新类型qos后,在bdev_qos_set_opsbdev_qos_is_iops_rate_limitqos接口里面也需要增加对应逻辑。


为支持多核访问同一个bdevqos需求,spdk采用io任务委托提交的方式向bdev层提交io。具体方式是在多个核中选取一个io任务提交核用于执行bdev_io提交,其余未被选中的核通过bdev_io_submit提交bdev_io时,需要使用spdk_thread_send_msg向提交核发送一个消息,提交核收到消息后使用_bdev_io_submit执行提交,当判断需要qos时,使用bdev_qos_io_submitqos提交bdev_ioqos完成限速后再通过bdev_io_do_submitbdev驱动提交request。完整的提交流程见下图:



 当多种qos同时配置时,qos生效策略为都通过才算qos通过,其中任何一种qos要求不满足,就排队不向驱动提交。bdev_io向驱动提交前,和bdev_io从驱动返回后,每种配置的qos均需要更改quota配额。qos生效策略可见下图bdev_qos_io_submit函数。





触发bdev qos执行的方式有两种。一种是新io触发,新io提交会主动触发qos检查并依次提交qos queue中的io;另一种是定时poll,在无新io下发的场景使用,原qos queue中的iopollbdev_channel_poll_qos)的运作机制下进行提交,一次poll任务的默认间隔时间是1msSPDK_BDEV_QOS_TIMESLICE_IN_USEC)。


bdev qos机制可能带来不连续突发请求的性能抖动,若qos设置太小,主机每次突发请求都较大,会导致qospoll提交生效,某些io的时延可能达到SPDK_BDEV_QOS_TIMESLICE_IN_USEC


spdk qos命令:

spdk支持动态调整bdev qos参数,使用bdev_set_qos_limit命令,若相关limit参数设置为0,则相关limit取消(SPDK_BDEV_QOS_LIMIT_NOT_DEFINED),具体命令帮助信息如下图。


实验验证:

理论知识分析完毕,接下来实践一下spdk qos功能。模拟本地盘云主机场景,先搭建qemu虚拟机通过vhost-user协议跑一下环境IO性能。环境搭建可参考spdk软件包中doc/vhost.md文档,步骤略过。仅介绍搭建好的环境情况如下,物理机spdk中创建一个1G大小的内存盘Malloc0,然后通过Vhost-BLK挂载到虚拟机,虚拟机硬盘随机读性能约80W IOPS


物理机上执行命令bdev_set_qos_limit,把IOPS限制到1W,执行命令如下:


然后看一下虚拟机的性能,可以看到IOPS已经下降到1W以下,此时带宽为38MIOPS qos限制正确生效。


接下来,再限制一下带宽,看看带宽qosIOPS业务的影响。把带宽限制到20M,物理机上执行命令如下:


相对于1W IOPS20M带宽限制更严格。看一下环境,虚拟机IOPS业务性能的确是受到更严格的带宽限制影响,带宽下降到20M以下,IOPS下降到5000左右。带宽qos限制正确生效。


接下来解除带宽限制,注意限制参数填写0即可。


可以看到IOPS恢复到1W IOPS


接下来解除IOPS限制,注意限制参数填写0即可。


可以看到IOPS恢复到80W IOPS。实验完毕。


总结:

spdk qos机制清晰明了,使用也很方便,能够满足本地盘云主机使用场景。但是由于不同spdk进程的bdev不能共享,因此多个spdk进程协作qos无法实现。这对希望使用spdk作为客服端对接分布式存储的同学来说不是一个好消息,当多个spdk客户端使用分布式存储提供的同一个盘时,无法正确做qos限速。这往往需要一个额外的qos方案。






阅读(290) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~