企业存储技术 · 2023年12月19日

分布式存储系统性能调优-PG数量对性能的影响

注:本文内容引用自张洋老师的微博https://weibo.com/thinksoft,他是一位存储研发专家。

在分布式存储系统中,一般会对数据进行分区,这些分区被称为PG或者其他类似的名称。一般来讲单个OSD(硬盘)上会承载100~200个PG,整个存储系统的PG数量至少要大于OSD的数量,即每个盘上至少要有一个PG。一旦出现故障,需要迁移数据,可以以PG为单位进行数据迁移,非常灵活。

PG的大致含义如上,本文主要结合在实际性能调优工作中遇到的问题,谈谈PG数量对性能的影响。

PG数量过少,主要有一个影响,影响IO流量的均衡性。例如:PG数量在OSD上分布不均衡,在线程间分布不均衡,或导致网络流量在线程间不均衡。然而分布式存储系统各个组件和流程间的流程均衡,对性能影响又非常明显。例如:某个CPU核承担了过多的PG,那么该CPU核心便会首先达到瓶颈,出现IO排队的情况,而其他CPU核还很空闲。所以过少的PG数量达不到充分利用软硬件资源的目的。

反过来PG数量过多,对性能又会有一些什么影响呢?目前我在性能调优遇到过两大类问题。如下:

1) PG多了以后,有些遍历PG的流程占用CPU资源增加。例如:PG数量从1024增加到4096。原本只需要遍历1024个PG,增加后需要遍历4096个PG。利用perf工具观察代码热点,相关的遍历函数占用的CPU时钟周期明显增多。

在SDPK框架下,主要体现在处理PG事件的poller,每转一圈都会把全部的PG遍历检查一下,看看PG的IO队列是否有IO需要处理。由于在较短时间内,一般不会出现全部PG都有IO事件需要处理的情况。所以大部分的轮询判断属于空转CPU,白白浪费CPU资源。

解决这类问题的办法比较简单,只需要将PG队列分为两个,一个热队列(有事件),一个冷队列(无事件)。热队列每次都轮询检查,冷队列则降低轮询的频率即可。

2) PG多了以后,IO路径上的内存工作集变大。例如:每个PG在IO执行的时候,有大约60KB的内存占用,这部分内存包括PG的上下文信息等。如果是1024个PG,则会占用60MB内存。一般CPU的L3缓存大小也在40~60MB的样子,这时候LLC miss(L3缓存miss)比例相对来讲不算多。

当PG数量扩展到4096以后,对应的内存占用量相应的提升为4倍,即240MB,这时候L3缓存就装不下了,LLC miss会大幅度上升。特别是在IO流程中跳跃访问PG中的链表类数据结构的操作,LLC miss会明显增加。根据我最近的实际测试数据,4096 PG的LLC miss从38%提升到了52%,造成整体IOPS性能10%左右的下降。

解决此类问题的方法是利用perf差分火焰图,对比LLC miss增加比较多的流程,依次分析解决。例如:精简数据结构大小,改造数据结构,重排数据结构,采用预取数据指令等方法。这里需要注意的是,对于数据缓存和元数据缓存,本来就要占用数十GB内存的,就没必要去考虑了。

以上是PG数量增多对性能的一些影响以及处理方法,供参考。除此之外还会导致一些其他问题,例如:PG的加载流程变长,存储池的状态恢复时间变长等,消息事件增多等等。

作者:云和恩墨 zStorage分布式存储系统 性能架构师 张洋
原文:企业存储技术

推荐阅读

欢迎关注企业存储技术极术专栏,欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
5555
内容数
236
关注存储、服务器、图形工作站、AI硬件等方面技术。WeChat:490834312
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息