2024-09-23 16:01:31 +08:00

239 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 <br>(bytes) | Topic num | Avg Latency<br> (us) | Max Latency <br>(us) | Loss Rate<br> (%) | Avg CPU Usage<br> (%) |
| --- | ------------ | :------------------: | :-------: | :------------------: | :------------------: | :---------------: | :-------------------: |
| 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 <br>(bytes) | Topic num | Avg Latency<br> (us) | Max Latency <br>(us) | QPS | Error Rate<br> (%) | Avg CPU Usage<br> (%) |
| --- | ------------ | :------------------: | :-------: | :------------------: | :------------------: | :------: | :----------------: | :-------------------: |
| 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 <br>(bytes) | Topic num | Avg Latency<br> (us) | Max Latency <br>(us) | Error Rate<br> (%) | Avg CPU Usage<br> (%) |
| --- | ------------ | :------------------: | :-------: | :------------------: | :------------------: | :----------------: | :-------------------: |
| 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 <br>(bytes) | Topic num | Avg Latency<br> (us) | Max Latency <br>(us) | Loss Rate<br> (%) |
| --- | ------------ | :------------------: | :-------: | :------------------: | :------------------: | :---------------: |
| 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 <br>(bytes) | Topic num | Avg Latency<br> (us) | Max Latency <br>(us) | QPS | Error Rate<br> (%) |
| --- | ------------ | :------------------: | :-------: | :------------------: | :------------------: | :-----: | :----------------: |
| 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 <br>(bytes) | Topic num | Avg Latency<br> (us) | Max Latency <br>(us) | Error Rate<br> (%) |
| --- | ------------ | :------------------: | :-------: | :------------------: | :------------------: | :----------------: |
| 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 |