当前位置: 首页 > Linux

本功能在CentOS8、天翼云SFS弹性文件校准

时间:2023-04-06 06:43:09 Linux

CentOS(CommunityEnterpriseOperatingSystem)作为Linux发行版之一,由RedHatEnterpriseLinux(RHEL)发布的源代码按照开源编译而成源代码法规制定。因为来自相同的源代码,一些对稳定性要求高的服务器使用CentOS而不是RedHatEnterpriseLinux的商业版。最近使用CentOS8的朋友可能会发现CentOS8的磁盘性能监控工具iostat不如CentOS7准确,天翼云弹性存储团队在实践中发现问题,改进了iostat与SFS弹性文件的监控精度。Linux中最常用的是iostat。可以监控系统磁盘设备的负载情况,提供磁盘设备IO合并次数、读写带宽、平均IO大小、平均队列长度、磁盘利用率等信息。util(utilization)是指磁盘设备的使用率,表示磁盘设备处理IO的时间所占的百分比。如果util长期为100%,说明IO压力过大,磁盘满负荷工作。在满载的情况下,iostat中util的统计结果显示CentOS7和CentOS8有显着差异:CentOS7:CentOS8:同样环境下,压力测试填满磁盘时,CentOS7CentOS8的util已经显示100%,CentOS8的util可能还不到75%。iostat中的util表示的是过去一段时间内存储设备处理IO的时间占总时间的百分比。设备处理IO的时间由内核中设备的io_ticks属性维护:io_ticks表示设备处理IO的总时间,是一个不断累加的值。io_ticks不关心队列中有多少IO排队,它只关心设备有IO的时间。即不考虑IO有多少,只考虑有没有IO。如果时间过去1s,500ms的设备中有IO,io_ticks会增加500,util按照这个公式计算:io_ticks/totalticks=500/1000=50%。从CentOS7升级到CentOS8后,util显示出如此大的差异,是因为io_ticks的算法发生了变化。Tips:对于机械盘,IO是串行的,util可以准确反映磁盘的繁忙程度。但是对于SSD来说,由于IO可以并行处理,所以不能直接通过util来表示磁盘的繁忙程度,但是还是有一定的参考价值的。原理分析在CentOS7中,每次IO开始、合并、结束、查询时都会调用part_round_stats_single来判断当前是否有正在处理的IO请求。如果有IO请求,io_ticks会根据时间戳和当前时间的差值累加。更准确的说:中间需要一个重要的变量,盘的飞行。Inflight表示当前设备中未完成的IO请求数。在CentOS7中,通过在每个IO的开头加1,在结尾减1来维护inflight。在最新的内核中,由于多队列的应用,在计算inflight时,会遍历所有正在处理的IO请求,来决定是否统计当前磁盘上的inflight。如果每次为了统计io_ticks而遍历所有的IO,会影响IO的效率。所以在CentOS8中,inflight值在计算io_ticks时被丢弃,每次发现IO时都会调用update_io_ticks。如果发现不在同一个jiffies,则将io_ticks加1,将当前时间赋值给stamp。但是这个改进有一个明显的问题,当存储速度更快(iops>1000)时就没有问题了。但是当存储慢的时候,比如一个IO持续了multiplejiffies,当IO结束的时候又经历了multiplejiffies,结果io_ticks只加了1,会造成utils精度损失很多.这个问题已经存在将近2年了,2020年修复了。通过在每次IO结束的时候给io_tick加上stamp-jiffies的时间,减少错误:但是还是不能解决以下场景:如果第一个io是还是没有结束,n个jiffies后,第二个io进来,它会把stamp设置为当前jiffies,此时stamp比之前第一个IO记录的值少了n,增加的io_ticks在IO的末尾会少n,精度也损失了。如下图所示:由于内核不会为每个IO计算inflight,所以无法判断是否给ioticks加上jiffies。这个问题依然存在,导致iostat监控结果不准确。目前,开源社区也没有很好的解决方案。天翼云改进针对社区高版本内核慢速设备util统计不准确的问题,天翼云SFS弹性文件设计兼容老版本io_ticks统计方式,适用场景:util精度要求高,可实时使用开启/关闭基于inflight的精准io_ticks统计,让用户在使用CentOS8系统的同时,也能享受到CentOS7精准的iostat监控水平。sfs-tools定义了需要跟踪的核函数以及从核函数中提取相关延迟数据的方法,实现了数据的二次处理和展示。其架构设计如下:sfs_tools可以作为一个独立的工具,也可以作为文件网关的一个特性对外提供各种监控数据。目前该工具已与天翼云文件存储监控告警平台集成。此外,天翼云SFS弹性文件在纠错的基础上还提供了自研的性能监控工具。通过跟踪内核文件的函数接口,提供基于函数的、File级的iops、读写延迟等监控数据,方便更多的开发者和用户使用主流的开源系统。未来,天翼云将继续坚持自主创新,充分发挥自身技术优势,持续提升创新能力和核心竞争力,打造自主可控、可靠高效的云计算基础设施,提供坚实的技术支持。支持国家信息技术产业的发展。