# AimRT 性能测试 ## 序言 AimRT 的通信层由插件实现,官方支持 iceoryx、ROS2、Zenoh、Http、Grpc、Mqtt 等通信插件,覆盖常见的端、云通信场景。这些插件可提供发布-订阅(Channel)和请求-响应(Rpc)两种常见的通信模式以实现本机和跨机的进程间通信。 本文档对于 AimRT 官方提供的各个核心组件进行了性能上的测试。请注意,测试结果受测试平台、网络等外部因素影响,仅用于展示相对性能。 ## 测试条目 - 单机性能测试 - 日志性能测试 - Channel 后端性能测试 - Rpc 后端性能测试 - 多机性能测试 - Channel 后端性能测试 - Rpc后端性能测试 ## 测试环境 | 架构 | 操作系统 | 系统架构 | CPU | | :---: | :-------: | :------: | :-----------------------------------------------: | | 主机1 | GNU/Linux | x86_64 | 13th Gen Intel(R) Core(TM) i5-1350P - CPU(s):16 | | 主机2 | GNU/Linux | x86_64 | 13th Gen Intel(R) Core(TM) i5-1350P - CPU(s):16 | ## 测试结果 ### 单机性能测试 #### Logger 性能测试 - 测试条目: - 测试环境:主机1·x86 - 测试目的:日志打印性能测试 (平均时延 VS 日志尺寸) - 测试结果: | Log Data Size (bytes) | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8192 | | --------------------- | --- | --- | --- | --- | --- | ---- | ---- | ---- | ---- | | **Avg Latency(ns)** | 235 | 735 | 393 | 568 | 819 | 839 | 4352 | 4407 | 4362 | #### Channel 后端性能测试 - 测试条目1: - 测试环境:主机1·x86 (3核) - 测试目的:单机跨进程 Channel 后端通信测试(平均时延 VS 包尺寸) - 测试配置:channel_frequency=1 kHz, topic_number=1 - 测试结果: ![X86_Channel_Average_Latency_vs_Package_Size](./pic/X86_Channel_Average_Latency_vs_Package_Size.png) - 测试条目2: - 测试环境:主机1·x86 (3核) - 测试目的:单机跨进程 Channel 后端通信测试(平均时延 VS 话题数) - 测试配置:channel_frequency=1 kHz, pkg_size=1 k bytes - 测试结果: ![X86_Channel_Average_Latency_vs_Package_Size](./pic/X86_Channel_Average_Latency_vs_Topic_Number.png) - 汇总: | ID | Backend Type | Pkg Size
(bytes) | Topic num | Avg Latency
(us) | Max Latency
(us) | Loss Rate
(%) | Avg CPU Usage
(%) | | --- | ------------ | :------------------: | :-------: | :------------------: | :------------------: | :---------------: | :-------------------: | | 1 | iceoryx | 512 | 1 | 33.78 | 556.791 | 0 | 0.8/0.1 | | 2 | ros2 | 512 | 1 | 78.294 | 601.76 | 0 | 3.1/1.2 | | 3 | zenoh | 512 | 1 | 86.67 | 3479.172 | 0 | 0.9/0.3 | | 4 | iceoryx | 2048 | 1 | 33.755 | 368.843 | 0 | 0.9/0.3 | | 5 | ros2 | 2048 | 1 | 78.294 | 601.76 | 0 | 3.5/3.3 | | 6 | zenoh | 2048 | 1 | 89.812 | 2265.741 | 0 | 1.3/1.4 | | 7 | iceoryx | 8192 | 1 | 35.327 | 372.595 | 0 | 1.0/0.4 | | 8 | ros2 | 8192 | 1 | 91.106 | 898.042 | 0 | 3.6/4.2 | | 9 | zenoh | 8192 | 1 | 90.438 | 1222.726 | 0 | 2.0 /1.5 | | 10 | iceoryx | 1024 | 1 | 33.108 | 325.33 | 0 | 0.9 /0.8 | | 11 | ros2 | 1024 | 1 | 83.337 | 1223.164 | 0 | 3.4/3.2 | | 12 | zenoh | 1024 | 1 | 88.695 | 1208.31 | 0 | 1.7/1.4 | | 13 | iceoryx | 1024 | 4 | 23.417 | 458.296 | 0 | 1.5/1.5 | | 14 | ros2 | 1024 | 4 | 89.216 | 1965.28 | 0 | 4.4/ 11.7 | | 15 | zenoh | 1024 | 4 | 6243.743 | 12750.598 | 0 | 2.5/1.6 | | 16 | iceoryx | 1024 | 8 | 19.884 | 320.847 | 0 | 2.8/2.1 | | 17 | ros2 | 1024 | 8 | 70.075 | 3913.944 | 0 | 7.5/13.6 | | 18 | zenoh | 1024 | 8 | 3237.104 | 6913.596 | 0 | 3.0 /1.8 | #### Rpc 后端性能测试 - 测试条目1: - 测试环境:主机 1·x86 (3核) - 测试目的:单机跨进程 Rpc 后端通信测试(平均时延 VS 数据包尺寸) - 测试配置:paraller_number=1 - 测试结果: ![X86_Channel_Average_Latency_vs_Package_Size](./pic/X86_Rpc_Average_Latency_vs_Package_Size.png) - 测试条目2: - 测试环境:主机1·x86 (3核) - 测试目的:单机跨进程Rpc后端通信测试(QPS VS 数据包尺寸) - 测试配置: paraller_number=1 - 测试结果: ![X86_Channel_Average_Latency_vs_Package_Size](./pic/X86_Rpc_QPS_vs_Package_Size.png) - 测试条目3: - 测试环境:主机1·x86 (3核) - 测试目的:单机跨进程 Rpc 后端通信测试(平均时延 VS 并行数) - 测试配置:Rpc_frequency=1 kHz, pkg_size=1 k bytes - 测试结果: ![X86_Channel_Average_Latency_vs_Package_Size](./pic/X86_Rpc_Average_Latency_vs_Parallel_Number.png) - 汇总: **压测模式** | ID | Backend Type | Pkg Size
(bytes) | Topic num | Avg Latency
(us) | Max Latency
(us) | QPS | Error Rate
(%) | Avg CPU Usage
(%) | | --- | ------------ | :------------------: | :-------: | :------------------: | :------------------: | :------: | :----------------: | :-------------------: | | 1 | grpc | 512 | 1 | 102.385 | 1015.132 | 5668.934 | 0 | 11.2/6.6 | | 2 | http | 512 | 1 | 137.783 | 646.192 | 7032.348 | 0 | 33.9/6.9 | | 3 | ros2 | 512 | 1 | 710.772 | 787.366 | 784.190 | 0 | 23.1/4.1 | | 4 | mqtt | 512 | 1 | 227.804 | 99936.432 | 4295.532 | 0 | 13.4/2.3 | | 5 | grpc | 2048 | 1 | 172.007 | 846.916 | 5662.514 | 0 | 21.4/4.4 | | 6 | http | 2048 | 1 | 137.435 | 620.138 | 7062.146 | 0 | 47.5/14.8 | | 7 | ros2 | 2048 | 1 | 72.425 | 687.575 | 783.330 | 0 | 28.4/7.7 | | 8 | mqtt | 2048 | 1 | 243.326 | 100343.387 | 4022.526 | 0 | 18.6/6.1 | **固定频率模式** | ID | Backend Type | Pkg Size
(bytes) | Topic num | Avg Latency
(us) | Max Latency
(us) | Error Rate
(%) | Avg CPU Usage
(%) | | --- | ------------ | :------------------: | :-------: | :------------------: | :------------------: | :----------------: | :-------------------: | | 1 | grpc | 1024 | 1 | 274.102 | 1135.26 | 0 | 28.7/7.3 | | 2 | http | 1024 | 1 | 253.347 | 916.773 | 0 | 44.3/16.8 | | 3 | ros2 | 1024 | 1 | 93.259 | 1081.053 | 0 | 27.3/6.2 | | 4 | mqtt | 1024 | 1 | 399.444 | 100581.09 | 0 | 17.5/11.1 | | 5 | grpc | 1024 | 4 | 326.857 | 3131.102 | 0 | 19.8/12.6 | | 6 | http | 1024 | 4 | 272.115 | 1713.79 | 0 | 46.3/26.3 | | 7 | ros2 | 1024 | 4 | 112.685 | 2050.94 | 0 | 40.6/19.6 | | 8 | mqtt | 1024 | 4 | 681.431 | 99994.365 | 0 | 26.0/14.0 | | 9 | grpc | 1024 | 8 | 830.776 | 4318.728 | 0 | 31.1/16.6 | | 10 | http | 1024 | 8 | 215.188 | 3961.397 | 0 | 51.2/29.9 | | 11 | ros2 | 1024 | 8 | 149.772 | 3380.315 | 0 | 41.1/20.2 | | 12 | mqtt | 1024 | 8 | 755.568 | 98599.196 | 0 | 28.8/15.2 | ### 多机性能测试 #### 主机1 to 主机2 Channel 后端性能测试 - 测试条目1: - 测试环境:主机1·x86 (3核), 主机2·x86 (3核) - 测试目的:跨机跨进程 Channel 后端通信测试(平均时延 VS 包尺寸) - 测试配置:channel_frequency=1 kHz, topic_number=1 - 测试结果: ![X86_Channel_Average_Latency_vs_Package_Size](./pic/X86_to_X86_Channel_Average_Latency_vs_Package_Size.png) - 测试条目2: - 测试环境:主机1·x86 (3核), 主机2·x86 (3核) - 测试目的:跨机跨进程 Channel 后端通信测试(平均时延 VS 话题数) - 测试配置:channel_frequency=1 kHz, pkg_size=1 k bytes - 测试结果: ![X86_Channel_Average_Latency_vs_Package_Size](./pic/X86_to_X86_Channel_Average_Latency_vs_Topic_Number.png) - 汇总: | ID | Backend Type | Pkg Size
(bytes) | Topic num | Avg Latency
(us) | Max Latency
(us) | Loss Rate
(%) | | --- | ------------ | :------------------: | :-------: | :------------------: | :------------------: | :---------------: | | 1 | mqtt | 512 | 1 | 9436.628 | 1922348.666 | 0 | | 2 | zenoh | 512 | 1 | 9749.743 | 225513.208 | 0 | | 3 | mqtt | 2048 | 1 | 21715.483 | 87612.922 | 0 | | 4 | zenoh | 2048 | 1 | 15313.238 | 130844.909 | 0 | | 5 | mqtt | 8192 | 1 | 1728639.372 | 4060503.312 | 0 | | 6 | zenoh | 8192 | 1 | 67700.703 | 84407.91 | 0 | | 7 | mqtt | 1024 | 1 | 30003.15 | 143020.411 | 0 | | 8 | zenoh | 1024 | 1 | 12590.826 | 78070.239 | 0 | | 9 | mqtt | 1024 | 4 | 10815.251 | 109914.215 | 0 | | 10 | zenoh | 1024 | 4 | 13537.918 | 98343.269 | 0 | | 11 | mqtt | 1024 | 8 | 2281671.772 | 4289304.104 | 0 | | 12 | zenoh | 1024 | 8 | 262563.641 | 449324.47 | 0 | #### 主机1 to 主机2 Rpc 后端性能测试 - 测试条目1: - 测试环境:主机1·x86 (3核), 主机2·x86 (3核) - 测试目的:x86_to_X86 跨机跨进程 Rpc 后端通信测试(平均时延 VS 数据包尺寸) - 测试配置:paraller_number=1 - 测试结果: ![X86_Channel_Average_Latency_vs_Package_Size](./pic/X86_to_X86_Rpc_Average_Latency_vs_Package_Size.png) - 测试条目2: - 测试环境:主机1·x86 (3核), 主机2·x86 (3核) - 测试目的:x86_to_X86 跨机跨进程 Rpc 后端通信测试(QPS VS 数据包尺寸) - 测试配置:paraller_number=1 - 测试结果: ![X86_Channel_Average_Latency_vs_Package_Size](./pic/X86_to_X86_Rpc_QPS_vs_Package_Size.png) - 测试条目3: - 测试环境:主机1·x86 (3核), 主机2·x86 (3核) - 测试目的:x86_to_X86 跨机跨进程 Rpc 后端通信测试(平均时延 VS 并行数) - 测试配置:Rpc_frequency=1 kHz, pkg_size=1 k bytes - 测试结果: ![X86_Channel_Average_Latency_vs_Package_Size](./pic/X86_to_X86_Rpc_Average_Latency_vs_Parallel_Number.png) - 汇总: **压测模式** | ID | Backend Type | Pkg Size
(bytes) | Topic num | Avg Latency
(us) | Max Latency
(us) | QPS | Error Rate
(%) | | --- | ------------ | :------------------: | :-------: | :------------------: | :------------------: | :-----: | :----------------: | | 1 | grpc | 512 | 1 | 4924.824 | 322766.91 | 202.741 | 0 | | 2 | http | 512 | 1 | 6284.018 | 324016.359 | 158.825 | 0 | | 3 | mqtt | 512 | 1 | 4702.392 | 320198.678 | 212.116 | 0 | | 4 | grpc | 2048 | 1 | 5704.31 | 403065.412 | 175.082 | 0 | | 5 | http | 2048 | 1 | 5830.839 | 222680.914 | 171.156 | 0 | | 6 | mqtt | 2048 | 1 | 4726.14 | 321514.163 | 211.041 | 0 | | 7 | grpc | 8192 | 1 | 7120.05 | 315765.656 | 140.295 | 0 | | 8 | http | 8192 | 1 | 8134.13 | 335106.68 | 122.756 | 0 | | 9 | mqtt | 8192 | 1 | 5684.013 | 165831.057 | 175.530 | 0 | **固定频率模式** | ID | Backend Type | Pkg Size
(bytes) | Topic num | Avg Latency
(us) | Max Latency
(us) | Error Rate
(%) | | --- | ------------ | :------------------: | :-------: | :------------------: | :------------------: | :----------------: | | 1 | grpc | 1024 | 1 | 3800.001 | 83298.271 | 0 | | 2 | http | 1024 | 1 | 4906.788 | 238306.281 | 0 | | 3 | mqtt | 1024 | 1 | 3979.662 | 117279.111 | 0 | | 4 | grpc | 1024 | 4 | 6329.525 | 315825.548 | 0 | | 5 | http | 1024 | 4 | 9002.289 | 614524.388 | 0 | | 6 | mqtt | 1024 | 4 | 12371.313 | 327013.301 | 0 | | 7 | grpc | 1024 | 8 | 7574.52 | 881297.081 | 0 | | 8 | http | 1024 | 8 | 8278.314 | 904195.888 | 0 | | 9 | mqtt | 1024 | 8 | 11336.935 | 324605.52 | 0 |