Salta ai contenuti

sysbench - Cheatsheet System & Database Benchmark

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

PiattaformaComando
Debian/Ubuntusudo apt install sysbench
Fedora/RHELsudo dnf install sysbench
Arch Linuxsudo pacman -S sysbench
macOS (Homebrew)brew install sysbench
Da sourcebuild dal repo akopytov/sysbench
Verificasysbench --version

Struttura Comando

sysbench [testname] [options] {prepare | run | cleanup}
PhaseScopo
prepareCrea i dati/file che il test necessita
runEsegui il benchmark
cleanupRimuovi i dati/file del test

Opzioni Globali Comuni

OpzioneDescrizione
--threads=NNumero di worker thread
--time=NEsegui per N secondi (0 = fino a che gli eventi siano fatti)
--events=NCap degli eventi totali
--rate=NTarget eventi/sec (rate limiting)
--report-interval=NStampa statistiche intermedie ogni N secondi
--warmup-time=NWarm up prima della misurazione
--histogramMostra 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
OpzioneDescrizione
--cpu-max-prime=NUpper 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
OpzioneDescrizione
--memory-block-sizeDimensione di ogni operazione di memoria
--memory-total-sizeDati totali da trasferire
`—memory-oper=readwrite`
`—memory-access-mode=seqrnd`

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
OpzioneDescrizione
--file-total-sizeDimensione totale file di test
--file-test-modeseqrd, seqwr, rndrd, rndwr, rndrw
--file-block-sizeDimensione blocco I/O
--file-fsync-freqFrequenza 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
OpzioneDescrizione
`—db-driver=mysqlpgsql`
--tables / --table-sizeForma del dataset
oltp_read_only / oltp_write_onlyVarianti del mix del carico di lavoro
--db-ps-mode=disableDisabilita prepared statements

Metriche chiave: transazioni/sec (TPS), query/sec (QPS), percentili di latenza.

Lettura Risultati

MetricaSignificato
events/sThroughput dell”operazione
latency (avg/95th)Tempo di risposta; guarda il 95° percentile
TPS / QPSThroughput transazione/query database
min/max/avgDistribuzione 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