目录
作者: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 网关集合名称类别的完整列表,以及每个类别的简要说明:
一、查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