性能报告说明

以下性能报告的基准版本为 SOFAMosn 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

请求模式

请求内容
1K req/resp

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

请求模式

请求内容
1K req/resp

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链接+500QPS,共计10W链接+1000QPS 1K req/resp

长连接网关

场景 QPS MEM(g) CPU(%) goroutine
RWLoop + goroutine 1000 3.3 60 200028
Raw epoll 1000 2.5 18 28

总结

MOSN0.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