CentOS 8里的这个功能,天翼云SFS弹性文件校准了

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

CentOS(Community Enterprise Operating System)作为Linux发行版之一,是Red Hat Enterprise Linux(RHEL)依照开放源代码规定发布的源代码所编译而成。由于出自同样的源代码,有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。

最近使用CentOS 8的小伙伴可能会发现,CentOS 8的磁盘性能监控工具iostat与CentOS 7相比,精准性有所下降,天翼云弹性存储团队在实践过程中发现问题,并用SFS弹性文件提升了iostat的监控精确性。

在Linux中最常用的就是iostat。它能够监控系统磁盘设备的负载,提供磁盘设备的IO合并次数,读写带宽、平均IO大小,平均队列长度,磁盘利用率等信息。

util(utilization)即磁盘设备的利用率,代表了磁盘设备有百分之多少的时间用于处理IO,如果util长期处于100%,说明IO压力过大,磁盘已满负荷工作。

同样都是满负荷工作的情况下,iostat中util的统计在CentOS 7与CentOS 8中,显示存在明显差异: CentOS 7: CentOS 8里的这个功能,天翼云SFS弹性文件校准了 CentOS 8: CentOS 8里的这个功能,天翼云SFS弹性文件校准了

同一个环境,压力测试把磁盘压满的情况下,CentOS 7的util已经显示100%了,CentOS 8的util可能还不到75%。

iostat中的util,代表过去的一段时间内,存储设备处理IO的时间占总时间的百分比。设备处理IO的时间是由设备在内核中的io_ticks属性维护: CentOS 8里的这个功能,天翼云SFS弹性文件校准了

io_ticks代表设备处理IO的总时间,是一个不断累加的值。io_ticks不关心队列中有多少个IO在排队,它只关心设备有IO的时间。即不考虑IO有多少,只考虑IO有没有。

如果时间过去了1s,其中的500ms设备中有IO,io_ticks就会增加500,util就是根据这个算式计算出的:io_ticks/总ticks=500/1000=50%。 CentOS 8里的这个功能,天翼云SFS弹性文件校准了

CentOS 7升级到CentOS 8,util显示出现了如此大的差异,就是因为在io_ticks的算法上,进行了变动。

tips: 对于机械盘,IO是串行的,util能准确的反映磁盘的繁忙程度。但对于SSD,由于IO可以并行处理,通过util就无法直接表示磁盘繁忙程度,但还是有一定参考价值。

原理分析 在CentOS 7中,在每次IO开始、合并、结束及查询时,都会调用part_round_stats_single判断当前是否有IO请求在被处理,若有IO请求则根据时间戳与当前时间差值累加io_ticks,相对比较准确: CentOS 8里的这个功能,天翼云SFS弹性文件校准了

这中间就需要用到一个重要的变量,磁盘的inflight。inflight表示当前设备中未完成的IO请求数量,在CentOS 7中是通过每次IO开始时加1,结束时减1来实现对inflight的维护。 CentOS 8里的这个功能,天翼云SFS弹性文件校准了

而在最新内核中,由于多队列的应用,计算inflight时会遍历所有处理中的IO请求,判断是否在当前磁盘以统计inflight。 CentOS 8里的这个功能,天翼云SFS弹性文件校准了

如果为了统计io_ticks,每次都去遍历所有IO,就会影响IO的效率。所以在CentOS 8中,计算io_ticks时抛弃了inflight值,通过每次IO时调用update_io_ticks,如果发现不在同一个jiffies就对io_ticks加1,并将当前时间赋予stamp。 CentOS 8里的这个功能,天翼云SFS弹性文件校准了

但是这个改进有一个很明显的问题,在存储较快时不会有问题(iops > 1000)。但是在存储较慢时,比如一个IO持续多个jiffies,当IO end的时候经历了多个jiffies,结果也只对io_ticks加1,会导致utils精度丢失很多。 CentOS 8里的这个功能,天翼云SFS弹性文件校准了

这个问题存在了近2年,才在2020年得到了修复,通过每次IO end的时候将stamp-jiffies的时间加入io_tick,减少误差: CentOS 8里的这个功能,天翼云SFS弹性文件校准了

但还是不能解决以下这种场景:如果第一个io还没有结束,经过了n个jiffies,第二个io进来了,它会将stamp设置为当前jiffies,这个时候,stamp比之前第一个IO记录的值就少了n,IO结束时的增加的io_ticks就会少n,同样丢失了精确度。如下图所示: CentOS 8里的这个功能,天翼云SFS弹性文件校准了

由于内核没有在每次IO时计算inflight,也就无法判断是否需要对io ticks加上jiffies,这个问题就遗留了下来,导致了iostat监控结果的不准确,目前来说开源社区也没有太好的解决方案。

天翼云的改进 针对社区高版本内核对慢速设备util统计不精确的问题,天翼云SFS弹性文件设计了兼容老版本io_ticks统计方法的方案,适用于对于util精确度要求较高的场景,可以实时开启/关闭基于inflight的精准io_ticks统计,让用户在使用CentOS 8系统的同时也能享受到CentOS 7的精准iostat监控水平。 CentOS 8里的这个功能,天翼云SFS弹性文件校准了 CentOS 8里的这个功能,天翼云SFS弹性文件校准了

sfs-tools定义了需要跟踪的内核函数及从内核函数中提取相关的时延等数据的方法,并实现了对数据的二次加工和展示,其架构设计如下: CentOS 8里的这个功能,天翼云SFS弹性文件校准了

sfs_tools可以作为独立的工具使用,也可以作为文件网关的一个特性对外提供各项监控数据。目前该工具已集成天翼云文件存储的监控告警平台。 CentOS 8里的这个功能,天翼云SFS弹性文件校准了

除此之外,天翼云SFS弹性文件还在纠正了精准度的基础上进一步提供了自研的性能监控工具,通过对内核文件函数接口的跟踪,在不影响性能的情况下,提供基于函数及文件级别的iops,读写延迟等监控数据,方便了更多开发者、用户对主流开源系统的使用。

未来,天翼云将继续坚持自主创新,发挥自身技术优势,持续提升创新能力与核心竞争力,为自主可控、可靠高效的云计算基础架构添砖加瓦,为国家信息技术产业的发展提供坚实的技术保障。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
MySQL源代码阅读调试
最近需要阅读下MySQL源代码,所以写这系列博客记录下。搭调试环境真是比较蛋疼,公司基本Java开发,这里回到C。。。用了两天晚上,尝试了VS2013,EclipseCDT,CodeBlock还有GDB。GDB比较好搭建,将带Boost库的源代码扔到虚拟机(CentOS7.0,安装配置桌面web服务器开发机配置,什么软件都装齐了)上
Stella981 Stella981
2年前
Linux CentOS使用yum安装Docker
Docker支持以下的CentOS版本:目前,CentOS仅发行版本中的内核支持Docker.Docker运行在CentOS7上,要求系统为64位、系统内核版本为3.10以上.Docker运行在CentOS6.5或更高的版本的CentOS上,要求系统为64位、系统内核版本为2.6.32431或者更高版本.Docker要求CentOS系统的内核
Stella981 Stella981
2年前
Docker的基本操作
安装环境说明Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的。由于我们学习的环境一般都使用的是CentOS,因此这里我们将Docker安装到CentOS上。注意:这里建议安装在Ce
Stella981 Stella981
2年前
CentOS 安装dnf软件包管理器
DNF即DandifiedYUM,基于RPM,Linux发行版下一代软件包管理工具。它首先在Fedora18中出现,并且在最近发行的Fedora22中替代YUM工具集。CentOS和OpenSUSE等Linux发行版也可以使用。yum已经有些老旧,不堪大用。下文将介绍怎么安装DNF软件包管理器,默认已经切换到root用户,如果没有切换,
Stella981 Stella981
2年前
CentOS7安装及简单配置(一)
CentOS7是RHEL的社区版,摘抄维基百科的一段话如下:CentOS(CommunityEnterpriseOperatingSystem)是Linux(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fzh.wikipedia.org
Stella981 Stella981
2年前
Linux centos yum安装LAMP环境
centos6.51.yum安装和源代码编译在使用的时候没啥区别,但是安装的过程就大相径庭了,yum只需要3个命令就可以完成,源代码需要13个包,还得加压编译,步骤很麻烦,而且当做有时候会出错,源代码编译安装大概需要2个小时,好处在于可以自己配置地址等一些参数,yum安装半个小时搞定,一般不会出错,更新也很方便。2.我的机器是centosrele
Stella981 Stella981
2年前
Linux 实例搭建 FTP 服务
操作场景本文以CentOS7.264位系统为例,使用vsftpd作为FTP服务端,FileZilla作为客户端。指导您如何在Linux云服务器上搭建FTP服务。操作步骤安装vsftpd1.登录Linux云服务器。2.执行以下命令,安装vsftpd。
Stella981 Stella981
2年前
CentOS下使用VirtualBox
其实很简单,真的,都不好意思还写篇日志记录。。。首先下载:https://www.virtualbox.org/wiki/Linux\_Downloads我选择的是OracleLinux6("OL6")/RedHatEnterpriseLinux6("RHEL6")/CentOS6AMD64(https://w
Stella981 Stella981
2年前
CentOS 完全开源的替代者有吗?
CommunityEnterpriseOperatingSystem社区企业操作系统,是世界上最受欢迎的服务器发行版之一,特点是安全、低维护、高预测性、高重复性、高度稳定性的企业操作系统,各位觉得会有真的替代品吗?下面尝试一下Debian系统!(https://oscimg.oschina.net/oscnet/upa105c1e9
实战天翼云云主机系统盘扩容
天翼云云主机默认提供的系统盘容量是40G,已经能适应于绝大多数场景。但在一些特殊场景下默认的40G系统盘空间不够,必须要扩大系统盘。这时候该如何处理呢?今天就来实战一番。以centos6(下文也适应于centos7)操作系统为例,我们使用ssh登录到云主机,使用 partedl 命令查看一下现在的分区情况。5、云主机开机回到弹性云主机页面,对云主机执行开机
天翼云开发者社区
天翼云开发者社区
Lv1
天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。
文章
494
粉丝
8
获赞
37