sysbench ist ein modulares Benchmark-Tool für Linux. Es testet CPU, Memory, Disk I/O und Datenbank-Performance mit reproduzierbaren Ergebnissen.
Installation
# Debian/Ubuntu
apt install sysbench
# RHEL/CentOS
dnf install sysbench
# Version prüfen
sysbench --versionCPU-Benchmark
Basis-Test
# CPU-Test (Primzahlen berechnen)
sysbench cpu run
# Ausgabe:
# CPU speed:
# events per second: 1234.56
#
# Throughput:
# events/s (eps): 1234.5678
# time elapsed: 10.0001s
# total number of events: 12345Erweiterte Optionen
# Mit mehr Threads
sysbench cpu --threads=4 run
# Längere Laufzeit
sysbench cpu --time=60 run
# Höhere Primzahl-Grenze
sysbench cpu --cpu-max-prime=50000 run
# Vollständiger Test
sysbench cpu --threads=8 --time=60 --cpu-max-prime=20000 runMulti-Core Skalierung
#!/bin/bash
# cpu-scaling.sh
for threads in 1 2 4 8 16; do
echo "=== $threads Threads ==="
sysbench cpu --threads=$threads --time=30 run | grep "events per second"
doneMemory-Benchmark
Basis-Test
# Memory-Test
sysbench memory run
# Ausgabe:
# Total operations: 104857600 (10485760.00 per second)
# 102400.00 MiB transferred (10240.00 MiB/sec)Optionen
# Block-Größe
sysbench memory --memory-block-size=1M run
# Gesamtgröße
sysbench memory --memory-total-size=10G run
# Zugriffsart
sysbench memory --memory-access-mode=rnd run # Random
sysbench memory --memory-access-mode=seq run # Sequential
# Operation
sysbench memory --memory-oper=read run
sysbench memory --memory-oper=write run
# Multi-Thread
sysbench memory --threads=4 --memory-block-size=1K runDisk I/O-Benchmark
Vorbereitung
# Test-Dateien erstellen
sysbench fileio --file-total-size=10G prepare
# Erzeugt: test_file.0, test_file.1, ...Tests durchführen
# Sequential Read
sysbench fileio --file-total-size=10G --file-test-mode=seqrd run
# Sequential Write
sysbench fileio --file-total-size=10G --file-test-mode=seqwr run
# Random Read
sysbench fileio --file-total-size=10G --file-test-mode=rndrd run
# Random Write
sysbench fileio --file-total-size=10G --file-test-mode=rndwr run
# Random Read/Write
sysbench fileio --file-total-size=10G --file-test-mode=rndrw runErweiterte Optionen
# Mit spezifischen Parametern
sysbench fileio \
--file-total-size=10G \
--file-test-mode=rndrw \
--file-num=16 \
--file-block-size=16K \
--file-io-mode=sync \
--threads=4 \
--time=60 \
runTest-Dateien entfernen
sysbench fileio --file-total-size=10G cleanupMySQL-Benchmark
Vorbereitung
# Datenbank erstellen
mysql -u root -p -e "CREATE DATABASE sbtest;"
# Test-Daten vorbereiten
sysbench oltp_read_write \
--mysql-host=localhost \
--mysql-user=root \
--mysql-password=secret \
--mysql-db=sbtest \
--tables=10 \
--table-size=100000 \
prepareOLTP-Tests
# Read-Only
sysbench oltp_read_only \
--mysql-host=localhost \
--mysql-user=root \
--mysql-password=secret \
--mysql-db=sbtest \
--tables=10 \
--table-size=100000 \
--threads=16 \
--time=60 \
run
# Write-Only
sysbench oltp_write_only \
--mysql-host=localhost \
--mysql-user=root \
--mysql-password=secret \
--mysql-db=sbtest \
--tables=10 \
--threads=16 \
--time=60 \
run
# Read/Write
sysbench oltp_read_write \
--mysql-host=localhost \
--mysql-user=root \
--mysql-password=secret \
--mysql-db=sbtest \
--tables=10 \
--threads=16 \
--time=60 \
runAusgabe verstehen
# SQL statistics:
# queries performed:
# read: 140000
# write: 40000
# other: 20000
# total: 200000
# transactions: 10000 (166.67 per sec.)
# queries: 200000 (3333.33 per sec.)
#
# Latency (ms):
# min: 1.23
# avg: 95.99
# max: 234.56
# 95th percentile: 155.80Test-Daten aufräumen
sysbench oltp_read_write \
--mysql-host=localhost \
--mysql-user=root \
--mysql-password=secret \
--mysql-db=sbtest \
--tables=10 \
cleanupPostgreSQL-Benchmark
# Vorbereitung
sysbench oltp_read_write \
--db-driver=pgsql \
--pgsql-host=localhost \
--pgsql-user=postgres \
--pgsql-password=secret \
--pgsql-db=sbtest \
--tables=10 \
--table-size=100000 \
prepare
# Test
sysbench oltp_read_write \
--db-driver=pgsql \
--pgsql-host=localhost \
--pgsql-user=postgres \
--pgsql-password=secret \
--pgsql-db=sbtest \
--tables=10 \
--threads=16 \
--time=60 \
runMutex-Benchmark
# Thread-Synchronisation testen
sysbench mutex --threads=64 run
# Optionen
sysbench mutex \
--mutex-num=4096 \
--mutex-locks=50000 \
--mutex-loops=10000 \
--threads=64 \
runThreads-Benchmark
# Thread-Scheduler testen
sysbench threads --threads=64 run
# Mit mehr Yields
sysbench threads --thread-yields=1000 --thread-locks=8 --threads=64 runBenchmark-Script
#!/bin/bash
# full-benchmark.sh
RESULTS="benchmark-$(date +%Y%m%d-%H%M%S)"
mkdir -p $RESULTS
echo "=== CPU Benchmark ===" | tee $RESULTS/cpu.txt
sysbench cpu --threads=$(nproc) --time=60 run | tee -a $RESULTS/cpu.txt
echo -e "\n=== Memory Benchmark ===" | tee $RESULTS/memory.txt
sysbench memory --threads=$(nproc) --time=60 run | tee -a $RESULTS/memory.txt
echo -e "\n=== File I/O Benchmark ===" | tee $RESULTS/fileio.txt
sysbench fileio --file-total-size=4G prepare
sysbench fileio --file-total-size=4G --file-test-mode=rndrw --threads=4 --time=60 run | tee -a $RESULTS/fileio.txt
sysbench fileio --file-total-size=4G cleanup
echo "Results saved to $RESULTS/"Vergleichs-Tests
Vor/Nach Optimierung
#!/bin/bash
# compare-benchmark.sh
LABEL=$1
# CPU
echo "CPU: $(sysbench cpu --time=30 run | grep 'events per second' | awk '{print $4}')" >> benchmark-$LABEL.txt
# Memory
echo "Memory: $(sysbench memory --time=30 run | grep 'MiB/sec' | awk '{print $4}')" >> benchmark-$LABEL.txt
# File I/O
sysbench fileio --file-total-size=1G prepare > /dev/null
echo "FileIO: $(sysbench fileio --file-total-size=1G --file-test-mode=rndrw --time=30 run | grep 'read, MiB/s' | awk '{print $3}')" >> benchmark-$LABEL.txt
sysbench fileio --file-total-size=1G cleanup > /dev/nullZusammenfassung
| Test | Befehl | |------|--------| | CPU | sysbench cpu run | | Memory | sysbench memory run | | Disk I/O | sysbench fileio run | | MySQL | sysbench oltp_read_write run | | Threads | sysbench threads run | | Mutex | sysbench mutex run |
| Option | Beschreibung | |--------|--------------| | --threads | Anzahl Threads | | --time | Testdauer (Sekunden) | | --events | Anzahl Events | | --report-interval | Intervall-Berichte |
| File I/O Mode | Beschreibung | |---------------|--------------| | seqrd | Sequential Read | | seqwr | Sequential Write | | rndrd | Random Read | | rndwr | Random Write | | rndrw | Random Read/Write |
| MySQL Test | Workload | |------------|----------| | oltp_read_only | Nur SELECT | | oltp_write_only | INSERT/UPDATE/DELETE | | oltp_read_write | Gemischt | | oltp_point_select | Punkt-Abfragen |
Fazit
sysbench ist ideal für reproduzierbare Benchmarks. Die CPU-Tests messen Single- und Multi-Thread-Performance. File I/O-Tests simulieren verschiedene Workloads. MySQL-Benchmarks testen realistische OLTP-Last. Für aussagekräftige Ergebnisse sollten Tests mehrfach durchgeführt werden.