mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-27 07:27:37 +00:00
add reed-solomon-simd banchmark
This commit is contained in:
Executable
+263
@@ -0,0 +1,263 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Reed-Solomon 实现性能比较脚本
|
||||
#
|
||||
# 这个脚本将运行不同的基准测试来比较混合模式和纯Erasure模式的性能
|
||||
#
|
||||
# 使用方法:
|
||||
# ./run_benchmarks.sh [quick|full|comparison]
|
||||
#
|
||||
# quick - 快速测试主要场景
|
||||
# full - 完整基准测试套件
|
||||
# comparison - 专门对比两种实现模式
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 输出带颜色的信息
|
||||
print_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
print_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# 检查是否安装了必要工具
|
||||
check_requirements() {
|
||||
print_info "检查系统要求..."
|
||||
|
||||
if ! command -v cargo &> /dev/null; then
|
||||
print_error "cargo 未安装,请先安装 Rust 工具链"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查是否安装了 criterion
|
||||
if ! grep -q "criterion" Cargo.toml; then
|
||||
print_error "Cargo.toml 中未找到 criterion 依赖"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
print_success "系统要求检查通过"
|
||||
}
|
||||
|
||||
# 清理之前的测试结果
|
||||
cleanup() {
|
||||
print_info "清理之前的测试结果..."
|
||||
rm -rf target/criterion
|
||||
print_success "清理完成"
|
||||
}
|
||||
|
||||
# 运行纯 Erasure 模式基准测试
|
||||
run_erasure_benchmark() {
|
||||
print_info "🏛️ 开始运行纯 Erasure 模式基准测试..."
|
||||
echo "================================================"
|
||||
|
||||
cargo bench --bench comparison_benchmark \
|
||||
--features reed-solomon-erasure \
|
||||
-- --save-baseline erasure_baseline
|
||||
|
||||
print_success "纯 Erasure 模式基准测试完成"
|
||||
}
|
||||
|
||||
# 运行混合模式基准测试(默认)
|
||||
run_hybrid_benchmark() {
|
||||
print_info "🎯 开始运行混合模式基准测试(默认)..."
|
||||
echo "================================================"
|
||||
|
||||
cargo bench --bench comparison_benchmark \
|
||||
-- --save-baseline hybrid_baseline
|
||||
|
||||
print_success "混合模式基准测试完成"
|
||||
}
|
||||
|
||||
# 运行完整的基准测试套件
|
||||
run_full_benchmark() {
|
||||
print_info "🚀 开始运行完整基准测试套件..."
|
||||
echo "================================================"
|
||||
|
||||
# 运行详细的基准测试(使用默认混合模式)
|
||||
cargo bench --bench erasure_benchmark
|
||||
|
||||
print_success "完整基准测试套件完成"
|
||||
}
|
||||
|
||||
# 运行性能对比测试
|
||||
run_comparison_benchmark() {
|
||||
print_info "📊 开始运行性能对比测试..."
|
||||
echo "================================================"
|
||||
|
||||
print_info "步骤 1: 测试纯 Erasure 模式..."
|
||||
cargo bench --bench comparison_benchmark \
|
||||
--features reed-solomon-erasure \
|
||||
-- --save-baseline erasure_baseline
|
||||
|
||||
print_info "步骤 2: 测试混合模式并与 Erasure 模式对比..."
|
||||
cargo bench --bench comparison_benchmark \
|
||||
-- --baseline erasure_baseline
|
||||
|
||||
print_success "性能对比测试完成"
|
||||
}
|
||||
|
||||
# 生成比较报告
|
||||
generate_comparison_report() {
|
||||
print_info "📊 生成性能比较报告..."
|
||||
|
||||
if [ -d "target/criterion" ]; then
|
||||
print_info "基准测试结果已保存到 target/criterion/ 目录"
|
||||
print_info "你可以打开 target/criterion/report/index.html 查看详细报告"
|
||||
|
||||
# 如果有 python 环境,可以启动简单的 HTTP 服务器查看报告
|
||||
if command -v python3 &> /dev/null; then
|
||||
print_info "你可以运行以下命令启动本地服务器查看报告:"
|
||||
echo " cd target/criterion && python3 -m http.server 8080"
|
||||
echo " 然后在浏览器中访问 http://localhost:8080/report/index.html"
|
||||
fi
|
||||
else
|
||||
print_warning "未找到基准测试结果目录"
|
||||
fi
|
||||
}
|
||||
|
||||
# 快速测试模式
|
||||
run_quick_test() {
|
||||
print_info "🏃 运行快速性能测试..."
|
||||
|
||||
print_info "测试纯 Erasure 模式..."
|
||||
cargo bench --bench comparison_benchmark \
|
||||
--features reed-solomon-erasure \
|
||||
-- encode_comparison --quick
|
||||
|
||||
print_info "测试混合模式(默认)..."
|
||||
cargo bench --bench comparison_benchmark \
|
||||
-- encode_comparison --quick
|
||||
|
||||
print_success "快速测试完成"
|
||||
}
|
||||
|
||||
# 显示帮助信息
|
||||
show_help() {
|
||||
echo "Reed-Solomon 性能基准测试脚本"
|
||||
echo ""
|
||||
echo "实现模式:"
|
||||
echo " 🎯 混合模式(默认) - SIMD + Erasure 智能回退,推荐使用"
|
||||
echo " 🏛️ 纯 Erasure 模式 - 稳定兼容的 reed-solomon-erasure 实现"
|
||||
echo ""
|
||||
echo "使用方法:"
|
||||
echo " $0 [command]"
|
||||
echo ""
|
||||
echo "命令:"
|
||||
echo " quick 运行快速性能测试"
|
||||
echo " full 运行完整基准测试套件(混合模式)"
|
||||
echo " comparison 运行详细的实现模式对比测试"
|
||||
echo " erasure 只测试纯 Erasure 模式"
|
||||
echo " hybrid 只测试混合模式(默认行为)"
|
||||
echo " clean 清理测试结果"
|
||||
echo " help 显示此帮助信息"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 quick # 快速测试两种模式"
|
||||
echo " $0 comparison # 详细对比测试"
|
||||
echo " $0 full # 完整测试套件(混合模式)"
|
||||
echo " $0 hybrid # 只测试混合模式"
|
||||
echo " $0 erasure # 只测试纯 Erasure 模式"
|
||||
echo ""
|
||||
echo "模式说明:"
|
||||
echo " 混合模式: 大分片(≥512B)使用SIMD优化,小分片自动回退到Erasure"
|
||||
echo " Erasure模式: 所有情况都使用reed-solomon-erasure实现"
|
||||
}
|
||||
|
||||
# 显示测试配置信息
|
||||
show_test_info() {
|
||||
print_info "📋 测试配置信息:"
|
||||
echo " - 当前目录: $(pwd)"
|
||||
echo " - Rust 版本: $(rustc --version)"
|
||||
echo " - Cargo 版本: $(cargo --version)"
|
||||
echo " - CPU 架构: $(uname -m)"
|
||||
echo " - 操作系统: $(uname -s)"
|
||||
|
||||
# 检查 CPU 特性
|
||||
if [ -f "/proc/cpuinfo" ]; then
|
||||
echo " - CPU 型号: $(grep 'model name' /proc/cpuinfo | head -1 | cut -d: -f2 | xargs)"
|
||||
if grep -q "avx2" /proc/cpuinfo; then
|
||||
echo " - SIMD 支持: AVX2 ✅ (混合模式将利用SIMD优化)"
|
||||
elif grep -q "sse4" /proc/cpuinfo; then
|
||||
echo " - SIMD 支持: SSE4 ✅ (混合模式将利用SIMD优化)"
|
||||
else
|
||||
echo " - SIMD 支持: 未检测到高级 SIMD 特性 (混合模式将主要使用Erasure)"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo " - 默认模式: 混合模式 (SIMD + Erasure 智能回退)"
|
||||
echo " - 回退阈值: 512字节分片大小"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
print_info "🧪 Reed-Solomon 实现性能基准测试"
|
||||
echo "================================================"
|
||||
|
||||
check_requirements
|
||||
show_test_info
|
||||
|
||||
case "${1:-help}" in
|
||||
"quick")
|
||||
run_quick_test
|
||||
generate_comparison_report
|
||||
;;
|
||||
"full")
|
||||
cleanup
|
||||
run_full_benchmark
|
||||
generate_comparison_report
|
||||
;;
|
||||
"comparison")
|
||||
cleanup
|
||||
run_comparison_benchmark
|
||||
generate_comparison_report
|
||||
;;
|
||||
"erasure")
|
||||
cleanup
|
||||
run_erasure_benchmark
|
||||
generate_comparison_report
|
||||
;;
|
||||
"hybrid")
|
||||
cleanup
|
||||
run_hybrid_benchmark
|
||||
generate_comparison_report
|
||||
;;
|
||||
"clean")
|
||||
cleanup
|
||||
;;
|
||||
"help"|"--help"|"-h")
|
||||
show_help
|
||||
;;
|
||||
*)
|
||||
print_error "未知命令: $1"
|
||||
echo ""
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
print_success "✨ 基准测试执行完成!"
|
||||
print_info "💡 提示: 推荐使用混合模式(默认),它能自动在SIMD和Erasure之间智能选择"
|
||||
}
|
||||
|
||||
# 如果直接运行此脚本,调用主函数
|
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
main "$@"
|
||||
fi
|
||||
Reference in New Issue
Block a user