MOSN 0.1.0 性能报告

本性能报告为 MOSN 0.1.0 在做 Bolt 与 HTTP1.x 协议的纯 TCP 转发上与 envoy 的一些性能对比数据,主要表现在 QPS、RTT、失败率/成功率等。

以下的的性能报告为 MOSN 0.1.0 在做 Bolt 与 HTTP1.x 协议的纯 TCP 转发上与 envoy 的一些性能对比数据,主要表现在 QPS、RTT、失败率/成功率等。

这里需要强调的是,为了提高 MOSN 的转发性能,在 0.1.0 版本中,我们做了如下的一些优化手段:

  • 在线程模型优化上,使用 worker 协程池处理 stream 事件,使用两个独立的协程分别处理读写 IO
  • 在单核转发优化上,在指定 P=1 的情况下,我们通过使用 CPU 绑核的形式来提高系统调用的执行效率以及 cache 的 locality affinity
  • 在内存优化上,同样是在单核绑核的情况下,我们通过使用 SLAB-style 的回收机制来提高复用,减少内存 copy
  • 在 IO 优化上,主要是通过读写 buffer 大小以及读写时机和频率等参数的控制上进行调优

以下为具体的性能测试数据。

TCP 代理性能数据

这里,针对相同的部署模式,我们分别针对上层协议为 "Bolt(SofaRpc相关协议)""HTTP1.1" 来进行对比。

部署模式

压测采用纯代理模式部署,client 进程通过 MOSN 进程作为转发代理访问server进程。其中,client 进程,MOSN 进程,server 进程分别运行在属于不同网段的机器中。client 直连访问 server 网络延时为 2.5ms 左右。

客户端

Bolt 协议(发送 1K 字符串)

发送 Bolt 协议数据的客户端使用 “蚂蚁集团”内部开发的线上压力机,并部署 sofa rpc client。 通过压力机的性能页面,可反映压测过程中的QPS、成功/失败次数,以及RT等参数。

HTTP1.1 协议(发送 1K 字符串)

使用 ApacheBench/2.3, 测试指令:

  1. ab -n $RPC -c $CPC -p 1k.txt -T "text/plain" -k http://11.166.161.136:12200/tcp_bench > ab.log.$CPU_IDX &

Service mesh 运行机器规格

Service mesh 运行在容器中,其中 CPU 为独占的一个逻辑核,具体规格如下:

类别信息
OS3.10.0-327.ali2008.alios7.x86_64
CPUIntel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz X 1

Upstream 运行机器规格

类别信息
OS2.6.32-431.17.1.el6.FASTSOCKET
CPUIntel(R) Xeon(R) CPU E5620 @ 2.40GHz X 16

Bolt 协议测试结果

性能数据

指标MOSNEnvoy
QPS103500104000
RT16.23ms15.88ms
MEM31m18m
CPU100%100%

结论

可以看到,在单核 TCP 转发场景下,MOSN 0.1.0 版本和 Envoy 1.7版本,在满负载情况下的 QPS、RTT、成功数/失败数等性能数据上相差不大,后续版本我们会继续优化。

HTTP/1.1 测试结果

由于 HTTP/1.1 的请求响应模型为 PING-PONG,因此 QPS 与并发数会呈现正相关。下面分别进行不同并发数的测试。

并发20

指标MOSNEnvoy
QPS56005600
RT(mean)3.549ms3.545ms
RT(P99)4ms4ms
RT(P98)4ms4ms
RT(P95)4ms4ms
MEM24m23m
CPU40%20%

并发40

指标MOSNEnvoy
QPS1115011200
RT(mean)3.583ms3.565ms
RT(P99)4ms4ms
RT(P98)4ms4ms
RT(P95)4ms4ms
MEM34m24m
CPU70%40%

并发200

指标MOSNEnvoy
QPS2967038800
RT(mean)5.715ms5.068ms
RT(P99)16ms7ms
RT(P98)13ms7ms
RT(P95)11ms6ms
MEM96m24m
CPU100%95%

并发220

指标MOSNEnvoy
QPS3036741070
RT(mean)8.201ms5.369ms
RT(P99)20ms9ms
RT(P98)19ms8ms
RT(P95)16ms8ms
MEM100m24m
CPU100%100%

结论

可以看到,在上层协议为 HTTP/1.X 时,MOSN 的性能和 Envoy 的性能存在一定差距,对于这种现象我们的初步结论为:在 PING-PONG 的发包模型下,MOSN 无法进行 read/write 系统调用合并,相比 SOFARPC 可以合并的场景,syscall 数量大幅上升,因此导致相比 SOFARPC 的场景,HTTP 性能上相比 Envoy 会存在差距。针对这个问题,在 0.2.0 版本中,我们会进行相应的优化。

附录

Envoy 版本信息

  • version:1.7
  • tag:1ef23d481a4701ad4a414d1ef98036bd2ed322e7

Envoy TCP 测试配置

  1. static_resources:
  2. listeners:
  3. - address:
  4. socket_address:
  5. address: 0.0.0.0
  6. port_value: 12200
  7. filter_chains:
  8. - filters:
  9. - name: envoy.tcp_proxy
  10. config:
  11. stat_prefix: ingress_tcp
  12. cluster: sofa_server
  13. clusters:
  14. - name: sofa_server
  15. connect_timeout: 0.25s
  16. type: static
  17. lb_policy: round_robin
  18. hosts:
  19. - socket_address:
  20. address: 10.210.168.5
  21. port_value: 12222
  22. - socket_address:
  23. address: 10.210.168.5
  24. port_value: 12223
  25. - socket_address:
  26. address: 10.210.168.5
  27. port_value: 12224
  28. - socket_address:
  29. address: 10.210.168.5
  30. port_value: 12225
  31. admin:
  32. access_log_path: "/dev/null"
  33. address:
  34. socket_address:
  35. address: 0.0.0.0
  36. port_value: 8001

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