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 场景)

测试环境

机器信息

机器OSCPU
11.166.190.2243.10.0-327.ali2010.rc7.alios7.x86_64Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz
11.166.136.1103.10.0-327.ali2010.rc7.alios7.x86_64Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz
bolt clientclient 为压力平台,有 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层代理

场景QPSRT(ms)MEM(K)CPU(%)
Bolt1600015.87718498
Http/1.14610674733690
Http/25219813124474

多核性能(gateway 场景)

测试环境

机器信息

机器OSCPU
11.166.190.2243.10.0-327.ali2010.rc7.alios7.x86_64Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz
11.166.136.1103.10.0-327.ali2010.rc7.alios7.x86_64Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz
bolt clientclient为压力平台,有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层代理

场景QPSRT(ms)MEM(K)CPU(%)
Bolt4500023.4544732380
Http/1.1215842342768380
Http/2818051.7173180300

长连接网关

测试环境

机器信息

机器OSCPU
11.166.190.2243.10.0-327.ali2010.rc7.alios7.x86_64Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz
11.166.136.1103.10.0-327.ali2010.rc7.alios7.x86_64Intel(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 QPS1K req/resp

长连接网关

场景QPSMEM(g)CPU(%)goroutine
RWLoop + goroutine10003.360200028
Raw epoll10002.51828

总结

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.010500175M
0.2.113000122M

修改于 2022年10月28日: docs: Changes to the v1.2.0 configuration (#217) (d237414)