SPDK QOS机制解析

天翼云开发者社区
• 阅读 636

本文关键词: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机制: 目前共支持4种qos,分别是IOPS qos,BPS qos,BPS rqos,BPS wqos。4种qos均放在spdk_bdev_qos->rate_limits数组里面,因此新增加qos也很简单,可直接在数组里面新增qos类型,比如IOPS rqos和IOPS wqos。增加新类型qos后,在bdev_qos_set_ops,bdev_qos_is_iops_rate_limit等qos接口里面也需要增加对应逻辑。

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

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

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

bdev qos机制可能带来不连续突发请求的性能抖动,若qos设置太小,主机每次突发请求都较大,会导致qos的poll提交生效,某些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机制解析

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

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

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

接下来,再限制一下带宽,看看带宽qos对IOPS业务的影响。把带宽限制到20M,物理机上执行命令如下: SPDK QOS机制解析

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

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

可以看到IOPS恢复到1W IOPS。 SPDK QOS机制解析

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

可以看到IOPS恢复到80W IOPS。实验完毕。 SPDK QOS机制解析

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

点赞
收藏
评论区
推荐文章
这波无感升级有点秀——天翼云QEMU组件热升级方案来了
虚拟化技术作为云计算时代的核心技术,近年来应用越来越广泛。目前,大多数云厂商提供的云主机都是基于KVM/QEMU虚拟化技术实现的。而随着虚拟化技术的发展,QEMU组件也在不断引入新功能并进行功能优化和问题修复。在公有云场景中,如何在不影响存量虚拟机业务的情
如何实现云数据治理中的数据安全?
云计算被定义为计算资源的共享池,已经在不同的应用领域广泛部署和使用。在云计算中,数据治理在提高整体性能和确保数据安全方面发挥着至关重要的作用。本研究从管理和技术应用两方面探讨如何实现云数据治理中的数据
Stella981 Stella981
3年前
Kubernetes 部署 Nebula 图数据库集群
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。<br/Kubernetes在设计结构上定义了一系列的构建模块,其目的是为了提供一个可以部署、维护和扩展应用程序的机制,组成Kubernetes
Stella981 Stella981
3年前
Qt编写气体安全管理系统4
一、前言通信协议解析是整个系统的核心灵魂,绝大部分人做软硬件通信开发,第一步估计就是写demo将协议解析好,然后再慢慢写整个界面和操作流程等,在工业控制领域,modbus协议应用还是非常广泛的,这个系统用的也是modbus协议,采用此协议可以方便的用一些第三方的组态软件接入,兼容性更强,modbus只是个协议规约标准,至于使用串口还是网络还是其
如何选择天翼云云硬盘
天翼云提供普通云盘(SATA)、高效云盘(SAS)、SSD云盘(SSD)三种类型的云硬盘,这三种类型有什么区别,又分别适用于什么场景呢?今天就来说一说这个问题。首先我们了解一下什么是云硬盘。云硬盘即云主机使用的存储设备,购买云主机后操作系统、应用软件数据都保存在云硬盘上。本质上它是天翼云分布式存储池中划分出来的一个虚拟磁盘设备,在使用上和普通服务器的硬盘没有
SPDK对接Ceph性能优化
关键词:SPDK、NVMeOF、Ceph、CPU负载均衡SPDK是intel公司主导开发的一套存储高性能开发套件,提供了一组工具和库,用于编写高性能、可扩展和用户态存储应用。它通过使用一些关键技术实现了高性能:1.将所有必需的驱动程序移到用户空间,以避免系统调用并且支持零拷贝访问2.IO的完成通过轮询硬件而不是依赖中断,以降低时延3.使用消息传递,以避免IO
小万哥 小万哥
1年前
Git安装和配置教程:Windows/Mac/Linux三平台详细图文教程,带你一次性搞定Git环境
Git是一款免费、开源的分布式版本控制系统,广泛应用于软件开发领域。随着开源和云计算的发展,Git已经成为了开发者必备的工具之一。本文将为大家介绍Git在Windows、Mac和Linux三个平台上的安装和配置方法,带你一次性搞定Git环境Windows平
云数据库MySQL多人协同开发实践
随着云计算技术的快速发展,云数据库作为云计算的重要组成部分,为企业提供了高效、灵活和可靠的数据存储和管理服务。其中,MySQL作为一款流行的开源关系型数据库,在云数据库领域具有广泛的应用。多人协同开发是软件开发过程中的重要环节,本文将探讨云数据库MySQL多人协同开发的实践。
天翼云开发者社区
天翼云开发者社区
Lv1
天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。
文章
722
粉丝
15
获赞
40