MOSN 0.2.1 性能报告
本性能报告的基准版本为 MOSN 0.2.1。
在 0.2.1 版本中,我们进行了如下一些优化手段:
- 添加内存复用框架,涵盖 io/protocol/stream/proxy 层级,减少对象分配、内存使用和 GC 压力。
- 针对大量链接场景,新增 Raw Epoll 模式,该模式使用了事件回调机制 + IO 协程池,规避了海量协程带来的堆栈内存消耗以及调度开销。
需要注意的是,由于目前 SOFARPC 和 H2 的压测工具还没有 pxx 指标的展示,我们在性能报告中选取的数据都为均值。后续需要我们自行进行相关压测环境工具的建设来完善相关指标(P99,P95……)
总览
本次性能报告在0.1.0 性能报告
的基础上,新增了若干场景的覆盖,总体包含以下几部分:
- 单核性能(sidecar场景)
- 7层代理
- Bolt(串联)
- Http/1.1(串联)
- Http/2(串联)
- 多核性能(gateway场景)
- 7层代理
- Bolt(直连)
- Http/1.1(直连)
- Http/2(直连)
- 长连接网关
- Bolt(read/write loop with goroutine/raw epoll)
单核性能(sidecar 场景)
测试环境
机器信息
机器 | OS | CPU |
---|
11.166.190.224 | 3.10.0-327.ali2010.rc7.alios7.x86_64 | Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz |
11.166.136.110 | 3.10.0-327.ali2010.rc7.alios7.x86_64 | Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz |
bolt client | client 为压力平台,有 5 台压力机,共计与client MOSN 之间会建立 500 条链接 | |
http1 client(10.210.168.5) | ApacheBench/2.3 | -n 2000000 -c 500 -k |
http2 client(10.210.168.5) | nghttp.h2load | -n1000000 -c5 -m100 -t4 |
部署结构
压测模式 | 部署结构 |
---|
串联 | client –> MOSN(11.166.190.224) –> MOSN(11.166.136.110) –> server(11.166.136.110) |
网络时延
节点 | PING |
---|
client –> MOSN(11.166.190.224) | 1.356ms |
MOSN(11.166.190.224) –> MOSN(11.166.136.110) | 0.097 ms |
请求模式
7层代理
场景 | QPS | RT(ms) | MEM(K) | CPU(%) |
---|
Bolt | 16000 | 15.8 | 77184 | 98 |
Http/1.1 | 4610 | 67 | 47336 | 90 |
Http/2 | 5219 | 81 | 31244 | 74 |
多核性能(gateway 场景)
测试环境
机器信息
机器 | OS | CPU |
---|
11.166.190.224 | 3.10.0-327.ali2010.rc7.alios7.x86_64 | Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz |
11.166.136.110 | 3.10.0-327.ali2010.rc7.alios7.x86_64 | Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz |
bolt client | client为压力平台,有5台压力机,共计与client MOSN之间会建立500条链接 | |
http1 client(10.210.168.5) | ApacheBench/2.3 | -n 2000000 -c 500 -k |
http2 client(10.210.168.5) | nghttp.h2load | -n1000000 -c5 -m100 -t4 |
部署结构
压测模式 | 部署结构 |
---|
直连 | client –> MOSN(11.166.190.224) –> server(11.166.136.110) |
网络时延
节点 | PING |
---|
client –> MOSN(11.166.190.224) | 1.356ms |
MOSN(11.166.190.224) –> MOSN(11.166.136.110) | 0.097 ms |
请求模式
7层代理
场景 | QPS | RT(ms) | MEM(K) | CPU(%) |
---|
Bolt | 45000 | 23.4 | 544732 | 380 |
Http/1.1 | 21584 | 23 | 42768 | 380 |
Http/2 | 8180 | 51.7 | 173180 | 300 |
长连接网关
测试环境
机器信息
机器 | OS | CPU |
---|
11.166.190.224 | 3.10.0-327.ali2010.rc7.alios7.x86_64 | Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz |
11.166.136.110 | 3.10.0-327.ali2010.rc7.alios7.x86_64 | Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz |
部署结构
压测模式 | 部署结构 |
---|
直连 | client –> MOSN(11.166.190.224) –> server(11.166.136.110) |
网络时延
节点 | PING |
---|
client –> MOSN(11.166.190.224) | 1.356ms |
MOSN(11.166.190.224) –> MOSN(11.166.136.110) | 0.097 ms |
请求模式
链接数 | 请求内容 |
---|
2 台压力机,每台 5w 链接 + 500 QPS,共计10W链接 + 1000 QPS | 1K req/resp |
长连接网关
场景 | QPS | MEM(g) | CPU(%) | goroutine |
---|
RWLoop + goroutine | 1000 | 3.3 | 60 | 200028 |
Raw epoll | 1000 | 2.5 | 18 | 28 |
总结
MOSN 0.2.1
引入了内存复用框架
,相比0.1.0
,在 bolt 协议转发
场景性能表现得到了大幅优化。在提升了20% 的 QPS 的同时,还优化了 30% 的内存占用。
与此同时,我们对 HTTP/1.1 及 HTTP/2 的场景也进行了初步的性能测试,目前来看性能表现比较一般。这主要是由于目前 HTTP 协议族的 IO、Stream 都由三方库进行处理,与 MOSN 现有的处理框架整合度较差。我们会在后续迭代进行专项优化,提升 MOSN 处理 HTTP 协议族的表现。
此外,针对大量链接场景(例如长连接网关),我们引入了 Raw Epoll + 协程池的模式来应对协程暴增的问题,从而大幅优化了该场景下的 QPS 和内存表现。
附录
版本对比
对比条件:
- 页面大小 0~10k,平均5k
- downstream 链接 1000
- upstream链接 6
- 单核压测
版本 | QPS | 内存 |
---|
0.1.0 | 10500 | 175M |
0.2.1 | 13000 | 122M |
修改于 2022年10月28日: docs: Changes to the v1.2.0 configuration (#217) (d237414)