zStorage是如何维护性能水平保持稳步上升的?

0、前言

​ 开发团队一般会采用git、svn这样的工具来管理代码。开发人员先在本地代码分支编写、调试、自测代码,然后提交到代码仓库,每一笔代码提交都会记录在代码仓库的历史中。zStorage也不例外,除此之外zStorage禁止随意提交代码到代码仓库。首先需要开发人员跑通基本的测试用例,然后在gitlab上提交一个Merge Request(MR,合并请求),相关人员审阅涉及的修改以后,由管理员同意后方能合入。

​ 这些MR通过基本的测试以后,就会合入到代码仓库。但是并没有做性能测试验证,因为一般的硬件环境达不到验证性能的目的。所以需后面在性能硬件环境上,对没有做过性能测试的MR验证其性能影响。如果不做性能验证,随着MR合入逐渐增多,一旦出现性能下降,事后再来排查则会投入更大的人力。所以选择对MR做性能测试,成本较低,且可以快速发现性能下降问题。这样可以把问题范围控制到某一个具体的MR,分析起来更加容易。

​ zStorage的性能测试采用jenkins自动化测试流水线,自动切换MR、编译、打包、部署、性能测试、输出性能结果。每一个MR的测试结果会长期保存在jenkins服务器上,以供后续分析。

1、要保持性能上升,首先得知道是谁导致了下降。

​ 知道是谁下降了,后面就好办了。先回退该MR,然后责任人深挖原因,修复下降以后,再重新提MR合入即可。所以zStorage坚持每日测试新合入主干的MR的性能,形成性能走势图。

​ 如图1,横坐标是时间线,纵坐标是IOPS数据,单位是千(k)。我们针对每天提的MR,在当天晚上会抽取测试部分MR的性能,这些性能测试数据会长时间保留在jenkins服务器上。然后用一个脚本提取jenkins上的的数据,绘制如图1的性能走势图。由于每日新增的MR可能比较多,所以一般情况下不会把每个MR都测试一次性能。比较高效的方法是,抽取其中一些MR,每个MR跑3~5次性能测试。这样不仅效率更高,并且通过求取平均值,每个MR的性能值不至于波动很大。

​ 通过性能走势图,可以明显的找到性能出现下降和上升的区间。假设在某两个点出现了明显的下降,可以找到两个对应的MR,再把这两个MR之间的全部MR捞出来逐一review,找出可疑的MR。当然更加简单有效的方法是,直接把这个两个MR之间的全部MR依次测试多次,找到准确的导致下降的那个MR。

2、优先解决导致性能波动大的问题。

​ 如果说存在性能波动过大的BUG,例如在200万~210万IOPS之间波动。那么就需要增加很多测试次数,来让某个MR的平均值趋于该MR的真实表现。这个会增加测试的时长和性能服务器的无效占用。目前zStroage的性能测试数据波动范围在1万IOPS之内,通过3~5次测试便可确定某个MR是否有明显的下降。如果不想被查找下降的MR给搞得晕头转向的话,必须得先解决波动问题,否则看着谁的MR都像导致下降的“坏人”。

3、看见下降的MR不要着急定性,让子弹先飞一会。

​ 某个MR连跑3次,平均值表现为下降0.5w,这不一定是真下降。等把明后天的MR跑了,如果后面持续表现为下降0.5w,那么基本认为是真下降了。如果明后天下降的0.5w又回来了,那么只是正常波动,不必担心。如图2,看起来第2个位置像是下降了,实际在第3个位置又起来了。

4、性能测试之前检查经常出现的软硬件问题,以免出现误判,浪费时间。

​ 如图3,如果某个节点的IB网卡出现了问题,在性能测试时,可能不会报明显的错误,但是测试出来的性能数据会差1%~2%或者更多。最后经过努力的排查,发现是IB卡降级导致的问题,这就有点得不偿失了。图4中包含了两项检查,一项是存储节点的硬盘数量是否足够,另外一项是IB网卡的状态是否正常。图中所示的IB网卡状态都是正常的。异常情况会有降级(downgrade)、不可用(inactive)等情况。其他还有不少检查项,没在图中包含。

5、火焰图(图4)以及差分火焰图(图5)。

​ 通过火焰图可以很容易看出哪些函数,哪些流程占用了过多的CPU。通过对比两个不同MR的火焰图,可以得到两者的差分火焰图。差分火焰图上越红的地方,说明这个地方占用的CPU增加越多。火焰图不仅仅可以观察CPU占用,还可以观察cache miss等指标。可通过搜索“FlameGraph”了解更多关于火焰图的知识。

6、时延分析,点位时延对比。

​ zStorage实现了内置的点位时延分析工具,可以分析某个模块在某个流程处理过程中的时延情况。如图6对比了两个MR的各个点位的时延情况,蓝色为标准时延(性能正常的MR),红色为性能异常的MR,可以看见在不少点位上红色的柱子明显要高一点。用这个方法可以定位到是哪个模块导致了性能下降,时延升高。如图6可见,本地存储模块的append点位时延增加,导致后面所有点位的时延依次增加。这里便非常明显的看出来append点位有问题,引入了性能下降。

7、性能调优如逆水行舟,不进则退,所以需要不断的找到新的优化点。

​ 所谓“一力降十会”,无论你百般武艺,随着MR和特性的逐渐合入,代码量逐渐增加,性能走势必然逐渐下行。但是只要我们不断找到新的优化点,提升的速度快过下降的速度,一些累积的小的下降点也就构不成威胁了。如图,通过不断的找到新的优化点,性能才可能不断的提升。

8、总结。

​ 在实践过程中,各种性能维护和分析的方法并不是一定总是奏效的,每种方法只适用于某一些情况。这就需要实际问题实际分析,积累出一套性能分析和维护的方法,以及形成一套性能检查诊断的工具箱。

深入剖析Git对象底层原理[太开心]
本文通过 .git 目录角度解析 Git对象
1. Git 对象主要有以下四种类型:Blob存储文件内容,Tree记录文件结构,Commit记录历史,Tag添加标签。
2. Git 通过提取对象内容加头信息,使用 SHA-1 算法生成哈希值作为唯一 ID
3. Git 对象存储于 .git/objects目录下,其中对象 ID 值前两位作为目录名,后 38 位作为文件名
4. 在在执行暂存(add)、提交(commit)、合并(merge)、打标签(tag)等操作时都会触发 Git 对象的存储
文章链接:https://t.cn/A6jqB2oS

Java语言开发集成环境:IntelliJ IDEA 2023 for mac

IntelliJ IDEA 2023 for Mac是一款专业的集成开发环境(IDE)。它是JetBrains公司开发的一款针对Mac平台的编程工具,适用于各种编程语言,如Java、Scala、Groovy、Kotlin等。

IntelliJ IDEA 2023 for Mac具有以下特点:

智能代码编辑:它具有强大的代码补全功能,能够自动提示和推荐代码,提高编写效率。
代码重构:它支持多种重构操作,如重命名、提取方法等,帮助开发者更好地管理代码。
集成版本控制:它支持Git、SVN等版本控制工具,方便开发者进行团队协作和代码管理。
快速导航:它提供了强大的导航功能,如快速导航到方法、类等,提高开发效率。
插件支持:它支持大量的插件,可以帮助开发者扩展IDE的功能,满足不同的开发需求。
总的来说,IntelliJ IDEA 2023 for Mac是一款功能强大的集成开发环境,适用于各种编程语言和开发场景。它具有智能代码编辑、代码重构、集成版本控制、快速导航和插件支持等功能,能够帮助开发者提高开发效率和质量。
https://t.cn/A6lcpul0


发布     👍 0 举报 写留言 🖊   
✋热门推荐
  • #博君一肖娃圈[超话]#啊啊不是吧,我没有yuanjia出物给你就造谣我没有yuanjia出过东西吗。不喜欢扯皮,更喜欢love&peace,上班很忙,
  • ”[推荐]我知道和谁玩橙光作者:乌尔丽卡·汉本的作品是参加全橙色高考的小脑洞大家都很熟悉关宝的友情故事当我还是个孩子的时候当我读这个故事的时候我有一种很深的感觉
  • ( as brave as a lion)miu404小九我真的好怜爱他,精英小少爷但其实就是好乖好可爱好有原则一孩子,西装超级帅,在机搜不容易也磕磕绊绊
  • !汤底也特别鲜,吸满了螺蛳汤的腐竹也太优秀了,一份不够吃就再加一份!
  • )(5.完全无法理解在回来看到价钱,并且我们的花也有一定损坏后,还坚持放回去唯心地认为是自己租了一会儿的心路历程是怎样的)————————客观事实说明完毕在好心
  • 把握不好的朋友不如私信大元帅,跟上我都脚步,翻倍牛股你也可以抓到!在股票市场,永远不要去试图说服任何人,因为每个人的大脑思维方式都是独一无二的,每个人读过的书、
  • 我们看到筹码分布图上出现了和头部区间不一样的筹码分布,那就是在套牢盘下面逐渐有了获利筹码的存在。这些套牢盘分布在不同的位置,这说明在连续下跌的时候,有人在头部坚
  • 如你决定不要求Review of Procedures,则在Committee/Panel或Hearing Panel充分考虑你的申诉后作出决定后,你可要求填写
  • 我爸:你们都说说喜欢什么样的小姑娘冰哥:我喜欢好看的,爱笑的我爸:你这要求太具体了,碰上个好看但是不爱笑的,我是不是得追着人家讲笑话去?途径一路上卖玫瑰花的,J
  • 客观来说,我国的新能源汽车支持政策是符合市场规律的:在产业发展初期把补贴政策作为重要推手,在产业有了起色之后再逐步减少补贴额度直至完全取消,然后放手让脱颖而出的
  • 每年一度,八月中開show的“八度同樂日”已經來到第十二屆,不知不覺成長為一個本土的品牌音樂節目。大概我的十七岁的青春永远停留在这个小城市里,留在“八度琴行”
  • 想想,罪魁祸首就是这夜以继日的加班了,好几个凌晨四点归家,就连史上历经的两次奋战(加班)到天亮都是发生在这个月,几个人苦战着直到晨曦的光芒渐渐铺满天空,点亮白昼
  • 以前为了别人的眼光不想让大家觉得我是个很无趣的人就活跃过一段时间,现在随着年龄增长也并不太care别人的看法了,还是按着自己舒服的生活方式叭可能感觉自己幼态脸也
  • 朋友给我抽状态牌,最近疯狂往外喷牌,全是圣杯,圣杯三圣杯国王各种本来我以为是情绪化的元素,结果,全部应在了社交应酬上,认识了一些新的朋友,挺有意思的一个新认识的
  • ★G55二广高速太长段:1、因疫情防控原因,太谷东收费站入口封闭,禁止一切车辆驶入高速。★S5902运城绕城高速:因交通管制,东郭出口封闭。
  • [爱你][爱你] #“招募入门弟子”之社联招新# 审议部一个社联最最最正义的部门他们的督导,表示每一场活动的顺利进行他们的评定,坚守着爱与正义他们的是正义的化身
  • 人自身的福祉,例如精明的头脑、健康完善的体魄、爽朗的精神、乐观的气质以及高贵的天性等,简言之,就是幸福的第一要素;所以我们应竭尽全力地去促进与保存这种使人生幸福
  • 第四象限:我们在世界有了一席之地,有自己的圈子,接下来就是消融了,像个老人ksg vs Hero风山渐 变卦 山地剥山上有木,日渐成林,相较于第一大场Hero各
  • 扮丑搞怪,只是为了捞金,而且肯定不是秃头地中海,笑露齿龈主贱,这个人性格有极端的两面性,扮丑搞怪,没有心里压力,但是暗地里志向远大,至少想成名或者不只是做一个脱
  • 然而这一回黛玉和宝钗的戏份非常重要,黛玉名场面名台词“这是单给我一个人的,还是其他媎妹都有”还有宝钗讲述冷香丸的制法,这些都出在这一回,但是全部没有在标题体现!