Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Incubator Pegasus
提交
1a1fc190
Incubator Pegasus
项目概览
apache
/
Incubator Pegasus
通知
9
Star
5
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Incubator Pegasus
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
1a1fc190
编写于
4月 09, 2020
作者:
小地鼠家的小松鼠
提交者:
GitHub
4月 09, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: node qps sum inconsistent with app qps sum (#511)
上级
34361c3c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
82 addition
and
22 deletion
+82
-22
src/shell/commands.h
src/shell/commands.h
+5
-1
src/shell/commands/node_management.cpp
src/shell/commands/node_management.cpp
+77
-21
未找到文件。
src/shell/commands.h
浏览文件 @
1a1fc190
...
...
@@ -55,6 +55,8 @@ struct list_nodes_helper
double
put_p99
;
double
multi_get_p99
;
double
multi_put_p99
;
double
read_cu
;
double
write_cu
;
list_nodes_helper
(
const
std
::
string
&
n
,
const
std
::
string
&
s
)
:
node_name
(
n
),
node_status
(
s
),
...
...
@@ -73,7 +75,9 @@ struct list_nodes_helper
get_p99
(
0.0
),
put_p99
(
0.0
),
multi_get_p99
(
0.0
),
multi_put_p99
(
0.0
)
multi_put_p99
(
0.0
),
read_cu
(
0.0
),
write_cu
(
0.0
)
{
}
};
...
...
src/shell/commands/node_management.cpp
浏览文件 @
1a1fc190
...
...
@@ -61,6 +61,7 @@ bool ls_nodes(command_executor *e, shell_context *sc, arguments args)
bool
resolve_ip
=
false
;
bool
resource_usage
=
false
;
bool
show_qps
=
false
;
bool
show_latency
=
false
;
bool
json
=
false
;
optind
=
0
;
while
(
true
)
{
...
...
@@ -81,6 +82,7 @@ bool ls_nodes(command_executor *e, shell_context *sc, arguments args)
break
;
case
'q'
:
show_qps
=
true
;
show_latency
=
true
;
break
;
case
'j'
:
json
=
true
;
...
...
@@ -240,13 +242,67 @@ bool ls_nodes(command_executor *e, shell_context *sc, arguments args)
return
true
;
}
// TODO(heyuchen): add cu statistics
::
dsn
::
command
command
;
command
.
cmd
=
"perf-counters-by-prefix"
;
command
.
arguments
.
push_back
(
"replica*app.pegasus*get_qps"
);
command
.
arguments
.
push_back
(
"replica*app.pegasus*multi_get_qps"
);
command
.
arguments
.
push_back
(
"replica*app.pegasus*put_qps"
);
command
.
arguments
.
push_back
(
"replica*app.pegasus*multi_put_qps"
);
command
.
arguments
.
push_back
(
"replica*app.pegasus*recent.read.cu"
);
command
.
arguments
.
push_back
(
"replica*app.pegasus*recent.write.cu"
);
std
::
vector
<
std
::
pair
<
bool
,
std
::
string
>>
results
;
call_remote_command
(
sc
,
nodes
,
command
,
results
);
for
(
int
i
=
0
;
i
<
nodes
.
size
();
++
i
)
{
dsn
::
rpc_address
node_addr
=
nodes
[
i
].
address
;
auto
tmp_it
=
tmp_map
.
find
(
node_addr
);
if
(
tmp_it
==
tmp_map
.
end
())
continue
;
if
(
!
results
[
i
].
first
)
{
std
::
cout
<<
"query perf counter info from node "
<<
node_addr
.
to_string
()
<<
" failed"
<<
std
::
endl
;
return
true
;
}
dsn
::
perf_counter_info
info
;
dsn
::
blob
bb
(
results
[
i
].
second
.
data
(),
0
,
results
[
i
].
second
.
size
());
if
(
!
dsn
::
json
::
json_forwarder
<
dsn
::
perf_counter_info
>::
decode
(
bb
,
info
))
{
std
::
cout
<<
"decode perf counter info from node "
<<
node_addr
.
to_string
()
<<
" failed, result = "
<<
results
[
i
].
second
<<
std
::
endl
;
return
true
;
}
if
(
info
.
result
!=
"OK"
)
{
std
::
cout
<<
"query perf counter info from node "
<<
node_addr
.
to_string
()
<<
" returns error, error = "
<<
info
.
result
<<
std
::
endl
;
return
true
;
}
list_nodes_helper
&
h
=
tmp_it
->
second
;
for
(
dsn
::
perf_counter_metric
&
m
:
info
.
counters
)
{
if
(
m
.
name
.
find
(
"replica*app.pegasus*get_qps"
)
!=
std
::
string
::
npos
)
h
.
get_qps
+=
m
.
value
;
else
if
(
m
.
name
.
find
(
"replica*app.pegasus*multi_get_qps"
)
!=
std
::
string
::
npos
)
h
.
multi_get_qps
+=
m
.
value
;
else
if
(
m
.
name
.
find
(
"replica*app.pegasus*put_qps"
)
!=
std
::
string
::
npos
)
h
.
put_qps
+=
m
.
value
;
else
if
(
m
.
name
.
find
(
"replica*app.pegasus*multi_put_qps"
)
!=
std
::
string
::
npos
)
h
.
multi_put_qps
+=
m
.
value
;
else
if
(
m
.
name
.
find
(
"replica*app.pegasus*recent.read.cu"
)
!=
std
::
string
::
npos
)
h
.
read_cu
+=
m
.
value
;
else
if
(
m
.
name
.
find
(
"replica*app.pegasus*recent.write.cu"
)
!=
std
::
string
::
npos
)
h
.
write_cu
+=
m
.
value
;
}
}
}
if
(
show_latency
)
{
std
::
vector
<
node_desc
>
nodes
;
if
(
!
fill_nodes
(
sc
,
"replica-server"
,
nodes
))
{
std
::
cout
<<
"get replica server node list failed"
<<
std
::
endl
;
return
true
;
}
::
dsn
::
command
command
;
command
.
cmd
=
"perf-counters-by-postfix"
;
command
.
arguments
.
push_back
(
"zion*profiler*RPC_RRDB_RRDB_GET.qps"
);
command
.
arguments
.
push_back
(
"zion*profiler*RPC_RRDB_RRDB_PUT.qps"
);
command
.
arguments
.
push_back
(
"zion*profiler*RPC_RRDB_RRDB_MULTI_GET.qps"
);
command
.
arguments
.
push_back
(
"zion*profiler*RPC_RRDB_RRDB_MULTI_PUT.qps"
);
command
.
arguments
.
push_back
(
"zion*profiler*RPC_RRDB_RRDB_GET.latency.server"
);
command
.
arguments
.
push_back
(
"zion*profiler*RPC_RRDB_RRDB_PUT.latency.server"
);
command
.
arguments
.
push_back
(
"zion*profiler*RPC_RRDB_RRDB_MULTI_GET.latency.server"
);
...
...
@@ -278,15 +334,7 @@ bool ls_nodes(command_executor *e, shell_context *sc, arguments args)
}
list_nodes_helper
&
h
=
tmp_it
->
second
;
for
(
dsn
::
perf_counter_metric
&
m
:
info
.
counters
)
{
if
(
m
.
name
.
find
(
"RPC_RRDB_RRDB_GET.qps"
)
!=
std
::
string
::
npos
)
h
.
get_qps
=
m
.
value
;
else
if
(
m
.
name
.
find
(
"RPC_RRDB_RRDB_PUT.qps"
)
!=
std
::
string
::
npos
)
h
.
put_qps
=
m
.
value
;
else
if
(
m
.
name
.
find
(
"RPC_RRDB_RRDB_MULTI_GET.qps"
)
!=
std
::
string
::
npos
)
h
.
multi_get_qps
=
m
.
value
;
else
if
(
m
.
name
.
find
(
"RPC_RRDB_RRDB_MULTI_PUT.qps"
)
!=
std
::
string
::
npos
)
h
.
put_qps
=
m
.
value
;
else
if
(
m
.
name
.
find
(
"RPC_RRDB_RRDB_GET.latency.server"
)
!=
std
::
string
::
npos
)
if
(
m
.
name
.
find
(
"RPC_RRDB_RRDB_GET.latency.server"
)
!=
std
::
string
::
npos
)
h
.
get_p99
=
m
.
value
;
else
if
(
m
.
name
.
find
(
"RPC_RRDB_RRDB_PUT.latency.server"
)
!=
std
::
string
::
npos
)
h
.
put_p99
=
m
.
value
;
...
...
@@ -328,12 +376,16 @@ bool ls_nodes(command_executor *e, shell_context *sc, arguments args)
}
if
(
show_qps
)
{
tp
.
add_column
(
"get_qps"
,
tp_alignment
::
kRight
);
tp
.
add_column
(
"get_p99(ms)"
,
tp_alignment
::
kRight
);
tp
.
add_column
(
"mget_qps"
,
tp_alignment
::
kRight
);
tp
.
add_column
(
"
mget_p99(ms)
"
,
tp_alignment
::
kRight
);
tp
.
add_column
(
"
read_cu
"
,
tp_alignment
::
kRight
);
tp
.
add_column
(
"put_qps"
,
tp_alignment
::
kRight
);
tp
.
add_column
(
"put_p99(ms)"
,
tp_alignment
::
kRight
);
tp
.
add_column
(
"mput_qps"
,
tp_alignment
::
kRight
);
tp
.
add_column
(
"write_cu"
,
tp_alignment
::
kRight
);
}
if
(
show_latency
)
{
tp
.
add_column
(
"get_p99(ms)"
,
tp_alignment
::
kRight
);
tp
.
add_column
(
"mget_p99(ms)"
,
tp_alignment
::
kRight
);
tp
.
add_column
(
"put_p99(ms)"
,
tp_alignment
::
kRight
);
tp
.
add_column
(
"mput_p99(ms)"
,
tp_alignment
::
kRight
);
}
for
(
auto
&
kv
:
tmp_map
)
{
...
...
@@ -354,13 +406,17 @@ bool ls_nodes(command_executor *e, shell_context *sc, arguments args)
}
if
(
show_qps
)
{
tp
.
append_data
(
kv
.
second
.
get_qps
);
tp
.
append_data
(
kv
.
second
.
get_p99
/
1000000
);
tp
.
append_data
(
kv
.
second
.
multi_get_qps
);
tp
.
append_data
(
kv
.
second
.
multi_get_p99
/
1000000
);
tp
.
append_data
(
kv
.
second
.
read_cu
);
tp
.
append_data
(
kv
.
second
.
put_qps
);
tp
.
append_data
(
kv
.
second
.
put_p99
/
1000000
);
tp
.
append_data
(
kv
.
second
.
multi_put_qps
);
tp
.
append_data
(
kv
.
second
.
multi_put_p99
/
1000000
);
tp
.
append_data
(
kv
.
second
.
write_cu
);
}
if
(
show_latency
)
{
tp
.
append_data
(
kv
.
second
.
get_p99
/
1e6
);
tp
.
append_data
(
kv
.
second
.
multi_get_p99
/
1e6
);
tp
.
append_data
(
kv
.
second
.
put_p99
/
1e6
);
tp
.
append_data
(
kv
.
second
.
multi_put_p99
/
1e6
);
}
}
mtp
.
add
(
std
::
move
(
tp
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录