Comments (8)
这个问题我也在考虑中,有几个问题:
(1) 提高bufhandle(即block)的大小:提高到多少比较合适?这应当是个临界值,超过这个值后,增加block大小已经无法带来延迟收益;这个临界值根据机器配置和带宽不同应当是不同的,需要给出确定这个值的办法
(2) 小block的好处是避免小请求对memory的浪费,因为发送时一个block就只被一个请求独占,如果block太大,就会有造成浪费,尤其系统中有大量小请求的时候会更明显,吃内存严重
(3) 一种折中是:buffer里面的block是随着分配而逐渐增长的,譬如第一个4K,第二个8K,第三个16K...直到达到(1)中提到的临界值就不再增加
以上我一直都想实现来着,如果你有更好的建议可以进一步讨论。
from sofa-pbrpc.
优化已经完成,参见 0dbfbbd , 8acfe52 和 1736cd3 。
主要优化点:
- 在block的隐藏头部中增加block_size字段;WriteBuffer扩展时新分配的tranbuf大小按照指数增长(1k、2k、4k、...),直到最大值(32k),在“降低大数据传输的延迟”和“避免memory浪费”之间进行权衡;ReadBuffer由于在多个buffer之间可以共享block,不会有memory浪费,所以在rpc_message_stream中接收数据时总是使用最大值(32K)。
- 设置tcp_no_delay,避免因为Nagle's Algorithm造成最后一个包的额外延迟。参见http://www.cnblogs.com/polymorphism/archive/2012/12/10/High_Latency_for_Small_Size_Entities_in_Table_Service.html 。但是这会使qps有少量下降,可以通过SOFA_PBRPC_TCP_NO_DELAY宏来选择是否开启该功能(默认开启)。
优化结果(通过运行test/perf_test/test_delay.sh测试得到):
单条请求携带数据量 | 0.1KB | 1KB | 10KB | 100KB | 1MB | 10MB |
优化前延迟(单位微秒) | 56 | 74 | 79942 | 31535 | 53439 | 124989 |
优化后延迟(单位微秒) | 53 | 57 | 186 | 533 | 3782 | 25234 |
from sofa-pbrpc.
请问tranbuf 大小的最大值为什么为32k?如果设置更大会有什么问题?
from sofa-pbrpc.
首先32k够大了,更大也不会提升吞吐,实测10k时就可以达到1.2GB/S,占满万兆网卡带宽了。
这个优化已经merge到主干,并在v1.1版本中了发布了
from sofa-pbrpc.
已经发布到:https://github.com/baidu/sofa-pbrpc/releases/tag/v1.1.0
from sofa-pbrpc.
Hi,使用中发现:如果协议的request message字段为repeated,且size比较大(数百个),且字段message是个复合结构(内部同样存在repeated字段),request序列化长度在200k左右,BinaryRpcRequest::ProcessRequest方法的执行时间会很长,达到几十毫秒+,请问是proto buffer的反序列化性能瓶颈造成的吗?是在预计范围之内吗?
from sofa-pbrpc.
我觉得是的,你可以自己单独测试一下使用protobuf进行序列化和反序列的性能,以验证你的猜测。
如果你能把测试出来的结果发到这里看看更好,我们可以考虑做一些优化。
from sofa-pbrpc.
我们在测试的时候也发现repeated在序列化的时候非常耗时。。
from sofa-pbrpc.
Related Issues (20)
- sofa-server端耗时异常
- sofa-client请求超时之后不关闭tcp连接导致同一个连接上请求连续超时 HOT 1
- try_start_receive是否可以省略_receive_token
- RpcServerMessageStream和RpcMessageStream类是否可抽取公共父类
- boost async_write_some可否用async_write替换 HOT 1
- sofa-pbrpc 需要引入可配置参数
- 客户端超时设置 HOT 2
- sofa-pbrpc-client health超时
- Too many threads in sofa ,how use epoll to overlap large number of socket events HOT 2
- sofa使用snapy压缩请求体大小为100+K时解压缩出错 HOT 5
- GOOGLE_ATTRIBUTE_DEPRECATED 替换成 __attribute__((deprecated)) HOT 2
- 什么时候支持window? HOT 2
- CPU使用问题 HOT 3
- 内存问题 HOT 2
- server如何主动向client发送消息? HOT 1
- bugs on weak memory model arch.(arm/power)
- server端如何主动发消息?
- 关于volatile变量相关的问题
- 有没有这种服务互相调用的方法
- cross compile error
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sofa-pbrpc.