| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #!/bin/bash
- # 测试并发挖矿脚本
- # 用于验证多核CPU优化的实现
- set -e
- echo "=== Nockchain 并发挖矿测试 ==="
- # 检查构建是否完成
- if [ ! -f "target/release/nockchain" ]; then
- echo "错误: nockchain 二进制文件不存在,请先运行 'make build'"
- exit 1
- fi
- # 获取系统CPU核心数
- CPU_CORES=$(sysctl -n hw.ncpu 2>/dev/null || nproc 2>/dev/null || echo "4")
- echo "检测到 CPU 核心数: $CPU_CORES"
- # 测试不同的并发参数
- TEST_CASES=(
- "1:单线程挖矿"
- "2:双线程挖矿"
- "4:四线程挖矿"
- "$CPU_CORES:全核心挖矿"
- "$((CPU_CORES * 2)):超线程测试"
- )
- MINING_PUBKEY="31pK6dSu7PsQd6H8HKQo79iMXCvBTt4oDR12X7WbE4MsFLCa6YchVDP2B9Wu4rxGn5vNpsA5sppeJizi2UfS117iGERgr2eQELsQJYzChn52oVLTcHvd4sKUiK6GT4QrQG8S"
- # 创建测试目录
- TEST_DIR="test_mining_$(date +%Y%m%d_%H%M%S)"
- mkdir -p "$TEST_DIR"
- cd "$TEST_DIR"
- echo "测试目录: $(pwd)"
- for test_case in "${TEST_CASES[@]}"; do
- IFS=':' read -r threads description <<< "$test_case"
-
- echo ""
- echo "=== 测试: $description (线程数: $threads) ==="
-
- # 创建子目录
- test_subdir="test_${threads}_threads"
- mkdir -p "$test_subdir"
- cd "$test_subdir"
-
- # 设置日志级别以便看到详细信息
- export RUST_LOG="info,nockchain=debug"
- export RUST_BACKTRACE=1
-
- echo "开始挖矿测试,线程数: $threads"
- echo "如果在30秒内没有成功,将自动停止测试"
-
- # 启动挖矿节点,设置超时
- timeout 30s ../../target/release/nockchain \
- --npc-socket "nockchain_${threads}.sock" \
- --mining-pubkey "$MINING_PUBKEY" \
- --max-concurrent-mining-attempts "$threads" \
- --mine \
- --fakenet \
- --genesis-leader \
- --genesis-message "测试并发挖矿 - ${threads}线程" \
- 2>&1 | tee "mining_${threads}.log" &
-
- mining_pid=$!
-
- # 等待挖矿过程
- sleep 5
-
- # 检查进程是否还在运行
- if ps -p $mining_pid > /dev/null; then
- echo "挖矿进程正在运行 (PID: $mining_pid)"
-
- # 检查日志中是否有并发挖矿的迹象
- if grep -q "Starting mining attempt" "mining_${threads}.log"; then
- echo "✅ 成功: 检测到挖矿尝试开始"
- else
- echo "⚠️ 警告: 未检测到挖矿尝试"
- fi
-
- if grep -q "max concurrent attempts" "mining_${threads}.log"; then
- echo "✅ 成功: 检测到并发参数配置"
- else
- echo "⚠️ 警告: 未检测到并发参数配置"
- fi
-
- # 停止挖矿进程
- kill $mining_pid 2>/dev/null || true
- wait $mining_pid 2>/dev/null || true
- else
- echo "❌ 失败: 挖矿进程提前退出"
- fi
-
- # 分析日志
- echo "分析日志文件..."
- if [ -f "mining_${threads}.log" ]; then
- echo "日志行数: $(wc -l < mining_${threads}.log)"
-
- # 检查错误
- if grep -i "error\|panic\|failed" "mining_${threads}.log" | head -5; then
- echo "❌ 发现错误日志"
- else
- echo "✅ 未发现错误日志"
- fi
-
- # 检查性能指标
- if grep -o "active attempts: [0-9]*" "mining_${threads}.log" | tail -5; then
- echo "✅ 发现活跃挖矿尝试记录"
- fi
- fi
-
- cd ..
- echo "测试 $description 完成"
- done
- cd ..
- echo ""
- echo "=== 测试总结 ==="
- echo "所有测试已完成。检查 $TEST_DIR 目录中的日志文件以获取详细信息。"
- echo ""
- echo "要手动测试挖矿,请运行:"
- echo " ./target/release/nockchain \\"
- echo " --mining-pubkey $MINING_PUBKEY \\"
- echo " --max-concurrent-mining-attempts $CPU_CORES \\"
- echo " --mine --fakenet --genesis-leader"
- echo ""
- echo "多核挖矿优化测试完成!"
|