J'essaye d'écrire un script pour me faire gagner du temps, pour l'instant ce n'est pas gagné lol
Je voudrais rediriger la sortie de mes commandes de tri dans un fichier en plusieurs colonne. Le but étant de faire un graphique avec gnuplot. Donc une première colonne avec les abcisses, la seconde les ordonnées et voir une 3ème pour expérimenter les graphes 3D.
Pour l'instant mes sorties se mettent l'une à la suite de l'autre en une seule colonne
voici le bout de code que j'utilise dans un script bash :
#!/bin/bash
for var in 1 2 3 4 5 6 7 8 9 10; do cat /sys/kernel/debug/dri/2/amdgpu_pm_info | grep -w MCLK | cut -c 2-5>> test.txt & cat /sys/kernel/debug/dri/2/amdgpu_pm_info | grep -w SCLK | cut -c 2-5>> test.txt sleep 1
done
Le script récupère les infos des fréquences memory et gpu de la carte graphique toutes les secondes (le sleep 1) 10 fois.
J'aimerais mettre dans le fichier test.txt en 1ère colonne touts les résultats de ce qui est à gauche du "&" et en seconde colonne touts les résultats qui se trouve à droite de ce "&". En option, une 3ème colonne avec un autre paramètre pour le fun des graphes 3D
Merci beaucoup! Je viens d'essayer la commande paste et elle est facile d'utilisation
Après une recherche avec mon meilleur ami, un moteur de recherche très bien connu, je suis tombé sur la signification de UUOC : l'utilisation inutile de cut. Je mourrai moins bête
Est-il possible d'améliorer le bout de code posté dans mon message initial?
Aaaah j'étais tombé sur awk mais j'avais pas trop compris, une commande qui est un langage de programmation......
je te détaille un peu plus :
la commande
cat /sys/kernel/debug/dri/2/amdgpu_pm_info
donne en sortie
Clock Gating Flags Mask: 0x37bcf
Graphics Medium Grain Clock Gating: On
Graphics Medium Grain memory Light Sleep: On
Graphics Coarse Grain Clock Gating: On
Graphics Coarse Grain memory Light Sleep: On
Graphics Coarse Grain Tree Shader Clock Gating: Off
Graphics Coarse Grain Tree Shader Light Sleep: Off
Graphics Command Processor Light Sleep: On
Graphics Run List Controller Light Sleep: On
Graphics 3D Coarse Grain Clock Gating: Off
Graphics 3D Coarse Grain memory Light Sleep: Off
Memory Controller Light Sleep: On
Memory Controller Medium Grain Clock Gating: On
System Direct Memory Access Light Sleep: Off
System Direct Memory Access Medium Grain Clock Gating: On
Bus Interface Medium Grain Clock Gating: Off
Bus Interface Light Sleep: On
Unified Video Decoder Medium Grain Clock Gating: On
Video Compression Engine Medium Grain Clock Gating: On
Host Data Path Light Sleep: Off
Host Data Path Medium Grain Clock Gating: On
Digital Right Management Medium Grain Clock Gating: Off
Digital Right Management Light Sleep: Off
Rom Medium Grain Clock Gating: On
Data Fabric Medium Grain Clock Gating: Off
GFX Clocks and Power:
2000 MHz (MCLK)
900 MHz (SCLK)
74.255 W (VDDC)
16.0 W (VDDCI)
103.24 W (max GPU)
103.101 W (average GPU)
GPU Temperature: 51 C
GPU Load: 100 %
Les info qui m'intéresse sont uniquement les valeur (MCLK), (SCLK) et (average GPU) sans leurs unités, en formatant le fichier final, je saurai que la 1ère colonne est la fréquence mémoire, la seconde celle du core et la dernière celle de la puissance consomée par la carte.
Mon but final est un script d'automatisation mais j'essaie d'aller pas-à-pas.
il faudra peut-être consolider le script awk, si l'ordre des données peut changer, si des données peuvent ne pas figurer... en assignant des variables pour chaque expression recherchée.
alors xargs ne sera peut-être plus nécessaire, car c'est awk qui assurera le formatage.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Merci beaucoup!!!! Et même plus besoin de paste . C'est donc cela la puissance d'un utilisateur de Archlinux J'essaie de comprendre la syntaxe maintenant. J'y ai fait une petite modif mais ça fonctionne parfaitement
Dans la boucle de ce post, elle commence à 1 et se termine à 10 en s'incrémenant de 1.
Y a-t-il une syntaxe comme dans le C pour la boucle for? Je parle de la valeur de départ jusqu'à la valeur finale suivant une incrémentation qu'on peu spécifier? Je pense avoir vu -le pour "less equal" -e "equal" mais rien trouvé au sujet du step à incrémenter
Dans le langage C, si je ne m'abuse (un exemple) :
for (i=0, i < 100, i++)
{ code.....;
i=i+3;
}
J'aurai besoin d'une syntaxe pour ma boucle qui englobera celle-là. Partir d'une valeur, arriver à un seuil et monter graduellement d'une certaine valeur.
Ou peut-être utiliser une boucle while en fixant la valeur de départ.
Mais d'abord comprendre la syntaxe que tu m'as fournit pour awk!
Je fait un test et je post mon script. J'ai utilisé while
Bon ça fonctionne presque....... il s'arrête à la 1ère valeur limite et ne retourne pas au début la 1ère boucle. Le but étant de faire varier 2 paramètres (mclk et sclk), en fixant la 1ère et modifiant la seconde.
Donc, j'initialise mclk et sclk à 300.
D'abord je travaille avec sclk à la valeur initiale et je fais varier mclk jusque 350. Une fois mclk à 350 atteint, j'aimerais incrémenter sclk de 10 et rebelote pour mclk qui repart de sa valeur initiale jusque 350.... et ainsi de suite jusqu'à ce que sclk a atteint la valeur fixée de 350.
350 est une valeur pas trop grande pour pouvoir faire des tests du scripts assez rapide....
#!/bin/bash
freq_mem=300
freq_core=300
while [ $freq_core -le 350 ]
do
while [ $freq_mem -le 350 ]
do
/home/johnpierro/./wolfamdctrl -i 2 --core-state 7 --mem-state 2 --core-clock $freq_core --mem-clock $freq_mem
sleep 1
for i in {1..10}
do
awk '/\(([SM]CLK|average GPU)\)$/{print $1}' /sys/kernel/debug/dri/2/amdgpu_pm_info | xargs -n3 >> essai.txt
sleep 1
done
((freq_mem=$freq_mem+10))
done
((freq_core=$freq_core+10))
done
UP!!!!!!!! J'ai trouvé wahouuuuu
je devais ré-initialisé la veleur de freq_sclk tout juste après le début de la 1ère boucle!!!
donc voici le code :
#!/bin/bash
freq_mem=300
freq_core=300
while [ $freq_core -le 350 ]
do
freq_mem=300
while [ $freq_mem -le 350 ]
do
/home/johnpierro/./wolfamdctrl -i 2 --core-state 7 --mem-state 2 --core-clock $freq_core --mem-clock $freq_mem
echo 180 > /sys/class/drm/card2/device/hwmon/hwmon2/pwm1
sleep 10
for i in {1..10}
do
awk '/\(([SM]CLK|average GPU)\)$/{print $1}' /sys/kernel/debug/dri/2/amdgpu_pm_info | xargs -n3 >> essai.txt
sleep 1
done
((freq_mem=$freq_mem+10))
done
((freq_core=$freq_core+10))
done
Merci pour l'aide! Je peux t'appeler Maître?
Maintenant je peux passer à l'étape suivante : insérer une 4ème colonne venue d'un programme et non d'info systeme. Apparemment, je dois utiliser pyhton avec Json car cette valeur se trouve sur une page web générée par le dit programme..... C'est pas encore gagné mais j'y crois
Encore merci Dantonq (je viens de piger) pour l'aide que tu as donné.....
freq_mem doit être (ré)initialisée avant le début de sa boucle.
je trouve ça difficilement lisible (l'erreur que tu as faite ne serait pas apparue), les boucles while "arithmétique"; c'est d'autant plus moche qu'il y a une forme de boucle for pour ça.
- Edité par dantonq 6 mai 2018 à 18:42:56
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
J'ai lancé mon script avec les boucles while mais j'ai ré-écris le script avec les boucle for. J'essaierai cela lorsque le 1er script sera fini
#!/bin/bash
#d=1 f=10 p=2
#for (( i=d; i<=f; i+=p )); do : things; done
sleep 120 #attentdre 2min le temps pour le mineur de lancer complètement
freq_mem=300
freq_core=300
freq_mem_finale=2200
freq_core_finale=1400
p=10
for(( i=$freq_mem; i<=$freq_mem_finale; i+=$p ))
do
/home/johnpierro/OhGodATool/./ohgodatool -i 2 --mem-state 2 --mem-clock $freq_mem #modification de la fréquence mémoire
sleep 5 #attente de stabilisation de la modification de fréquence
echo 180 > /sys/class/drm/card2/device/hwmon/hwmon2/pwm1 #fixer le ventilo à 70% car ohgodatool modifie ce paramètre
for(( i=$freq_core; i<=$freq_core_finale; i+=$p ))
do
/home/johnpierro/OhGodATool/./ohgodatool -i 2 --core-state 7 --core-clock $freq_core #modification de la fréquence du core
sleep 5 #attente de stabilisation de la modification de fréquence
echo 180 > /sys/class/drm/card2/device/hwmon/hwmon2/pwm1 #fixer le ventilo à 70% car ohgodatool modifie ce paramètre
for i in {1..10}
do
awk '/\(([SM]CLK|average GPU)\)$/{print $1}' /sys/kernel/debug/dri/2/amdgpu_pm_info | xargs -n3 >> /home/johnpierro/monitoring_580.txt #récupère les fréquences actuelles et la puissance dans un fichier .txt
sleep 1
done
done
done
Si jamais tu possèdes une carte ATI récente (famille RX et Vega), ce programme permet de OC et UC ces cartes graphiques en CLI jusqu'au driver graphique amdgpu-pro 17.50. Il est ineffectif avec le dernier sorti 18.20. Il est possible de passer par les moyens recommandés par AMD mais c'est limité. Voici un petit lien qui explique comment faire https://www.phoronix.com/scan.php?page=article&item=radeon-rx580-oc&num=1 . Cette méthode permet un OC par % (+3% par exemple) sans pour autant pouvoir fixer une valeur précise de Mhz et elle ne permet pas de UC, les nombres négatifs ne sont pris en compte. D'où cette bénédiction de ohgodatool
Pour le script,effectivement! Mais il n'y avait pas que ça comme erreur :
La variable i est déjà utilisée dans la dernière boucle, donc pour la 1ère il faut changer...
Le paramètre que prend les variables $freq ne bougent pas, il faut les remplacer avec les varibales qui sont incrémentées par les boucles donc par j et k par exemple.
#!/bin/bash
#d=1 f=10 p=2
#for (( i=d; i<=f; i+=p )); do : things; done
#sleep 120 #attentdre 2min le temps pour le mineur de lancer complètement
freq_mem=300
freq_core=300
freq_mem_finale=2200
freq_core_finale=1400
p=10
for (( k=$freq_mem; k<=$freq_mem_finale; k+=$p ))
do
/home/johnpierro/OhGodATool/ohgodatool -i 2 --mem-state 2 --mem-clock $k #modification de la fréquence mémoire
#sleep 5 #attente de stabilisation de la modification de fréquence
echo 180 > /sys/class/drm/card2/device/hwmon/hwmon2/pwm1 #fixer le ventilo à 70% car ohgodatool modifie ce paramètre
sleep 5
for(( j=$freq_core; j<=$freq_core_finale; j+=$p ))
do
/home/johnpierro/OhGodATool/ohgodatool -i 2 --core-state 7 --core-clock $j #modification de la fréquence du core
#sleep 5 #attente de stabilisation de la modification de fréquence
echo 180 > /sys/class/drm/card2/device/hwmon/hwmon2/pwm1 #fixer le ventilo à 70% car ohgodatool modifie ce paramètre
sleep 5
for i in {1..10}
do
awk '/\(([SM]CLK|average GPU)\)$/{print $1}' /sys/kernel/debug/dri/2/amdgpu_pm_info | xargs -n3 >> /home/johnpierro/monitoring_580.txt #récupère les fréquences actuelles et la puissance dans un fichier .txt
sleep 1
done
done
done
Voilà, je suis satisfait de ce script, maintenant je bosse sur la commande awk. Mon but est d'ajouter une 4ème colonne. J'ai trouvé un script par hasard sur le net en php qui fait les requêtes nécessaires. https://github.com/bobdobs/claymore-ethereum-log-genereator J'y connais absolument rien en php et Json donc j'utiliserai ce script tel quel. A coup de awk et de paste au final je serai capable de le faire. Donc maintenant, travailler sur awk Et Gnuplot aussi, je posterai un peu le résultat obtenu.
Je rencontre malheureusement un problème de taille, l'instabilité du système. Le système plante donc ne va pas au bout de son travail et c'est un peu dommage.... Il doit pas supporter les changements de fréquences intempestifs Il va falloir diminuer la plage de travail.
Merci pour ton coup de main, il a été très précieux.
UP! Voici 2images faites avec Gnuplot où on peu tirer 1 bonne conclusion :
Il y a un saut de consommation entre certaines fréquences. La 4ème colonne qui représentera la vitesse permettra de dire si c'est justifié d'être sur ces fréquences en question.
AAArgh compliqué le awk. Ca donne tellement d'idées en plus
Me voilà en tête de rajouter une 5ème colonne qui fait la division entre la 4ème colonne et la 3ème. Et avant de faire cette opération, enlever les lignes inutiles ou erronées, trouver le max de la 4ème colonne, faire des comparaisons.......
Dur dur l'automatisation Il faut penser à tout et si il y a une petite erreur de syntaxe ou de formatage, beh c'est foutou
Je passe le post en résolu car mon 1er problème est corrigé. La suite, il suffit de chercher
- Edité par redman6150 8 mai 2018 à 17:25:09
Redirection de plusieurs sorties dans un fichier
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique