跳转到内容

性能测试报告

rtp2httpdmsd_liteudpxytvgate 四款组播转单播程序性能对比。

测试环境

  • 平台: Ubuntu 24.04 on Apple M3 Max (Parallels Desktop 虚拟机)
  • 架构: aarch64 (所有程序均为本机编译的原生 arm64 二进制文件)
  • 内核: Linux 6.8.0-90-generic
  • 单项测试时长: 10 秒
  • 测量方法:
    • CPU: 使用 top -b -n 2 进行采样
    • 内存: 从 /proc/[pid]/smaps_rollup 读取 USS (Unique Set Size)
    • 如果存在 fork 后的子进程,所有父子进程的 CPU、内存分别求和作为总结果
  • 测试版本:
    • rtp2httpd: v3.8.3
    • msd_lite: commit 79a6c62 (2025-05-02)
    • udpxy: commit 56fc563 (2026-01-26)
    • tvgate: v2.1.8

测试场景

测试描述
多流测试8 个客户端,每个请求不同的组播地址,单流约 40 Mbps(模拟 4K IPTV 码率)
单流测试8 个客户端,全部请求相同的组播地址,单流约 40 Mbps
高带宽测试1 个客户端,单流约 400 Mbps

测试结果汇总

CPU 使用率 (%)

测试场景rtp2httpdmsd_liteudpxytvgate
多流 (8个不同地址)🏆 17.00%25.80%106.00%331.00%
单流 (8个相同地址)🏆 14.00%14.20%85.00%51.45%
高带宽 (400 Mbps)🏆 26.73%39.50%30.85%89.53%

内存使用 (MB)

测试场景rtp2httpdmsd_liteudpxytvgate
多流 (8个不同地址)🏆 4.5010.2512.53182.00
单流 (8个相同地址)4.88🏆 2.6212.5333.25
高带宽 (400 Mbps)3.88🏆 2.623.2147.38

详细测试结果

测试一:多流场景 (8个客户端,不同地址,约 40 Mbps)

每个客户端请求不同的组播地址 (239.81.0.1-8),测试服务器处理多个独立流的能力。

指标rtp2httpdmsd_liteudpxytvgate
CPU 平均🏆 17.00%25.80%106.00%331.00%
CPU 峰值🏆 18.00%30.00%116.00%332.00%
内存平均🏆 4.50 MB10.25 MB12.53 MB182.00 MB

测试二:单流场景 (8个客户端,相同地址,约 40 Mbps)

8个客户端全部请求相同的组播地址,测试服务器的组播复用效率。

指标rtp2httpdmsd_liteudpxytvgate
CPU 平均🏆 14.00%14.20%85.00%51.45%
CPU 峰值18.00%🏆 15.00%108.00%52.90%
内存平均4.88 MB🏆 2.62 MB12.53 MB33.25 MB

测试三:高带宽场景 (1个客户端,约 400 Mbps)

单客户端接收高带宽流 (50倍速回放 ≈ 400 Mbps)。

指标rtp2httpdmsd_liteudpxytvgate
CPU 平均🏆 26.73%39.50%30.85%89.53%
CPU 峰值🏆 29.40%40.00%46.00%96.00%
内存平均3.88 MB🏆 2.62 MB3.21 MB47.38 MB

测试结论

rtp2httpd 在基准测试中展现出优异的综合性能:

  • CPU 效率最高:在所有三个测试场景中均取得最低 CPU 使用率,多流场景下仅为 msd_lite 的 66%、udpxy 的 16%、tvgate 的 5%
  • 多流处理能力突出:同时处理 8 个独立 4K 组播流时,CPU 和内存占用均为最低,适合多频道 IPTV 网关场景
  • 高带宽场景表现稳定:400 Mbps 高码率下 CPU 占用仅 27%,留有充足的性能余量
  • 内存占用合理:约 4 MB 的内存占用(全默认参数下),在各场景下保持稳定,适合资源受限的嵌入式设备

相比 udpxy 的 fork-per-client 模型,rtp2httpd 采用更高效的事件驱动架构,在高并发场景下优势明显。相比 msd_lite,rtp2httpd 在 CPU 效率上更胜一筹,尤其在多流并发场景下差距显著。

运行基准测试

详见 tools/README.md 了解测试工具和方法。

快速运行:

bash
cd tools
./benchmark.sh

测试结果保存至 benchmark_results_YYYYMMDD_HHMMSS.txt

基于 GPL-2.0 许可证发布