basic-benchmark: portable Fedora benchmark kit
Headless + headed suites with power/thermal logging and efficiency reporting. Includes PassMark, llama.cpp, app workloads (LibreOffice/GEGL/Inkscape/GIMP), a GOVERNOR selector, compare-report.py, and captured results.
This commit is contained in:
commit
0cd63d0233
533 changed files with 43679 additions and 0 deletions
128
capture-specs.sh
Executable file
128
capture-specs.sh
Executable file
|
|
@ -0,0 +1,128 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# basic-benchmark / capture-specs.sh
|
||||
# Capture a machine spec sheet for whatever host this is run on. Portable across
|
||||
# Fedora (and most Linux) systems — no assumptions about hardware or user.
|
||||
#
|
||||
# ./capture-specs.sh # writes specs.txt and specs-detailed.txt
|
||||
# ./capture-specs.sh before # writes specs-<tag>.txt / specs-detailed-<tag>.txt
|
||||
#
|
||||
# Run this on the machine being benchmarked, right before its benchmark pass.
|
||||
|
||||
set -u
|
||||
|
||||
TAG="${1:-}"
|
||||
suffix=""
|
||||
[ -n "$TAG" ] && suffix="-$TAG"
|
||||
|
||||
DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
OUT_SUMMARY="$DIR/specs$suffix.txt"
|
||||
OUT_DETAIL="$DIR/specs-detailed$suffix.txt"
|
||||
|
||||
have() { command -v "$1" >/dev/null 2>&1; }
|
||||
line() { printf '%s\n' "$*"; }
|
||||
|
||||
cpu_model() {
|
||||
local m
|
||||
m="$(sed -n 's/^model name[[:space:]]*: *//p' /proc/cpuinfo 2>/dev/null | head -1)"
|
||||
[ -z "$m" ] && m="$(lscpu 2>/dev/null | sed -n 's/^Model name: *//p' | head -1)"
|
||||
printf '%s' "${m:-unknown}"
|
||||
}
|
||||
mem_gib() { awk '/MemTotal/{printf "%.1f", $2/1048576}' /proc/meminfo; }
|
||||
vram_gib() {
|
||||
local m=0 v
|
||||
for f in /sys/class/drm/card*/device/mem_info_vram_total; do
|
||||
[ -r "$f" ] || continue
|
||||
v="$(cat "$f" 2>/dev/null)"; [ -n "$v" ] && [ "$v" -gt "$m" ] 2>/dev/null && m="$v"
|
||||
done
|
||||
[ "$m" -gt 0 ] && awk -v m="$m" 'BEGIN{printf "%.1f", m/1073741824}' || printf 'n/a'
|
||||
}
|
||||
gpus() {
|
||||
if have lspci; then
|
||||
lspci -nn 2>/dev/null | grep -Ei 'vga|3d|display' | sed 's/^/ /'
|
||||
else
|
||||
line ' (lspci unavailable)'
|
||||
fi
|
||||
}
|
||||
disks() {
|
||||
if have lsblk; then
|
||||
lsblk -d -o NAME,SIZE,ROTA,TRAN,MODEL 2>/dev/null | sed 's/^/ /'
|
||||
else
|
||||
line ' (lsblk unavailable)'
|
||||
fi
|
||||
}
|
||||
tool_versions() {
|
||||
for c in 7z openssl fio stress-ng sysbench sensors turbostat cpupower \
|
||||
glmark2 vkmark glxinfo vulkaninfo phoronix-test-suite python3 \
|
||||
libreoffice inkscape gegl gimp; do
|
||||
have "$c" && printf ' %-20s %s\n' "$c" "$("$c" --version 2>&1 | head -1)"
|
||||
done
|
||||
local pt="$DIR/tools/pt/PerformanceTest/PerformanceTest_Linux_x86-64"
|
||||
[ -x "$pt" ] && printf ' %-20s %s\n' "PassMark" "$(sha256sum "$pt" | cut -c1-16)"
|
||||
local lb="$DIR/tools/llama/bin/llama-bench"
|
||||
[ -x "$lb" ] && printf ' %-20s %s\n' "llama-bench" "$(cd "$DIR/tools/llama/bin" && LD_LIBRARY_PATH="$PWD" ./llama-bench --version 2>&1 | head -1)"
|
||||
}
|
||||
|
||||
{
|
||||
line "basic-benchmark — spec sheet"
|
||||
line "host: $(hostname) user: $(id -un) captured $(date -Is)"
|
||||
[ -n "$TAG" ] && line "tag: $TAG"
|
||||
} > "$OUT_SUMMARY"
|
||||
|
||||
{
|
||||
line " ,---."
|
||||
line " / . \\ $(id -un)@$(hostname) — benchmark baseline"
|
||||
line " | (o) | -----------------------------------------------"
|
||||
printf ' \\ %-3s / OS: %s\n' " " "$( . /etc/os-release 2>/dev/null; printf '%s' "${PRETTY_NAME:-unknown Linux}" )"
|
||||
printf ' `---%s Kernel: %s\n' " " "$(uname -r)"
|
||||
line " CPU: $(cpu_model)"
|
||||
line " Memory: $(mem_gib) GiB"
|
||||
line " GPU VRAM: $(vram_gib) GiB"
|
||||
line " Fedora: $(rpm -E %fedora 2>/dev/null || echo n/a) Packages: $(rpm -qa 2>/dev/null | wc -l)"
|
||||
if have systemctl && systemctl is-active graphical.target >/dev/null 2>&1; then
|
||||
line " Session: graphical"
|
||||
else
|
||||
line " Session: headless"
|
||||
fi
|
||||
} > "$OUT_SUMMARY"
|
||||
|
||||
{
|
||||
line "############################################################"
|
||||
line "# basic-benchmark — machine spec (captured)"
|
||||
line "# host: $(hostname) user: $(id -un) $(date -Is)"
|
||||
line "############################################################"
|
||||
line ""
|
||||
line " OS"
|
||||
line " Distro: $( . /etc/os-release 2>/dev/null; printf '%s' "${PRETTY_NAME:-unknown}" )"
|
||||
line " Kernel: $(uname -r)"
|
||||
line " Arch: $(uname -m)"
|
||||
line " Uptime: $(uptime -p 2>/dev/null || uptime)"
|
||||
line " Packages: $(rpm -qa 2>/dev/null | wc -l) rpm"
|
||||
line ""
|
||||
line " CPU"
|
||||
line " Model: $(cpu_model)"
|
||||
if have lscpu; then lscpu 2>/dev/null | grep -E '^(Architecture|CPU\(s\)|Thread|Core|Socket|L[123] |NUMA|Virtualization)' | sed 's/^/ /'; fi
|
||||
line ""
|
||||
line " MEMORY"
|
||||
line " Total: $(mem_gib) GiB"
|
||||
line " Swap: $(free -h 2>/dev/null | awk '/Swap/{print $2}')"
|
||||
line ""
|
||||
line " STORAGE"
|
||||
disks
|
||||
line ""
|
||||
line " GPU(s)"
|
||||
gpus
|
||||
line " Largest VRAM: $(vram_gib) GiB"
|
||||
line ""
|
||||
line " TOOL VERSIONS"
|
||||
tool_versions
|
||||
line ""
|
||||
line " THERMALS (current)"
|
||||
have sensors && sensors 2>/dev/null | sed 's/^/ /' || line " (lm_sensors not installed)"
|
||||
line ""
|
||||
line "NOTE This is a captured baseline. Capture 'after' the same way once the"
|
||||
line " system changes; the kit compares the two."
|
||||
} > "$OUT_DETAIL"
|
||||
|
||||
printf 'wrote %s\n' "$OUT_SUMMARY"
|
||||
printf 'wrote %s\n' "$OUT_DETAIL"
|
||||
Loading…
Reference in a new issue