sysbench - Cheatsheet System & Database Benchmark
sysbench è uno strumento di benchmark scriptabile e multi-threaded basato su LuaJIT. È più famoso per il benchmarking di database (specialmente MySQL e PostgreSQL via carichi di lavoro OLTP) ma fornisce anche test built-in per CPU, memoria, file I/O, thread e mutex. Poiché i carichi di lavoro sono parametrizzati e scriptabili, produce numeri riproducibili per capacity planning, tuning e confronti before/after.
Installazione
| Piattaforma | Comando |
|---|
| Debian/Ubuntu | sudo apt install sysbench |
| Fedora/RHEL | sudo dnf install sysbench |
| Arch Linux | sudo pacman -S sysbench |
| macOS (Homebrew) | brew install sysbench |
| Da source | build dal repo akopytov/sysbench |
| Verifica | sysbench --version |
Struttura Comando
sysbench [testname] [options] {prepare | run | cleanup}
| Phase | Scopo |
|---|
prepare | Crea i dati/file che il test necessita |
run | Esegui il benchmark |
cleanup | Rimuovi i dati/file del test |
Opzioni Globali Comuni
| Opzione | Descrizione |
|---|
--threads=N | Numero di worker thread |
--time=N | Esegui per N secondi (0 = fino a che gli eventi siano fatti) |
--events=N | Cap degli eventi totali |
--rate=N | Target eventi/sec (rate limiting) |
--report-interval=N | Stampa statistiche intermedie ogni N secondi |
--warmup-time=N | Warm up prima della misurazione |
--histogram | Mostra un istogramma di latenza |
Benchmark CPU
# Verifica i numeri primi fino a 20000 su 4 thread per 30s
sysbench cpu --cpu-max-prime=20000 --threads=4 --time=30 run
| Opzione | Descrizione |
|---|
--cpu-max-prime=N | Upper bound per il calcolo dei primi (dimensione di lavoro) |
Metrica chiave: eventi per secondo (più alto è meglio).
Benchmark Memoria
sysbench memory --memory-block-size=1K --memory-total-size=100G \
--memory-oper=write --threads=4 run
| Opzione | Descrizione |
|---|
--memory-block-size | Dimensione di ogni operazione di memoria |
--memory-total-size | Dati totali da trasferire |
| `—memory-oper=read | write` |
| `—memory-access-mode=seq | rnd` |
Metrica chiave: MiB/sec tasso di trasferimento.
Benchmark File I/O
sysbench fileio --file-total-size=4G prepare
sysbench fileio --file-total-size=4G --file-test-mode=rndrw \
--time=60 --threads=8 run
sysbench fileio --file-total-size=4G cleanup
| Opzione | Descrizione |
|---|
--file-total-size | Dimensione totale file di test |
--file-test-mode | seqrd, seqwr, rndrd, rndwr, rndrw |
--file-block-size | Dimensione blocco I/O |
--file-fsync-freq | Frequenza fsync |
Metriche chiave: IOPS, throughput (MiB/s), latenza.
Thread & Mutex
sysbench threads --threads=64 --thread-yields=1000 --time=30 run
sysbench mutex --threads=64 --mutex-num=4096 run
Database (OLTP) Benchmark
sysbench fornisce script Lua OLTP (oltp_read_write, oltp_read_only, oltp_point_select, ecc.).
# Prepara 10 tabelle di 1.000.000 righe in un database MySQL
sysbench oltp_read_write \
--db-driver=mysql --mysql-host=127.0.0.1 --mysql-user=bench \
--mysql-password=secret --mysql-db=benchdb \
--tables=10 --table-size=1000000 prepare
# Esegui un test misto read/write di 5 minuti con 16 thread
sysbench oltp_read_write \
--db-driver=mysql --mysql-host=127.0.0.1 --mysql-user=bench \
--mysql-password=secret --mysql-db=benchdb \
--tables=10 --table-size=1000000 --threads=16 --time=300 \
--report-interval=10 run
# Pulisci
sysbench oltp_read_write --db-driver=mysql --mysql-db=benchdb cleanup
| Opzione | Descrizione |
|---|
| `—db-driver=mysql | pgsql` |
--tables / --table-size | Forma del dataset |
oltp_read_only / oltp_write_only | Varianti del mix del carico di lavoro |
--db-ps-mode=disable | Disabilita prepared statements |
Metriche chiave: transazioni/sec (TPS), query/sec (QPS), percentili di latenza.
Lettura Risultati
| Metrica | Significato |
|---|
| events/s | Throughput dell”operazione |
| latency (avg/95th) | Tempo di risposta; guarda il 95° percentile |
| TPS / QPS | Throughput transazione/query database |
| min/max/avg | Distribuzione dei tempi per-evento |
Flussi di Lavoro Comuni
# Confronta CPU prima/dopo un cambio di governor
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) --time=30 run
# Sanity check su archiviazione su un nuovo disco
sysbench fileio --file-total-size=8G --file-test-mode=rndrw --time=60 run
# Sintonizza MySQL: varia --threads e guarda il ridimensionamento TPS/latenza
Risorse