sofastack / sofa-rpc

SOFARPC is a high-performance, high-extensibility, production-level Java RPC framework.
https://www.sofastack.tech/sofa-rpc/docs/Home
Apache License 2.0
3.81k stars 1.17k forks source link

Proxy Benchmark #1232

Closed OrezzerO closed 1 year ago

OrezzerO commented 1 year ago

Now, SOFARPC has three proxy implements. Each proxy has different performance. I write a benchmark #1231 to build a report.

Performance about build a proxy:

Benchmark                                                    Mode     Cnt      Score     Error   Units
ProxyBuildBenchMark.bytebuddyBuild                          thrpt       5      1.026 ±   0.579  ops/ms
ProxyBuildBenchMark.javassistBuild                          thrpt       5      0.383 ±   0.582  ops/ms
ProxyBuildBenchMark.jdkBuild                                thrpt       5  14754.182 ± 733.767  ops/ms
ProxyBuildBenchMark.bytebuddyBuild                           avgt       5      0.808 ±   0.423   ms/op
ProxyBuildBenchMark.javassistBuild                           avgt       5      6.497 ±  36.454   ms/op
ProxyBuildBenchMark.jdkBuild                                 avgt       5     ≈ 10⁻⁴             ms/op
ProxyBuildBenchMark.bytebuddyBuild                         sample    6008      0.834 ±   0.100   ms/op
ProxyBuildBenchMark.bytebuddyBuild:bytebuddyBuild·p0.00    sample              0.621             ms/op
ProxyBuildBenchMark.bytebuddyBuild:bytebuddyBuild·p0.50    sample              0.713             ms/op
ProxyBuildBenchMark.bytebuddyBuild:bytebuddyBuild·p0.90    sample              1.059             ms/op
ProxyBuildBenchMark.bytebuddyBuild:bytebuddyBuild·p0.95    sample              1.225             ms/op
ProxyBuildBenchMark.bytebuddyBuild:bytebuddyBuild·p0.99    sample              1.611             ms/op
ProxyBuildBenchMark.bytebuddyBuild:bytebuddyBuild·p0.999   sample              4.612             ms/op
ProxyBuildBenchMark.bytebuddyBuild:bytebuddyBuild·p0.9999  sample            181.142             ms/op
ProxyBuildBenchMark.bytebuddyBuild:bytebuddyBuild·p1.00    sample            181.142             ms/op
ProxyBuildBenchMark.javassistBuild                         sample    1184      5.452 ±   5.084   ms/op
ProxyBuildBenchMark.javassistBuild:javassistBuild·p0.00    sample              1.919             ms/op
ProxyBuildBenchMark.javassistBuild:javassistBuild·p0.50    sample              2.206             ms/op
ProxyBuildBenchMark.javassistBuild:javassistBuild·p0.90    sample              2.937             ms/op
ProxyBuildBenchMark.javassistBuild:javassistBuild·p0.95    sample              3.199             ms/op
ProxyBuildBenchMark.javassistBuild:javassistBuild·p0.99    sample              4.007             ms/op
ProxyBuildBenchMark.javassistBuild:javassistBuild·p0.999   sample           1221.785             ms/op
ProxyBuildBenchMark.javassistBuild:javassistBuild·p0.9999  sample           1260.388             ms/op
ProxyBuildBenchMark.javassistBuild:javassistBuild·p1.00    sample           1260.388             ms/op
ProxyBuildBenchMark.jdkBuild                               sample  131554     ≈ 10⁻⁴             ms/op
ProxyBuildBenchMark.jdkBuild:jdkBuild·p0.00                sample             ≈ 10⁻⁴             ms/op
ProxyBuildBenchMark.jdkBuild:jdkBuild·p0.50                sample             ≈ 10⁻⁴             ms/op
ProxyBuildBenchMark.jdkBuild:jdkBuild·p0.90                sample             ≈ 10⁻⁴             ms/op
ProxyBuildBenchMark.jdkBuild:jdkBuild·p0.95                sample             ≈ 10⁻⁴             ms/op
ProxyBuildBenchMark.jdkBuild:jdkBuild·p0.99                sample             ≈ 10⁻⁴             ms/op
ProxyBuildBenchMark.jdkBuild:jdkBuild·p0.999               sample              0.016             ms/op
ProxyBuildBenchMark.jdkBuild:jdkBuild·p0.9999              sample              0.027             ms/op
ProxyBuildBenchMark.jdkBuild:jdkBuild·p1.00                sample              0.068             ms/op

Process finished with exit code 0

Performance about invoke a proxy:

Benchmark                                                       Mode     Cnt    Score    Error   Units
ProxyInvokeBenchMark.bytebuddyInvoke                           thrpt       5   36.909 ±  2.027  ops/us
ProxyInvokeBenchMark.javassistInvoke                           thrpt       5  118.576 ± 10.613  ops/us
ProxyInvokeBenchMark.jdkInvoke                                 thrpt       5   27.108 ± 33.290  ops/us
ProxyInvokeBenchMark.bytebuddyInvoke                            avgt       5    0.029 ±  0.003   us/op
ProxyInvokeBenchMark.javassistInvoke                            avgt       5    0.009 ±  0.001   us/op
ProxyInvokeBenchMark.jdkInvoke                                  avgt       5    0.038 ±  0.038   us/op
ProxyInvokeBenchMark.bytebuddyInvoke                          sample  146526    0.088 ±  0.020   us/op
ProxyInvokeBenchMark.bytebuddyInvoke:bytebuddyInvoke·p0.00    sample            0.027            us/op
ProxyInvokeBenchMark.bytebuddyInvoke:bytebuddyInvoke·p0.50    sample            0.058            us/op
ProxyInvokeBenchMark.bytebuddyInvoke:bytebuddyInvoke·p0.90    sample            0.065            us/op
ProxyInvokeBenchMark.bytebuddyInvoke:bytebuddyInvoke·p0.95    sample            0.082            us/op
ProxyInvokeBenchMark.bytebuddyInvoke:bytebuddyInvoke·p0.99    sample            0.145            us/op
ProxyInvokeBenchMark.bytebuddyInvoke:bytebuddyInvoke·p0.999   sample            7.557            us/op
ProxyInvokeBenchMark.bytebuddyInvoke:bytebuddyInvoke·p0.9999  sample           26.596            us/op
ProxyInvokeBenchMark.bytebuddyInvoke:bytebuddyInvoke·p1.00    sample          871.424            us/op
ProxyInvokeBenchMark.javassistInvoke                          sample  188713    0.057 ±  0.004   us/op
ProxyInvokeBenchMark.javassistInvoke:javassistInvoke·p0.00    sample            0.035            us/op
ProxyInvokeBenchMark.javassistInvoke:javassistInvoke·p0.50    sample            0.042            us/op
ProxyInvokeBenchMark.javassistInvoke:javassistInvoke·p0.90    sample            0.044            us/op
ProxyInvokeBenchMark.javassistInvoke:javassistInvoke·p0.95    sample            0.051            us/op
ProxyInvokeBenchMark.javassistInvoke:javassistInvoke·p0.99    sample            0.098            us/op
ProxyInvokeBenchMark.javassistInvoke:javassistInvoke·p0.999   sample            1.265            us/op
ProxyInvokeBenchMark.javassistInvoke:javassistInvoke·p0.9999  sample           20.673            us/op
ProxyInvokeBenchMark.javassistInvoke:javassistInvoke·p1.00    sample           36.352            us/op
ProxyInvokeBenchMark.jdkInvoke                                sample  134879    0.100 ±  0.007   us/op
ProxyInvokeBenchMark.jdkInvoke:jdkInvoke·p0.00                sample            0.031            us/op
ProxyInvokeBenchMark.jdkInvoke:jdkInvoke·p0.50                sample            0.064            us/op
ProxyInvokeBenchMark.jdkInvoke:jdkInvoke·p0.90                sample            0.076            us/op
ProxyInvokeBenchMark.jdkInvoke:jdkInvoke·p0.95                sample            0.099            us/op
ProxyInvokeBenchMark.jdkInvoke:jdkInvoke·p0.99                sample            0.165            us/op
ProxyInvokeBenchMark.jdkInvoke:jdkInvoke·p0.999               sample           12.269            us/op
ProxyInvokeBenchMark.jdkInvoke:jdkInvoke·p0.9999              sample           31.267            us/op
ProxyInvokeBenchMark.jdkInvoke:jdkInvoke·p1.00                sample           59.456            us/op
nobodyiam commented 1 year ago

Looks like bytebuddy and jdk is better than javassist?

OrezzerO commented 1 year ago

Looks like bytebuddy and jdk is better than javassist?

Javassist has higher performance when invoking a proxy. However, in rpc situation (usually less than 5000 qps), the different between javassist and jdk proxy is very small.

stale[bot] commented 1 year ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.