Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- DURATION=${1:-3}
- THREADS=${2:-1}
- if ! [[ "$DURATION" =~ ^[0-9]+$ ]] || [ "$DURATION" -lt 1 ]; then
- echo "Usage: $0 [seconds] [threads]" >&2
- echo "Example: $0 10 4" >&2
- exit 1
- fi
- if ! [[ "$THREADS" =~ ^[0-9]+$ ]] || [ "$THREADS" -lt 1 ]; then
- echo "Error: thread count must be an integer >= 1" >&2
- exit 1
- fi
- MULTI_FLAG=()
- [ "$THREADS" -gt 1 ] && MULTI_FLAG=(-multi "$THREADS")
- CIPHERS=("aes-128-gcm" "aes-256-gcm" "chacha20-poly1305")
- DEFAULT_SIZES=(16 64 256 1024 8192 16384)
- EXTRA_SIZES=(1440)
- SHOW_SIZES=(256 1024 1440 8192)
- declare -A VALS
- TOTAL=$(( ${#CIPHERS[@]} * 2 * DURATION ))
- echo "Running benchmarks (${DURATION}s per run, ${THREADS} thread(s), ~${TOTAL}s total)..." >&2
- for cipher in "${CIPHERS[@]}"; do
- echo " → $cipher" >&2
- # Standard run: produces results for 16/64/256/1024/8192/16384 B
- raw=$(openssl speed -seconds "$DURATION" "${MULTI_FLAG[@]}" -evp "$cipher" 2>&1)
- line=$(echo "$raw" | grep -i "^${cipher} ")
- i=0
- while IFS= read -r val; do
- VALS["${cipher}_${DEFAULT_SIZES[$i]}"]="$val"
- i=$((i + 1))
- done < <(echo "$line" | awk '{
- for (j = 2; j <= NF; j++) {
- v = $j; gsub(/k/, "", v)
- printf "%.2f\n", v / 1000000
- }
- }')
- # Separate run for 1440 B (WireGuard inner MTU)
- raw1440=$(openssl speed -seconds "$DURATION" "${MULTI_FLAG[@]}" -evp "$cipher" -bytes 1440 2>&1)
- line1440=$(echo "$raw1440" | grep -i "^${cipher} ")
- VALS["${cipher}_1440"]=$(echo "$line1440" | awk '{v=$2; gsub(/k/,"",v); printf "%.2f", v/1000000}')
- done
- C=11
- W=$((24 + C * ${#SHOW_SIZES[@]}))
- SEP=$(printf '%.0s─' $(seq 1 $W))
- echo ""
- echo " $(openssl version)"
- echo " CPU: $(grep -m1 'model name' /proc/cpuinfo | cut -d: -f2 | xargs)"
- echo ""
- printf " %-24s" "Algorithm"
- for s in "${SHOW_SIZES[@]}"; do printf "%${C}s" "${s} B"; done
- echo ""
- printf " %-24s" ""
- for s in "${SHOW_SIZES[@]}"; do printf "%${C}s" "(GB/s)"; done
- echo ""
- echo " $SEP"
- for cipher in "${CIPHERS[@]}"; do
- printf " %-24s" "$cipher"
- for s in "${SHOW_SIZES[@]}"; do
- printf "%${C}s" "${VALS[${cipher}_${s}]:-—}"
- done
- echo ""
- done
- echo " $SEP"
- echo ""
- echo " * 1440 B — WireGuard inner MTU (separate run with -bytes 1440)."
- echo " * Duration: ${DURATION}s per run (-seconds ${DURATION})."
- echo " * Threads: ${THREADS} (-multi ${THREADS})."
- echo ""
Advertisement
Add Comment
Please, Sign In to add comment