From 7d229d0b622a39d71f4f9e47de9b7576b9f20e53 Mon Sep 17 00:00:00 2001 From: Warren Date: Sun, 21 Jun 2026 23:55:25 +0800 Subject: [PATCH] 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 --- scripts/ssh_benchmark.sh | 154 ++++++++++++++++++++++++++++++++++++ scripts/webdav_benchmark.sh | 144 +++++++++++++++++++++++++++++++++ 2 files changed, 298 insertions(+) create mode 100755 scripts/ssh_benchmark.sh create mode 100755 scripts/webdav_benchmark.sh diff --git a/scripts/ssh_benchmark.sh b/scripts/ssh_benchmark.sh new file mode 100755 index 0000000..3508648 --- /dev/null +++ b/scripts/ssh_benchmark.sh @@ -0,0 +1,154 @@ +#!/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 "================================================" \ No newline at end of file diff --git a/scripts/webdav_benchmark.sh b/scripts/webdav_benchmark.sh new file mode 100755 index 0000000..b85324d --- /dev/null +++ b/scripts/webdav_benchmark.sh @@ -0,0 +1,144 @@ +#!/bin/bash +# WebDAV Performance Benchmark +# Tests: upload, download, PROPFIND, MKCOL, DELETE + +set -e + +WEBDAV_URL="http://127.0.0.1:11438/webdav" +TEST_DIR="/tmp/webdav_benchmark" +USER="demo" +PASS="demo123" + +# Colors +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +echo "================================================" +echo "WebDAV 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 "" + +# Test 1: PROPFIND (directory listing) +echo "=== Test 1: PROPFIND (directory listing) ===" +START=$(date +%s.%N) +curl -s -u "$USER:$PASS" -X PROPFIND -H "Depth: 1" "$WEBDAV_URL/" > /dev/null +END=$(date +%s.%N) +ELAPSED=$(echo "$END - $START" | bc) +echo "${GREEN}PROPFIND: ${ELAPSED}s${NC}" +echo "" + +# Test 2: Upload 1MB file +echo "=== Test 2: Upload 1MB file ===" +START=$(date +%s.%N) +curl -s -u "$USER:$PASS" -T file_1mb.bin "$WEBDAV_URL/file_1mb.bin" +END=$(date +%s.%N) +ELAPSED=$(echo "$END - $START" | bc) +THROUGHPUT=$(echo "scale=2; 1 / $ELAPSED" | bc) +echo "${GREEN}Upload 1MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}" +echo "" + +# Test 3: Upload 10MB file +echo "=== Test 3: Upload 10MB file ===" +START=$(date +%s.%N) +curl -s -u "$USER:$PASS" -T file_10mb.bin "$WEBDAV_URL/file_10mb.bin" +END=$(date +%s.%N) +ELAPSED=$(echo "$END - $START" | bc) +THROUGHPUT=$(echo "scale=2; 10 / $ELAPSED" | bc) +echo "${GREEN}Upload 10MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}" +echo "" + +# Test 4: Download 10MB file +echo "=== Test 4: Download 10MB file ===" +START=$(date +%s.%N) +curl -s -u "$USER:$PASS" "$WEBDAV_URL/file_10mb.bin" -o /tmp/download_10mb.bin +END=$(date +%s.%N) +ELAPSED=$(echo "$END - $START" | bc) +THROUGHPUT=$(echo "scale=2; 10 / $ELAPSED" | bc) +echo "${GREEN}Download 10MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}" +echo "" + +# Test 5: Upload 50MB file +echo "=== Test 5: Upload 50MB file ===" +START=$(date +%s.%N) +curl -s -u "$USER:$PASS" -T file_50mb.bin "$WEBDAV_URL/file_50mb.bin" +END=$(date +%s.%N) +ELAPSED=$(echo "$END - $START" | bc) +THROUGHPUT=$(echo "scale=2; 50 / $ELAPSED" | bc) +echo "${GREEN}Upload 50MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}" +echo "" + +# Test 6: Download 50MB file +echo "=== Test 6: Download 50MB file ===" +START=$(date +%s.%N) +curl -s -u "$USER:$PASS" "$WEBDAV_URL/file_50mb.bin" -o /tmp/download_50mb.bin +END=$(date +%s.%N) +ELAPSED=$(echo "$END - $START" | bc) +THROUGHPUT=$(echo "scale=2; 50 / $ELAPSED" | bc) +echo "${GREEN}Download 50MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}" +echo "" + +# Test 7: Upload 100MB file +echo "=== Test 7: Upload 100MB file ===" +START=$(date +%s.%N) +curl -s -u "$USER:$PASS" -T file_100mb.bin "$WEBDAV_URL/file_100mb.bin" +END=$(date +%s.%N) +ELAPSED=$(echo "$END - $START" | bc) +THROUGHPUT=$(echo "scale=2; 100 / $ELAPSED" | bc) +echo "${GREEN}Upload 100MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}" +echo "" + +# Test 8: Download 100MB file +echo "=== Test 8: Download 100MB file ===" +START=$(date +%s.%N) +curl -s -u "$USER:$PASS" "$WEBDAV_URL/file_100mb.bin" -o /tmp/download_100mb.bin +END=$(date +%s.%N) +ELAPSED=$(echo "$END - $START" | bc) +THROUGHPUT=$(echo "scale=2; 100 / $ELAPSED" | bc) +echo "${GREEN}Download 100MB: ${ELAPSED}s (${THROUGHPUT} MB/s)${NC}" +echo "" + +# Test 9: MKCOL (create directory) +echo "=== Test 9: MKCOL (create directory) ===" +START=$(date +%s.%N) +curl -s -u "$USER:$PASS" -X MKCOL "$WEBDAV_URL/test_dir/" +END=$(date +%s.%N) +ELAPSED=$(echo "$END - $START" | bc) +echo "${GREEN}MKCOL: ${ELAPSED}s${NC}" +echo "" + +# Test 10: DELETE (cleanup) +echo "=== Test 10: DELETE (cleanup) ===" +START=$(date +%s.%N) +curl -s -u "$USER:$PASS" -X DELETE "$WEBDAV_URL/file_1mb.bin" +curl -s -u "$USER:$PASS" -X DELETE "$WEBDAV_URL/file_10mb.bin" +curl -s -u "$USER:$PASS" -X DELETE "$WEBDAV_URL/file_50mb.bin" +curl -s -u "$USER:$PASS" -X DELETE "$WEBDAV_URL/file_100mb.bin" +curl -s -u "$USER:$PASS" -X DELETE "$WEBDAV_URL/test_dir/" +END=$(date +%s.%N) +ELAPSED=$(echo "$END - $START" | bc) +echo "${GREEN}DELETE (5 files): ${ELAPSED}s${NC}" +echo "" + +# Cleanup +rm -rf "$TEST_DIR" +rm -f /tmp/download_*.bin + +echo "================================================" +echo "${GREEN}WebDAV Performance Benchmark Complete${NC}" +echo "================================================" \ No newline at end of file