Voici un script pour voir la différence entre la vitesse d'écriture avec un disque / tmpfs et avec / sans cache.
Ce script doit être lancer avec sudo pour automatiser plus facilement la chose.
On doit préalablement se créer un tmpfs de tmp.
Personnellement, sur ma Pi2 j'ai :
Code : Tout sélectionner
tmpfs /tmp tmpfs defaults,suid,mode=1777,size=256M 0 0
Ce script crée un fichier "test_data" sous "/" et il reste présent dans tous les essais, il n'est crée qu'une seule fois. Mettez l'argument "clear" pour l'effacer à la fin des tests.
Par défaut, les tests sont fait sans cache, c'est la condition la plus défavorable. Mettez l'argument "oui" pour le test avec cache.
Lancez 2/3 fois le script sans / avec cache pour vous faire une idée du benchmark.
Bons essais !
Toutes propositions sont bienvenues pour améliorer ce script.
Code : Tout sélectionner
#!/bin/bash
# >>>>> VARIABLES A MODIFIER <<<<<
FILE="test_data"
TAILLE="2000" # en Mega
# >>>>> PAS TOUCHE ! <<<<<
CACHE="$1"
#CALCUL_TAILLE=`echo "1 * $TAILLE" | bc` # le 1 c'est le bs
############################## README ###############################
#
# comparaison de benchmarks entre tmpfs et disque
#
# d'abord se créer un tmpfs de /tmp du genre :
# tmpfs /tmp tmpfs defaults,mode=1777,nosuid 0 0
# Si pas de taille de préciser, c'est la moitié de la RAM
#
# Par défaut, on vide le cache / tampon avant chaque benchmark, sinon les résultats seront faussés (beaucoup + rapide)
# Si on veut tester avec le cache, lancez le script avec "oui" comme argument
#
# quelques commandes pour voir tout ça : free -wth
# du -h /tmp/
# top
# cat /proc/meminfo
# swapon -s
# vmstat -s
#
#############################################################################
# Variables des couleurs shell
red="\e[31m"
redBold="\e[1;31m"
green="\e[32m"
greenBold="\e[1;32m"
yellow="\e[33m"
yellowBold="\e[1;33m"
blue="\e[34m"
blueBold="\e[1;34m"
redBgWhiteBold="\e[1;41m"
lightRedBgWhite="\e[1;42m"
NC="\e[0m"
FLASH="\n\e[5m${red}>>>${NC}"
blink="\e[5m"
FAIT="\n${redBgWhiteBold}>>> Fait !${NC}\n"
attention="\e[5m${red}Attention${NC}${red}"
#>>>>>>>>>>> B E G I N <<<<<<<<<<<<<
# Etre sûr que ce script est lancé en tant que root
if [ $(id -u) != 0 ]; then
echo -e ${redBold}${blink}"\n\tPrivilèges insuffisants pour exécuter ce script !\n\tRelancez ce script avec sudo\n"${NC}
exit
fi
# A appliquer à la finale, pour effacer les traces que l'on vient de faire
if [[ $1 == "clear" ]]; then
rm /$FILE 2>/dev/null
echo 3 > /proc/sys/vm/drop_caches
echo -e ${greenBold}"\n=> Suppression de \"/$FILE\" et du cache\n"${NC}
exit
fi
function cache()
{
if [[ $CACHE != "oui" ]]; then
echo 3 > /proc/sys/vm/drop_caches # Libère la mémoire des données du cache / tampon
echo -e ${yellow}"\n=> Cache vidé"${NC}
fi
}
# Avant de commencer on vide le cache, ou pas !
cache
# On crée le fichier s'il n'existe pas, c'est pour les tests consécutifs
if [ ! -e /$FILE ]; then
echo -e ${greenBold}"\n=> Création d'un fichier \"$FILE\" de $TAILLE Mo dans /, patientez..."${NC}
dd if=/dev/zero of=/$FILE status=progress conv=fdatasync bs=1M count=$TAILLE
cache
fi
echo -e ${greenBold}"\n=> Benchmark du tmpfs"${NC}; dd if=/$FILE of=/tmp/${FILE}_copie bs=1M conv=fdatasync
cache
echo -e ${greenBold}"\n=> Benchmark du disque"${NC}; dd if=/$FILE of=/${FILE}_copie bs=1M conv=fdatasync
cache
echo -e ${greenBold}"\n=> Suppression de \"/${FILE}_copie\""${NC}; rm /${FILE}_copie
echo -e ${greenBold}"=> Suppression des fichiers dans /tmp/"${NC}; rm -fr /tmp/*
echo -e ${redBgWhiteBold}"\n=> Si vous avez fini vos tests, vous pouvez maintenant supprimer \"/${FILE}\" et également le cache avec la commande \"sudo $0 clear\""${NC}
echo
source