-
Effectuer un benchmark avec sysbench (+ script)
sysbench a le gros avantage d'être multi-plateforme, et d'être "simple" !
Il existe dans le monde linux comme dans le monde BSD.
Un script complet, analysant les résultats et donnant une note globale est présenté tout en bas.
ATTENTION : l'objectif n'est pas de comparer Debian à FreeBSD.
Les versions de sysbench ne sont pas les mêmes et celles de LuaJIT non plus, et les noyaux fonctionnent très différemment.. C'est plutôt pour vous aider lors de vos optimisations de ces systèmes respectifs, en comparant des sytèmes optimisés à d'autres qui ne le sont pas.L'installer sur Debian :
apt update
apt install sysbench -y
L'installer sur FreeBSD :pkg ins -y sysbench
Maintenant que sysbench est installé, voici une petite procédure de tests globaux :
1) Préparer un dossier pour des fichiers testsmkdir sysbench-test ; cd sysbench-test
2) Préparer des fichiers tests
sysbench fileio --file-total-size=4G prepare
3) Exécuter la série de tests :
sysbench cpu --threads=$(nproc) --cpu-max-prime=20000 run ; sysbench memory --threads=$(nproc) --memory-oper=read --memory-access-mode=seq run ; sysbench fileio --file-total-size=4G --file-test-mode=rndrw --time=60 --max-requests=0 run ; sysbench fileio --file-total-size=4G --file-test-mode=seqrd --time=60 --max-requests=0 run ; sysbench fileio --file-total-size=4G --file-test-mode=seqwr --time=60 --max-requests=0 run
Le résultat des tests s'affiche sur le shell.
4) A la fin des tests, nettoyer les fichiers de tests (ne pas les réutiliser)sysbench fileio cleanup
------------------------------------------------------------------------------------------------------------------------------
Voici un script qui fait tout le travail, de l'installation à la réalisation du bench, et qui donne une note globale.
Il est compatible Debian et FreeBSD.
Vous devez être root pour l'exécuter.Télécharger « script_benchmark.sh »
wget http://ekladata.com/AiHHnwllxAp7lVLwEMweFNELXZU/script_benchmark.sh -P /tmp
Voici le code :
#!/bin/sh
clear
system="0"
# Vérifier quel est le système (debian ou freebsd) et installer sysbench
if uname -a | grep -iq FREEBSD >/dev/null 2>&1; then
echo "-------------------------------------------------------"
echo "| Votre Système est un Système FreeBSD" ; echo
if ! pkg info -e sysbench; then
if pkg ins -y sysbench >/dev/null 2>&1; then
echo " - Sysbench vient de s'installer."
fi
else
echo " - Sysbench est déjà installé"
fi
system="1"
fi
if uname -a | grep -iq 'debian' >/dev/null 2>&1; then
echo "-------------------------------------------------------"
echo "| Votre Système est un Système Debian" ; echo
if ! dpkg -l | grep -q sysbench >/dev/null 2>&1; then
if apt update >/dev/null 2>&1; then
if apt-get install sysbench bc -y >/dev/null 2>&1; then
echo " - Sysbench vient de s'installer."
fi
fi
else
echo " - Sysbench est déjà installé."
fi
system="1"
fi
if [ ! "$system" -eq "1" ]; then
echo
echo "Système non reconnu, désolé..."
exit 0
fi
# Création du répertoire pour les fichiers de test :
[ -d /root/sysbench-test ] && { echo " - Le répertoire /root/sysbench-test existe, nous nous positionnons dedans."; cd /root/sysbench-test; } || { mkdir /root/sysbench-test && cd /root/sysbench-test && echo " - Le répertoire /root/sysbench-test a été créé, nous nous positionnons dedans."; }
# Créer les fichiers nécessaires pour le benchmark
echo " - Préparation des fichiers pour le benchmark en cours..."
sysbench fileio --file-total-size=4G prepare > /dev/null 2>&1
# Reposer le système avant le début du test
echo " - Pause de 30 secondes pour reposer le système avant démarrage du benchmark..."
sleep 30
# Démarrage du benchmark
echo
echo "-------------------------------------------------------"
echo "| Démarrage du benchmark..."
echo
echo " - Test du CPU..."
sysbench cpu --threads=$(nproc) --cpu-max-prime=20000 run > resultats.txt
echo " - Test de la mémoire..."
sysbench memory --threads=$(nproc) --memory-oper=read --memory-access-mode=seq run >> resultats.txt
sysbench fileio --file-total-size=4G --file-test-mode=rndrw --time=60 --max-requests=0 run >> resultats.txt
echo " - Tests IO... (ce test dure plusieurs minutes, patience...)"
sysbench fileio --file-total-size=4G --file-test-mode=seqrd --time=60 --max-requests=0 run >> resultats.txt
sysbench fileio --file-total-size=4G --file-test-mode=seqwr --time=60 --max-requests=0 run >> resultats.txt
# Supprimer les fichiers de test (ils ne peuvent pas être réutilisés après un bench)
echo " - Nettoyage des fichiers de test..."
sysbench fileio cleanup > /dev/null 2>&1
# Partie de l'analyse des résultats :
# Fichier contenant les résultats
fichier="/root/sysbench-test/resultats.txt"
# Initialisation des variables pour stocker les résultats
cpu_events_per_sec=0
memory_transfer_rate=0
random_rw_read_rate=0
sequential_read_rate=0
sequential_write_rate=0
# Lecture du fichier et extraction des données
while read -r line; do
case "$line" in
*"events per second:"*)
cpu_events_per_sec=$(echo "$line" | sed 's/.*events per second: *\([0-9.]*\).*/\1/')
;;
*"MiB transferred"*)
memory_transfer_rate=$(echo "$line" | sed 's/^\([0-9.]*\).*/\1/')
;;
*"reads/s:"*)
if [ "$random_rw_read_rate" = "0" ]; then
random_rw_read_rate=$(echo "$line" | sed 's/.*reads\/s: *\([0-9.]*\).*/\1/')
fi
;;
*"read, MiB/s:"*)
if [ "$sequential_read_rate" = "0" ]; then
sequential_read_rate=$(echo "$line" | sed 's/.*read, MiB\/s: *\([0-9.]*\).*/\1/')
fi
;;
*"written, MiB/s:"*)
if [ "$sequential_write_rate" = "0" ]; then
sequential_write_rate=$(echo "$line" | sed 's/.*written, MiB\/s: *\([0-9.]*\).*/\1/')
fi
;;
esac
done < "$fichier"
# Normalisation des scores (valeurs de référence basées sur des benchmarks moyens)
cpu_norm=$(echo "scale=6; ($cpu_events_per_sec / 5000000) * 100" | bc)
mem_norm=$(echo "scale=6; ($memory_transfer_rate / 40000) * 100" | bc)
rw_norm=$(echo "scale=6; ($random_rw_read_rate / 8000) * 100" | bc)
read_norm=$(echo "scale=6; ($sequential_read_rate / 1000) * 100" | bc)
write_norm=$(echo "scale=6; ($sequential_write_rate / 500) * 100" | bc)
# Calcul de la moyenne des scores normalisés
note_globale=$(echo "scale=6; ($cpu_norm + $mem_norm + $rw_norm + $read_norm + $write_norm) / 5" | bc)
# Affichage des résultats
echo
echo "-------------------------------------------------------"
echo "| Résultats du benchmark système |"
echo "-------------------------------------------------------"
echo "| CPU : $cpu_events_per_sec events/sec"
echo "| Mémoire : $memory_transfer_rate MiB/sec"
echo "| I/O Random R/W : $random_rw_read_rate reads/sec"
echo "| I/O Sequential Read : $sequential_read_rate MiB/sec"
echo "| I/O Sequential Write : $sequential_write_rate MiB/sec"
echo "|------------------------------------------------------"
echo "| Note globale : $note_globale %"
echo "-------------------------------------------------------"
echo
echo "Résultats détaillés dans le fichier '/root/sysbench-test/resultats.txt'"
echo
Tags : benchmark, debian, freebsd, linux, BSD
-
Commentaires