Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 27/03/2014, à 22: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, à 13: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, à 03:12

grim7reaper

Re : Benchmark

claudius01 a écrit :

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

man 1 cut a écrit :

       -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, à 10:57

claudius01

Re : Benchmark

Bonjour,

grim7reaper a écrit :

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, à 14: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, à 15:41)

Hors ligne

#31 Le 02/04/2014, à 15: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, à 09: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