Files
markbase/scripts/ssh_benchmark.sh
Warren 7d229d0b62
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
P0: Add performance benchmark scripts
- webdav_benchmark.sh: PROPFIND, upload/download 1-100MB
- ssh_benchmark.sh: SCP, rsync upload/download, delta transfer
- Tests throughput for all file sizes

Ready for performance testing
2026-06-21 23:55:25 +08:00

154 lines
5.3 KiB
Bash
Executable File

#!/bin/bash
# SSH Performance Benchmark
# Tests: rsync, SCP, exec commands
set -e
SSH_HOST="127.0.0.1"
SSH_PORT="2024"
SSH_USER="demo"
SSH_PASS="demo123"
SSH_KEY="/Users/accusys/.ssh/id_rsa"
TEST_DIR="/tmp/ssh_benchmark"
REMOTE_DIR="/Users/accusys/momentry/var/sftpgo/data/demo/benchmark"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo "================================================"
echo "SSH Performance Benchmark"
echo "================================================"
echo ""
# Setup test directory
rm -rf "$TEST_DIR"
mkdir -p "$TEST_DIR"
cd "$TEST_DIR"
# Generate test files
echo "Generating test files..."
dd if=/dev/urandom of=file_1mb.bin bs=1M count=1 2>/dev/null
dd if=/dev/urandom of=file_10mb.bin bs=1M count=10 2>/dev/null
dd if=/dev/urandom of=file_50mb.bin bs=1M count=50 2>/dev/null
dd if=/dev/urandom of=file_100mb.bin bs=1M count=100 2>/dev/null
echo "${GREEN}Test files generated${NC}"
echo ""
# Setup SSH key auth (if needed)
# sshpass -p "$SSH_PASS" ssh-copy-id -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" 2>/dev/null || true
# Test 1: SCP upload 1MB
echo "=== Test 1: SCP upload 1MB ==="
START=$(date +%s.%N)
sshpass -p "$SSH_PASS" scp -P "$SSH_PORT" file_1mb.bin "$SSH_USER@$SSH_HOST:$REMOTE_DIR/file_1mb.bin"
END=$(date +%s.%N)
ELAPSED=$(echo "$END - $START" | bc)
THROUGHPUT=$(echo "scale=2; 1 / $ELAPSED" | bc)
echo "${GREEN}SCP upload 1MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}"
echo ""
# Test 2: SCP upload 10MB
echo "=== Test 2: SCP upload 10MB ==="
START=$(date +%s.%N)
sshpass -p "$SSH_PASS" scp -P "$SSH_PORT" file_10mb.bin "$SSH_USER@$SSH_HOST:$REMOTE_DIR/file_10mb.bin"
END=$(date +%s.%N)
ELAPSED=$(echo "$END - $START" | bc)
THROUGHPUT=$(echo "scale=2; 10 / $ELAPSED" | bc)
echo "${GREEN}SCP upload 10MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}"
echo ""
# Test 3: SCP download 10MB
echo "=== Test 3: SCP download 10MB ==="
START=$(date +%s.%N)
sshpass -p "$SSH_PASS" scp -P "$SSH_PORT" "$SSH_USER@$SSH_HOST:$REMOTE_DIR/file_10mb.bin" /tmp/scp_download_10mb.bin
END=$(date +%s.%N)
ELAPSED=$(echo "$END - $START" | bc)
THROUGHPUT=$(echo "scale=2; 10 / $ELAPSED" | bc)
echo "${GREEN}SCP download 10MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}"
echo ""
# Test 4: rsync upload 50MB
echo "=== Test 4: rsync upload 50MB ==="
START=$(date +%s.%N)
sshpass -p "$SSH_PASS" rsync -avz -e "ssh -p $SSH_PORT" file_50mb.bin "$SSH_USER@$SSH_HOST:$REMOTE_DIR/"
END=$(date +%s.%N)
ELAPSED=$(echo "$END - $START" | bc)
THROUGHPUT=$(echo "scale=2; 50 / $ELAPSED" | bc)
echo "${GREEN}rsync upload 50MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}"
echo ""
# Test 5: rsync download 50MB
echo "=== Test 5: rsync download 50MB ==="
START=$(date +%s.%N)
sshpass -p "$SSH_PASS" rsync -avz -e "ssh -p $SSH_PORT" "$SSH_USER@$SSH_HOST:$REMOTE_DIR/file_50mb.bin" /tmp/
END=$(date +%s.%N)
ELAPSED=$(echo "$END - $START" | bc)
THROUGHPUT=$(echo "scale=2; 50 / $ELAPSED" | bc)
echo "${GREEN}rsync download 50MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}"
echo ""
# Test 6: rsync upload 100MB
echo "=== Test 6: rsync upload 100MB ==="
START=$(date +%s.%N)
sshpass -p "$SSH_PASS" rsync -avz -e "ssh -p $SSH_PORT" file_100mb.bin "$SSH_USER@$SSH_HOST:$REMOTE_DIR/"
END=$(date +%s.%N)
ELAPSED=$(echo "$END - $START" | bc)
THROUGHPUT=$(echo "scale=2; 100 / $ELAPSED" | bc)
echo "${GREEN}rsync upload 100MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}"
echo ""
# Test 7: rsync download 100MB
echo "=== Test 7: rsync download 100MB ==="
START=$(date +%s.%N)
sshpass -p "$SSH_PASS" rsync -avz -e "ssh -p $SSH_PORT" "$SSH_USER@$SSH_HOST:$REMOTE_DIR/file_100mb.bin" /tmp/
END=$(date +%s.%N)
ELAPSED=$(echo "$END - $START" | bc)
THROUGHPUT=$(echo "scale=2; 100 / $ELAPSED" | bc)
echo "${GREEN}rsync download 100MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}"
echo ""
# Test 8: rsync delta transfer (modify 10MB and re-upload)
echo "=== Test 8: rsync delta transfer ==="
dd if=/dev/urandom of=file_10mb.bin bs=1M count=10 2>/dev/null
# Modify first 1MB only
dd if=/dev/urandom of=file_10mb.bin bs=1M count=1 seek=0 conv=notrunc 2>/dev/null
START=$(date +%s.%N)
sshpass -p "$SSH_PASS" rsync -avz -e "ssh -p $SSH_PORT" file_10mb.bin "$SSH_USER@$SSH_HOST:$REMOTE_DIR/"
END=$(date +%s.%N)
ELAPSED=$(echo "$END - $START" | bc)
echo "${GREEN}rsync delta (1MB change): ${ELAPSED}s${NC}"
echo ""
# Test 9: exec command latency
echo "=== Test 9: exec command latency ==="
START=$(date +%s.%N)
sshpass -p "$SSH_PASS" ssh -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" "echo test" > /dev/null
END=$(date +%s.%N)
ELAPSED=$(echo "$END - $START" | bc)
echo "${GREEN}exec 'echo test': ${ELAPSED}s${NC}"
echo ""
# Test 10: exec command throughput (pipe 10MB)
echo "=== Test 10: exec command throughput (pipe 10MB) ==="
START=$(date +%s.%N)
sshpass -p "$SSH_PASS" ssh -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" "cat > $REMOTE_DIR/pipe_10mb.bin" < file_10mb.bin
END=$(date +%s.%N)
ELAPSED=$(echo "$END - $START" | bc)
THROUGHPUT=$(echo "scale=2; 10 / $ELAPSED" | bc)
echo "${GREEN}exec pipe 10MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}"
echo ""
# Cleanup remote files
echo "=== Cleanup ==="
sshpass -p "$SSH_PASS" ssh -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" "rm -rf $REMOTE_DIR/*" 2>/dev/null || true
# Cleanup local
rm -rf "$TEST_DIR"
rm -f /tmp/scp_download_*.bin /tmp/file_*.bin
echo "================================================"
echo "${GREEN}SSH Performance Benchmark Complete${NC}"
echo "================================================"