Files
aitbc/.windsurf/skills/blockchain-operations/mining-optimize.sh
oib 9b9c5beb23 ```
chore: enhance .gitignore and remove obsolete documentation files

- Reorganize .gitignore with categorized sections for better maintainability
- Add comprehensive ignore patterns for Python, Node.js, databases, logs, and build artifacts
- Add project-specific ignore rules for coordinator, explorer, and deployment files
- Remove outdated documentation: BITCOIN-WALLET-SETUP.md, LOCAL_ASSETS_SUMMARY.md, README-CONTAINER-DEPLOYMENT.md, README-DOMAIN-DEPLOYMENT.md
```
2026-01-24 14:44:51 +01:00

297 lines
8.0 KiB
Bash
Executable File

#!/bin/bash
# AITBC GPU Mining Optimization Script
# Optimizes GPU settings for maximum mining efficiency
set -e
# Configuration
LOG_FILE="/var/log/aitbc/mining-optimize.log"
CONFIG_FILE="/etc/aitbc/mining.conf"
GPU_VENDOR="" # Will be auto-detected
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# Logging function
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a $LOG_FILE
}
# Detect GPU vendor
detect_gpu() {
echo -e "${BLUE}=== Detecting GPU ===${NC}"
if command -v nvidia-smi &> /dev/null; then
GPU_VENDOR="nvidia"
echo -e "${GREEN}${NC} NVIDIA GPU detected"
log "GPU vendor: NVIDIA"
elif command -v rocm-smi &> /dev/null; then
GPU_VENDOR="amd"
echo -e "${GREEN}${NC} AMD GPU detected"
log "GPU vendor: AMD"
elif lspci | grep -i vga &> /dev/null; then
echo -e "${YELLOW}${NC} GPU detected but vendor-specific tools not found"
log "GPU detected but vendor unknown"
GPU_VENDOR="unknown"
else
echo -e "${RED}${NC} No GPU detected"
log "No GPU detected - cannot optimize mining"
exit 1
fi
}
# Get GPU information
get_gpu_info() {
echo -e "\n${BLUE}=== GPU Information ===${NC}"
case $GPU_VENDOR in
"nvidia")
nvidia-smi --query-gpu=name,memory.total,temperature.gpu,utilization.gpu,power.draw --format=csv,noheader,nounits
;;
"amd")
rocm-smi --showproductname
rocm-smi --showmeminfo vram
rocm-smi --showtemp
;;
*)
echo "GPU info not available for vendor: $GPU_VENDOR"
;;
esac
}
# Optimize NVIDIA GPU
optimize_nvidia() {
echo -e "\n${BLUE}=== Optimizing NVIDIA GPU ===${NC}"
# Get current power limit
CURRENT_POWER=$(nvidia-smi --query-gpu=power.limit --format=csv,noheader,nounits | head -n1)
echo "Current power limit: ${CURRENT_POWER}W"
# Set optimal power limit (80% of max for efficiency)
MAX_POWER=$(nvidia-smi --query-gpu=power.max_limit --format=csv,noheader,nounits | head -n1)
OPTIMAL_POWER=$((MAX_POWER * 80 / 100))
echo "Setting power limit to ${OPTIMAL_POWER}W (80% of max)"
sudo nvidia-smi -pl $OPTIMAL_POWER
log "NVIDIA power limit set to ${OPTIMAL_POWER}W"
# Set performance mode
echo "Setting performance mode to maximum"
sudo nvidia-smi -ac 877,1215
log "NVIDIA performance mode set to maximum"
# Configure memory clock
echo "Optimizing memory clock"
sudo nvidia-smi -pm 1
log "NVIDIA persistence mode enabled"
# Create optimized mining config
cat > $CONFIG_FILE << EOF
[nvidia]
power_limit = $OPTIMAL_POWER
performance_mode = maximum
memory_clock = max
fan_speed = auto
temperature_limit = 85
EOF
echo -e "${GREEN}${NC} NVIDIA GPU optimized"
}
# Optimize AMD GPU
optimize_amd() {
echo -e "\n${BLUE}=== Optimizing AMD GPU ===${NC}"
# Set performance level
echo "Setting performance level to high"
sudo rocm-smi --setperflevel high
log "AMD performance level set to high"
# Set memory clock
echo "Optimizing memory clock"
sudo rocm-smi --setmclk 1
log "AMD memory clock optimized"
# Create optimized mining config
cat > $CONFIG_FILE << EOF
[amd]
performance_level = high
memory_clock = high
fan_speed = auto
temperature_limit = 85
EOF
echo -e "${GREEN}${NC} AMD GPU optimized"
}
# Monitor mining performance
monitor_mining() {
echo -e "\n${BLUE}=== Mining Performance Monitor ===${NC}"
# Check if miner is running
if ! pgrep -f "aitbc-miner" > /dev/null; then
echo -e "${YELLOW}${NC} Miner is not running"
return 1
fi
# Monitor for 30 seconds
echo "Monitoring mining performance for 30 seconds..."
for i in {1..6}; do
echo -e "\n--- Check $i/6 ---"
case $GPU_VENDOR in
"nvidia")
nvidia-smi --query-gpu=temperature.gpu,utilization.gpu,power.draw,fan.speed --format=csv,noheader,nounits
;;
"amd")
rocm-smi --showtemp --showutilization
;;
esac
# Get hash rate from miner API
if curl -s http://localhost:8081/api/status > /dev/null; then
HASHRATE=$(curl -s http://localhost:8081/api/status | jq -r '.hashrate')
echo "Hash rate: ${HASHRATE} H/s"
fi
sleep 5
done
}
# Tune fan curves
tune_fans() {
echo -e "\n${BLUE}=== Tuning Fan Curves ===${NC}"
case $GPU_VENDOR in
"nvidia")
# Set custom fan curve
echo "Setting custom fan curve for NVIDIA"
# This would use nvidia-settings or similar
echo "Target: 30% fan at 50°C, 60% at 70°C, 100% at 85°C"
log "NVIDIA fan curve configured"
;;
"amd")
echo "Setting fan control to auto for AMD"
# AMD cards usually handle this automatically
log "AMD fan control set to auto"
;;
esac
}
# Check mining profitability
check_profitability() {
echo -e "\n${BLUE}=== Profitability Analysis ===${NC}"
# Get current hash rate
if curl -s http://localhost:8081/api/status > /dev/null; then
HASHRATE=$(curl -s http://localhost:8081/api/status | jq -r '.hashrate')
POWER_USAGE=$(nvidia-smi --query-gpu=power.draw --format=csv,noheader,nounits | head -n1)
echo "Current hash rate: ${HASHRATE} H/s"
echo "Power usage: ${POWER_USAGE}W"
# Calculate efficiency
if [ "$HASHRATE" != "null" ] && [ -n "$POWER_USAGE" ]; then
EFFICIENCY=$(echo "scale=2; $HASHRATE / $POWER_USAGE" | bc)
echo "Efficiency: ${EFFICIENCY} H/W"
# Efficiency rating
if (( $(echo "$EFFICIENCY > 10" | bc -l) )); then
echo -e "${GREEN}${NC} Excellent efficiency"
elif (( $(echo "$EFFICIENCY > 5" | bc -l) )); then
echo -e "${YELLOW}${NC} Good efficiency"
else
echo -e "${RED}${NC} Poor efficiency - consider optimization"
fi
fi
else
echo "Miner API not accessible"
fi
}
# Generate optimization report
generate_report() {
echo -e "\n${BLUE}=== Optimization Report ===${NC}"
echo "GPU Vendor: $GPU_VENDOR"
echo "Configuration: $CONFIG_FILE"
echo "Optimization completed: $(date)"
# Current settings
echo -e "\nCurrent Settings:"
case $GPU_VENDOR in
"nvidia")
nvidia-smi --query-gpu=power.limit,temperature.gpu,utilization.gpu --format=csv,noheader,nounits
;;
"amd")
rocm-smi --showtemp --showutilization
;;
esac
log "Optimization report generated"
}
# Main execution
main() {
log "Starting mining optimization"
echo -e "${BLUE}AITBC GPU Mining Optimizer${NC}"
echo "==============================="
# Check root privileges
if [ "$EUID" -ne 0 ]; then
echo -e "${YELLOW}${NC} Some optimizations require sudo privileges"
fi
detect_gpu
get_gpu_info
# Perform optimization based on vendor
case $GPU_VENDOR in
"nvidia")
optimize_nvidia
;;
"amd")
optimize_amd
;;
*)
echo -e "${YELLOW}${NC} Cannot optimize unknown GPU vendor"
;;
esac
tune_fans
monitor_mining
check_profitability
generate_report
echo -e "\n${GREEN}Mining optimization completed!${NC}"
echo "Configuration saved to: $CONFIG_FILE"
echo "Log saved to: $LOG_FILE"
log "Mining optimization completed successfully"
}
# Parse command line arguments
case "${1:-optimize}" in
"optimize")
main
;;
"monitor")
detect_gpu
monitor_mining
;;
"report")
detect_gpu
generate_report
;;
*)
echo "Usage: $0 [optimize|monitor|report]"
exit 1
;;
esac