Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
B
brpc
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
brpc
Commits
3a61f5ea
Commit
3a61f5ea
authored
Sep 23, 2017
by
Zhangyi Chen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Start translating bvar.md
parent
4615c561
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
8 additions
and
8 deletions
+8
-8
bvar.md
docs/cn/bvar.md
+8
-8
bvar.md
docs/en/bvar.md
+0
-0
No files found.
docs/cn/bvar.md
View file @
3a61f5ea
#
1.
什么是bvar?
# 什么是bvar?
[
bvar
](
https://github.com/brpc/brpc/blob/master/src/bvar
)
是多线程环境下的计数器类库,方便记录和查看用户程序中的各类数值,它利用了thread local存储避免了cache bouncing,相比UbMonitor几乎不会给程序增加性能开销,也快于竞争频繁的原子操作。brpc集成了bvar,
[
/vars
](
http://brpc.baidu.com:8765/vars
)
可查看所有曝光的bvar,
[
/vars/VARNAME
](
http://brpc.baidu.com:8765/vars/rpc_socket_count
)
可查阅某个bvar,在rpc中的具体使用方法请查看
[
这里
](
vars.md
)
。brpc大量使用了bvar提供统计数值,当你需要在多线程环境中计数并展现时,应该第一时间想到bvar。但bvar不能代替所有的计数器,它的本质是把写时的竞争转移到了读:读得合并所有写过的线程中的数据,而不可避免地变慢了。当你读写都很频繁并得基于数值做一些逻辑判断时,你不应该用bvar。
#
2.
什么是cache bouncing?
# 什么是cache bouncing?
为了以较低的成本大幅提高性能,现代CPU都有
[
cache
](
https://en.wikipedia.org/wiki/CPU_cache
)
。百度内常见的Intel E5-2620拥有32K的L1 dcache和icache,256K的L2 cache和15M的L3 cache。其中L1和L2cache为每个核独有,L3则所有核共享。为了保证所有的核看到正确的内存数据,一个核在写入自己的L1 cache后,CPU会执行
[
Cache一致性
](
https://en.wikipedia.org/wiki/Cache_coherence
)
算法把对应的
[
cacheline
](
https://en.wikipedia.org/wiki/CPU_cache#Cache_entries
)(
一般是64字节
)
同步到其他核。这个过程并不很快,是微秒级的,相比之下写入L1 cache只需要若干纳秒。当很多线程在频繁修改某个字段时,这个字段所在的cacheline被不停地同步到不同的核上,就像在核间弹来弹去,这个现象就叫做cache bouncing。由于实现cache一致性往往有硬件锁,cache bouncing是一种隐式的的全局竞争。关于竞争请查阅
[
atomic instructions
](
atomic_instructions.md
)
。
...
...
@@ -12,7 +12,7 @@ cache bouncing使访问频繁修改的变量的开销陡增,甚至还会使访
![
img
](
../images/bvar_perf.png
)
#
3.
用noah监控bvar
# 用noah监控bvar
![
img
](
../images/bvar_flow.png
)
...
...
@@ -28,9 +28,9 @@ cache bouncing使访问频繁修改的变量的开销陡增,甚至还会使访
后面会在完善monitoring框架的过程中要求每个App添加新的必需字段。
#
4.
RD要干的事情
# RD要干的事情
##
1.
定义bvar
## 定义bvar
```
c++
#include <bvar/bvar.h>
...
...
@@ -152,7 +152,7 @@ public:
}
// namespace butil
```
##
2.
打开bvar的dump功能
## 打开bvar的dump功能
bvar可以定期把进程内所有的bvar打印入一个文件中,默认不打开。有几种方法打开这个功能:
...
...
@@ -190,7 +190,7 @@ bvar的dump功能由如下参数控制,产品线根据自己的需求调节,
| bvar_dump_prefix |
<app>
| Every dumped name starts with this prefix |
| bvar_dump_tabs | 见代码 | Dump bvar into different tabs according to the filters (seperated by semicolon), format:
*
(tab_name=wildcards) |
##
3.
编译并重启应用程序
## 编译并重启应用程序
检查monitor/bvar.
<app>
.data是否存在:
...
...
@@ -206,7 +206,7 @@ process_time_user : 0.741887
process_username : "gejun"
```
##
4.
打开[noah](http://noah.baidu.com/)
## 打开[noah](http://noah.baidu.com/)
搜索监控节点:
...
...
docs/en/bvar.md
0 → 100644
View file @
3a61f5ea
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment