#26 Le 27/03/2014, à 21:12
- ffblainvillais
Re : Benchmark
Salut,
1/autant pour moi, je ne l'avais pas relu ...
2/ oui je sais bien, mais mon programme se limitera au temps d'écriture de plein de petit fichiers et a celui d'un gros fichier, et en fonction de ce temps, j'attribuerais des points tout betement !
voici mon code
###Test petit fichiers###
i=0
utime1=$(cat /proc/$$/stat | cut -d " " -f14)
stime1=$(cat /proc/$$/stat | cut -d " " -f15)
while [ "$i" != "1" ]
do
i=$(($i+1))
touch petitfichiers$i.txt
echo "remplissage de fichier" >> petitfichiers$i.txt
done
utime2=$(cat /proc/$$/stat | cut -d " " -f14)
stime2=$(cat /proc/$$/stat | cut -d " " -f15)
utime=$((10 * ($utime2-$utime1)))
stime=$((10 * ($stime2-$stime1)))
total=$(($utime+$stime))
tempstotal=`echo $total | awk '{printf("%2d.%03d\n", $0 / 1000, $0 % 1000);}'`
echo "Le disque dur a mis $tempstotal secondes pour écrire les petit fichiers"
###Test Gros fichiers###
utime11=$(cat /proc/$$/stat | cut -d " " -f14)
stime11=$(cat /proc/$$/stat | cut -d " " -f15)
touch grosfichier.txt
while [ "$i" != "1000" ]
do
i=$(($i+1))
echo "remplissage de fichier" >> grosfichier.txt
done
utime21=$(cat /proc/$$/stat | cut -d " " -f14)
stime21=$(cat /proc/$$/stat | cut -d " " -f15)
utime1=$((10 * ($utime2-$utime1)))
stime1=$((10 * ($stime2-$stime1)))
total1=$(($utime1+$stime1))
tempstotal1=`echo $total1 | awk '{printf("%2d.%03d\n", $0 / 1000, $0 % 1000);}'`
echo "Le disque dur a mis $tempstotal1 secondes pour écrire le gros fichier"
mais le calcule du temps n'est pas le bon, il me faut le temps réel par exemple celui donné par time, je voudrais le mettre dans une variable ! j'ai éssaye
(time monscript) 2>&1 | grep real | cut -d " " -f2
mais cela ne marche pas... saurais tu comment faire?
3/j'ai bien cherché a droite et a gauche mais je ne trouve pas ce que je recherche, j’essaie d'adapter a mon script mais cela ne marche pas toujours, c'est pour cela que je vous demande par exemple quand je fais :
touch >> /home/...../Bureau/dossierquinexistepas/grosfichier.txt
je voudrais qu'il affiche un message d'erreur sur l'erreur standard (déjà est ce que cela correspond a un
touch : cannot touch ............................................................... no such files or directory
? )
ensuite je voudrais qu'il quitte mais je ne sais pas comment faire, et ce script me crée quand meme mes fichier sur le bureau (ce que je ne veut surtout pas !)
merci encore !
Hors ligne
#27 Le 28/03/2014, à 12:02
- claudius01
Re : Benchmark
Hi,
1) Pb du "time ...": Effectivement avec une solution
[~/Public/BenchMark] $ (time proc.sh) 2>&1 | grep real | cut -d " " -f2
real 0m9.927s
[~/Public/BenchMark] $ (time proc.sh) 2>&1 | grep real | awk '{print $2}'
0m9.868s
Faut se méfier de 'cut' qui n'aime pas les 'tab' et autres 'multiple espaces'
=> Se replier sur 'awk' dans ce cas
2) 'touch' créé (s'il a le droit et si le path est correct) un fichier de taille nulle si ce fichier n'existe pas
3) Pour sortir prématurément, utiliser 'exit' avec un numéro code de retour en argument et différent de 0 qui correspond dans les us et coutumes à Ok
Best regards, A+
--
Claudius
Hors ligne
#28 Le 29/03/2014, à 02:12
- grim7reaper
Re : Benchmark
Faut se méfier de 'cut' qui n'aime pas les 'tab' et autres 'multiple espaces'
=> Se replier sur 'awk' dans ce cas
Pas nécessairement, par défaut cut utilise tab comme séparateur
-d, --delimiter=DELIM
use DELIM instead of TAB for field delimiter
Donc :
[~/Public/BenchMark] $ (time proc.sh) 2>&1 | grep real | cut -f2
devrait donner la sortie attendue.
Hors ligne
#29 Le 31/03/2014, à 09:57
- claudius01
Re : Benchmark
Bonjour,
Donc :
[~/Public/BenchMark] $ (time proc.sh) 2>&1 | grep real | cut -f2
devrait donner la sortie attendue.
Je confirme que cela donne bien la sortie attendue.
Cordialement, A+
--
Claudius
Hors ligne
#30 Le 02/04/2014, à 13:46
- ffblainvillais
Re : Benchmark
salut merci a vous deux pour vos réponses ! comment cela ce fait que quand dans mon script qui sert a lancer mes script pour le DD ou le proc, je met genre
test=(time dd.sh) 2>&1 | grep real | cut -f2
quand j'appele la variable, cela ne me lance pas le script?
sinon comment faire pour lancer mon script sur tout les coeur du processeur?
(proc.sh)&
ne marche pas, un seul coeur s'y met....
sinon je ne sais pas pourquoi mais mon script pour le proc met met toujours des valeurs impossibles quand il est lancé par
taskset -c 1 azerty.sh
alors que le même script sur un le coeur 0 marche parfaitement .... mon script :
i=0
### Temps avant ###
utime1=$(cat /proc/$$/stat | cut -d " " -f14)
stime1=$(cat /proc/$$/stat | cut -d " " -f15)
tpstot1=$(cat /proc/stat | cut -d " " -f2 | head -2)
### Boucle ###
while [ "$i" != "1000000" ]
do
i=$(($i+1))
done
### Temps aprés ###
utime2=$(cat /proc/$$/stat | cut -d " " -f14)
stime2=$(cat /proc/$$/stat | cut -d " " -f15)
tpstot2=$(cat /proc/stat | cut -d " " -f2 | head -2)
### Calcule pourcentage###
haut=$(($utime2-$utime1))
bas=$(($tpstot2-$tpstot1))
resultat=$( echo "(100*($haut/$bas))"| bc -l)
### Calcule du temps ###
utime=$((10 * ($utime2-$utime1)))
stime=$((10 * ($stime2-$stime1)))
total=$(($utime+$stime))
tempstotal=`echo $total | awk '{printf("%2d.%03d\n", $0 / 1000, $0 % 1000);}'`
temps100pr100=$( echo "($tempstotal*($resultat/100))"| bc -l)
### Print ###
echo
echo
echo "Processeur utilisé a $resultat%"
echo "ce calcule a été executé en "$tempstotal" secondes"
echo
echo "Le processeur avec 100% de ses capacitées aurait fait ce calcule en "$temps100pr100" secondes"
echo
echo
merci !
Dernière modification par ffblainvillais (Le 02/04/2014, à 14:41)
Hors ligne
#31 Le 02/04/2014, à 14:29
- ffblainvillais
Re : Benchmark
aufaite ! j'aimerais aussi savoir comment utiliser perror()
par exemple je veut lancer mon script dd.sh pour qu'il crée les fichier dans un dossier spécifique indiqué par un chemin , comment faire pour :
1/ indiquer dans un script le chemin ou devra etre executé mon autre script?
2/si ce chemin n'existe pas, afficher un message grace a perror() ?
encore meerci
Hors ligne
#32 Le 03/04/2014, à 08:11
- ssdg
Re : Benchmark
$ test=echo lala; echo $test; $test
-bash: lala : commande introuvable
$ test="echo lala"; echo $test; $test
pour ta première question, il te faut des guillemets
pour "tout les coeurs", comme tu n'as qu'un flow d'execution, tu n'as pas besoin de plusieurs coeurs. (pour l’interpréteur de commandes)
tu pourrais faire un second script et le lancer une fois par coeur avec taskset, mais du coup, ton script devra être adapté.
s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.
Hors ligne