#!/usr/bin/env bash # Simple benchmarking for linux # # Run as: # $ bash bench.sh # $ bash bench.sh clean # # See: https://documentation.help/7-Zip/bench.htm # See: https://github.com/akopytov/sysbench # Consider: https://github.com/kdlucas/byte-unixbench set -euo pipefail REQUIRED_PROGRAMS=(7za sysbench lsblk tee uname nproc grep cut head sed awk) check_installed_programs() { local -a programs=("$@") for program in "${programs[@]}"; do if ! command -v "$program" &>/dev/null; then echo "Program not installed: $program" return 1 fi done return 0 } if ! check_installed_programs "${REQUIRED_PROGRAMS[@]}"; then echo "Please install the required programs and try again." exit 1 fi CPU_MODEL=$(cat /proc/cpuinfo | grep "model name" | head -n 1 | cut -d ":" -f 2 | sed 's/^[ \t]*//') MEMORY_TOT=$(awk '/MemTotal/ { printf "%.2f GB\n", $2/1024/1024 }' /proc/meminfo) DIR_NAME=$(echo "${CPU_MODEL}" | sed 's/ /_/g' | sed 's/__*/_/g' | sed 's/([^()]*)//g') TARBALL_NAME=${DIR_NAME}.tar.gz cleanup() { echo "Cleaning up..." rm -rf "${DIR_NAME}" "${TARBALL_NAME}" exit 0 } [[ "${1:-}" = "clean" ]] && cleanup trap cleanup INT TERM # EXIT KERNEL=$(uname -r) DATE=$(date -I) NPROC=$(nproc) echo "Model: ${CPU_MODEL}" echo "Total memory: ${MEMORY_TOT}" echo "Kernel: ${KERNEL}" echo "Date: ${DATE}" echo "Logical cores: ${NPROC}" echo "Do you want to continue?" read -r -p "Type 'YES' to confirm: " RESPONSE [[ "$RESPONSE" == "YES" ]] || { echo "Aborted." exit 1 } mkdir -p "${DIR_NAME}" pushd "${DIR_NAME}" echo "${CPU_MODEL}" > sysinfo.txt echo "${MEMORY_TOT}" >> sysinfo.txt echo "${KERNEL}" >> sysinfo.txt echo "${DATE}" >> sysinfo.txt cat /etc/os-release >> sysinfo.txt lscpu | tee lscpu.log sysbench cpu run --threads="${NPROC}" | tee sysbench_multi.log sysbench cpu run | tee sysbench_single.log sysbench threads run | tee sysbench_threads.log sysbench memory run | tee sysbench_memory.log 7za b | tee 7za_bench.log popd tar cvzf "${TARBALL_NAME}" "${DIR_NAME}" echo "Done!"