【ceph】ceph性能分析工具之perf dump代码打点调试统计PerfCounters

目录

简介

一、查ceph自带的统计

1 命令格式

2 dump 命令输出结果

二、自己添加统计

三、分析案例

io耗时初分析

继续分析

进一步分析

代码修改和验证

四、报错记录 

五、附录

1、代码修改和验证


作者:bandaoyu 本文持续更新,源地址:https://blog.csdn.net/bandaoyu/article/details/120913194

即看即用

查看

ceph daemon osd.10  perf dump  

输出osd.N的统计信息: ceph daemon osd.N perf dump

重置osd.N的统计信息:ceph daemon osd.N perf reset all

增加统计项

#include "common/perf_counters.h"

enum {
  l_os_first = 84000,
  l_os_jq_max_ops,
  ...
  l_os_queue_lat,
  l_os_nc_used_bytes, // add by skdkjzz 
  l_os_last,
};

PerfCountersBuilder my_plb(cct, "myStatName", l_os_first , l_os_last);

#加入项目标记add_u64_counter:计数的,add_time_avg:求平均时间的

my_plb.add_u64_counter(l_os_jq_max_ops, "test_count");

 my_plb.add_time_avg(l_os_queue_lat, "latency", "after dequeue latency",   "wadl", perf_prio);

perf_logger = my_plb.create_perf_counter();

#计数统计,在需要增加或者减少 l_os_jq_max_ops的地方调用函数 inc or dec
  
perf_logger ->inc(l_os_jq_max_ops,num); #inc为增加,增加num
perf_logger ->dec(l_os_jq_max_ops,num);#dec为减少,减少num

#求平均值,起始一个begin,后面累加tinc
perf_logger ->begin_inc(l_os_queue_lat); 
perf_logger ->tinc(l_os_queue_lat,dur_t);

 Perf具体的计算函数,包括set()、tset()、inc()、tinc()、dec()

这些函数都有一个参数: int idx, 就是前面我们定义的enum类型的具体指标。函数首字母是’t’的是关于time的处理。
set()/tset():设置一个值。
inc()/tinc(): 增加,如果给定了增加多少,就增加具体的值;如果没有指定增加多少,+1.
dec(): 减少,如果给定了减少的值,就减少多少;如果没有指定,-1

32: 将test_perfcounter子模块中的所有指标都清0

34-35: 在perf counter集合的层面上清空,其实内部最后还是调用的PerfCounter::reset(), 也就是32行的调用函数

PerfCounterCollection::reset(string name)函数中的参数如果是”all”的话,perf集合会遍历所有的perf counter,依次调用reset();
参数可以是具体的perf counter子模块名,就只清空该模块, 比如reset(“test_perfcounter”)
————————————————
版权声明:本文为CSDN博主「bandaoyu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bandaoyu/article/details/120913194

简介

Ceph 性能计数器( performance counters )是内部模块指标的收集统计器。它采集到的数据可以通过各种工具收集、聚合和绘图,可用于性能分析。

Ceph mon和 OSD 等进程的性能计数器 有专门的socket接口供其他工具连接和交互。默认情况下,每个进程的套接字文件位于 /var/run/ceph 下。性能计数器被组合到集合名称中。这些集合名称代表一个子系统或子系统的一个实例。
以下是监视器、OSD 和 RADOS 网关集合名称类别的完整列表,以及每个类别的简要说明:

https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/1.3/html/administration_guide/performance_counters

一、查ceph自带的统计

1 命令格式

perf dump命令将输出 ceph中 PERF COUNTERS 的统计信息

ceph daemon xxx.id perf dump  命令

如:

ceph daemon osd.10  perf dump  

ceph 提供了许多非常的工具,今天简单介绍一下获取OSD统计信息的工具 。通过该命令可以让我们更直观的看到OSD的一些信息。

输出osd.N的统计信息: ceph daemon osd.N perf dump

重置osd.N的统计信息:ceph daemon osd.N perf reset all

2 dump 命令输出结果

该命令会输出一个json格式的结果,通过对结果的分析,我们可以很好的得到osd的运行状态,比如读写操作的延时、操作队列的长度,数据恢复,操作计数等信息,部分统计字段如下:
(字段含义见后面章节)

{
    "WBThrottle": {
        "bytes_dirtied": 0,
        "bytes_wb": 17505569440,
        "ios_dirtied": 0,
        "ios_wb": 12112,
        "inodes_dirtied": 0,
        "inodes_wb": 12112
    },
    "filestore": {
        "journal_queue_max_ops": 50000,
        "journal_queue_ops": 0,
        "journal_ops": 57187,
        "journal_queue_max_bytes": 33554432,
        "journal_queue_bytes": 0,
        "journal_bytes": 22842879961,
        "journal_latency": {
            "avgcount": 57187,
            "sum": 322.201043018
        },
        "journal_wr": 52269,
        "journal_wr_bytes": {
            "avgcount": 52269,
            "sum": 23029956608
        },
        "journal_full": 0,
        "committing": 0,
        "commitcycle": 346,
        "commitcycle_interval": {
            "avgcount": 346,
            "sum": 5199.707915189
        },
        "commitcycle_latency": {
            "avgcount": 346,
            "sum": 7.791222630
        },
        "op_queue_max_ops": 25000,
        "op_queue_ops": 0,
        "ops": 57187,
        "op_queue_max_bytes": 10485760,
        "op_queue_bytes": 0,
        "bytes": 22842079343,
        "apply_latency": {
            "avgcount": 57187,
            "sum": 2242.084968391
        },
        "queue_transaction_latency_avg": {
            "avgcount": 57187,
            "sum": 70.085438088
        }
    },
    "leveldb": {
        "leveldb_get": 37522,
        "leveldb_transaction": 159445,
        ...
        "leveldb_compact_queue_len": 0
    },
    "objecter": {
         ...
    },
    "osd": {
          ...
        "op_latency": {
            "avgcount": 25670,
            "sum": 1126.046253167      
        },
        "subop_push": 0,
        "subop_push_in_bytes": 0,
        "subop_push_latency": {
            "avgcount": 0,
            "sum": 0.000000000
        },
        "pull": 0,
           ...
        "copyfrom": 6478,
           ...
    }
}

Ceph daemon osd perf dump 命令:https://blog.csdn.net/c744402859/article/details/53223412

二、添加统计项目

PerfCounters添加步骤,以FileStore,统计增减最终结果为例:


1、在需要使用的cc文件中添加头文件:
#include "common/perf_counters.h"

2、添加统计项目的enum

ObjectStore中有enum枚举,注意枚举中的第一个元素与最后一个元素,这是给PerfCountersBuilder使用的(如:PerfCountersBuilder my_plb(cct, "myStatName", l_os_first , l_os_last);)

我们自己添加自己想要的元素需要注意必须在l_os_first 与 l_os_last之间添加!

enum {
  l_os_first = 84000,
  l_os_jq_max_ops,
  ...
  l_os_queue_lat,
  l_os_nc_used_bytes, // add by skdkjzz 
  l_os_last,
};

3、

#创建一个自己的counter build:my_plb并加入项目

PerfCountersBuilder my_plb(cct, "myStatName", l_os_first , l_os_last);

#加入项目标记add_u64_counter:计数的,add_time_avg:求平均时间的

my_plb.add_u64_counter(l_os_jq_max_ops, "test_count");

 my_plb.add_time_avg(l_os_queue_lat, "latency", "after dequeue latency",   "wadl", perf_prio);

#创建counter

perf_logger = my_plb.create_perf_counter();

#在需要增加或者减少 l_os_jq_max_ops的地方调用函数 inc or dec
 perf_logger ->inc(l_os_jq_max_ops,num); #inc为增加,增加num
perf_logger ->dec(l_os_jq_max_ops,num);#dec为减少,减少num


#求平均值,起始一个begin,后面累加tinc
perf_logger ->begin_inc(l_os_queue_lat); 
perf_logger ->tinc(l_os_queue_lat,dur_t);

至此,完成添加!
原文链接:https://blog.csdn.net/skdkjzz/article/details/52106585

例子2:Ceph内建辅助工具实践:http://aspirer.wang/?p=1456

例子3:打点 统计均值


1、在Engine.h定义计数的变量的id:l_row_flush_op_lat

enum {
  l_engine_first = 100000,

……

  l_row_flush_op_lat,
…… 

  l_engine_last,
};


2、创建变量并和id绑定,创建create_perf_counters

add_u64_counter:计数的

add_time_avg:求平均时间的
void EngineService::engine_create_logger()
{
  dout(2) << "engine_create_logger" << dendl;

  PerfCountersBuilder engine_plb(ecct, "engine", l_engine_first, l_engine_las

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值