ceph性能统计实现

0. ceph是如何查看集群性能数据的

  • 通过ceph -s显示本次查看的集群性能数据
  • 通过ceph -w实时更新集群性能数据
    如下图:


    image.png

那这里client io是怎么得到的呢,接下来介绍下ceph性能统计的实现

1. 性能收集总体框架

image.png
  • osd端负责收集性能数据并上报给mon
  • mon端负责汇总性能数据并同步给其他mon,之所以要同步是了保证不同客户端访问不同的mon得到的性能数据是一致的
  • osd内部是以pg为粒度进行性能收集的
  • mon性能数据需要持久化到pgmap里

2. osd端性能收集实现

image.png

如上图所示

  • pg中info.stats.stats成员变量记录pg从osd开始运行到现在累计的性能数据
  • pg中的unstable_stats记录的两次写time interval内的性能数据,包括读写iops以及时延等,可以认为是增量的性能数据
  • pg统计好性能数据放到pg_stats_publish,然后将pg加入osd的pg_stat_queue队列
  • osd tick线程定时扫描pg_stat_queue队列去上报pg stats给mon

3. mon端性能统计汇总

image.png

当pgmap数据在所有mon节点同步完成后,需要更新本地内存的数据,此时会将新增的数据apply到pgmap中


image.png

从上图的过程可以看出:

  • pg_sum是记录整个集群的所有的pg性能数据
  • pg_sum更新pg的stats是先删除旧的,然后更新为本次修改的,因为pg上报的是全量的性能数据
  • 更新pg_sum的最近的增量delta数据,包括data和time,用来进行性能统计
  • 更新每个pool下的最近的增量delta数据,包括data和time,用来进行性能统计
  • 无论是pg_sum的delta数据还是每个pool下的,最多只保留mon_stat_smooth_intervals=2个统计周期的数据

上面说到的delta到底是干什么用的呢?还记得开头我们提出的ceph -s下的client io是如何得到的吗,这里就用到了delta数据了

当你调用ceph -s查看pg性能统计结果时,到mon的流程如下:


image.png

从上图可以看出client io是通过pg_sum_delta和stamp_delta计算得到的

4. 总结

当前ceph性能统计存在一定的问题

  • 首先没有统计客户端到osd段这段时延,所以ceph统计的io时延比真实要低
  • 由于pg可以并发,osd也可以并发处理,导致osd上报pg状态并不是同时的,因此mon统计的数据并不能反映集群的某一时刻真实性能
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容