• 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 tests

    mkdir 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 Tags : , , , ,
  • Commentaires

    Aucun commentaire pour le moment

    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :