Le Forum de l'Alliance Francophone

Nouvelles:

Auteur Sujet: [Linux] Script pour arrêter Boinc suivant la charge  (Lu 7759 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne erdnaxeli

  • Boinc'eur Confirmé
  • ***
  • Messages: 418
  •   
    • 86 231 !
Voici un petit script qui permet d'arrêter boinc si la charge de votre pc (sous linux) dépasse une certaine valeur.

Le script se base sur la charge de la dernière minute pour arrêter ou non boinc, afin d'être réactif; mais il se base sur la charge moyenne sur les 5 dernières minutes pour le relancer, afin d'être sur que la charge ait bien baissé et de ne pas faire clignoter boinc (la charge sur la dernière minute peut augmenter ou diminuer brusquement, la charge sur les 5 dernières minutes tempère ces pics).

Voici le script : http://pastebin.com/erLTJF7R
« sh boinc-loadavg.sh » pour le lancer. Il y a quelques réglages à spécifier dans le fichier. Pas besoin de tâche cron, le script fait une boucle infinie (la fréquence est réglable).

edit : mise à jour : http://pastebin.com/PS3XXUeC (bug fix).
« Modifié: 02 September 2011 à 14:02 par erdnaxeli »



jip

  • Invité
Réponse #1 le: 01 September 2011 à 22:29
je ne comprends pas un truc dans ton script.

si c'est une boucle infinie, pourquoi l'état dans un fichier temp au lieu de le mettre dans une variable du script ??

car si il n'y a pas de sortie du script la variable sera maintenue, non ?



Hors ligne [AF>Libristes] Dudumomo

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 6104
  •   
    • Find your home in Saigon
    • E-mail
Réponse #2 le: 02 September 2011 à 01:50
Et puis se baser sur le load ca ne sert pas a grand chose vu que de toute facon boinc a la plus petite priorite....
Niveau processeur ca ne gene pas.
Cote RAM okay, ca peut faire ralentir le PC.

Mais bon c'est en tout cas sympa de partager ton travail !!!
 :jap:

News & Tutorial on how to host your server: http://freedif.org


Hors ligne npetix

  • Boinc'eur Junior
  • **
  • Messages: 72
  •   
Réponse #3 le: 02 September 2011 à 04:44
cool comme script, ca donne des idées
voila un truc qui pourrai automatiser le réglage en fonction du cpu

charge=2
cores=`cat /proc/cpuinfo | grep 'cpu cores' -m 1| awk '{print$4}'`
loadavg_max= expr $cores + $charge
loadavg_min=$cores
:hello:

GNU/Linux Cruncher.


Hors ligne erdnaxeli

  • Boinc'eur Confirmé
  • ***
  • Messages: 418
  •   
    • 86 231 !
Réponse #4 le: 02 September 2011 à 08:49
Jip : Heu oui, c'est stupide, je ne sais pas pourquoi j'ai fait ça   :pt1cable:

Dumono : J'ai remarqué que sur Gentoo quand je lance emerge qui fait gratter le disque dur la charge monte assez vite. Arrêter Boinc permet de modérer la montée. De façon générale, j'ai un disque dur un peu faible, et j'ai le sentiment que quand les i/o s'accumulent ils ne sont pas prioritaire sur Boinc, ce qui fait que la charge explose (en tout cas arrêter Boinc permet de revenir à une situation normale beaucoup plus rapidement).

npetix : Pas mal comme idée, mais chez moi (deux cores) la charge est toujours supérieur à 5. Je préfère laisser chacun régler la charge comme il le souhaite.


Voici une version sans fichier temporaire inutile : http://pastebin.com/hcnxH5Y5


jip

  • Invité
Réponse #5 le: 02 September 2011 à 09:16
Jip : Heu oui, c'est stupide, je ne sais pas pourquoi j'ai fait ça   :pt1cable:

non pas stupide. j'ai juste eu l'impression que tu avais démarré en ne pensant pas faire une boucle infinie et que ça allait tourner avec un cron. et dans ce cas tu aurais eu besoin de stocker en moins "volatile" dans un fichier plutôt qu'une variable qui aurait été libéré en sortie de script.

donc j'ai d'abord pensé à un changement de stratégie en cours d'écriture.  ;) Non ?



jip

  • Invité
Réponse #6 le: 02 September 2011 à 09:26
sur le lien que tu donne http://pastebin.com/hcnxH5Y5, j'ai : "Unknown Paste ID!" ....

ah aussi sinon, du coup, je ne sais pas comment tu as géré la variable d'état pour boinc, mais pour réduire l'empreinte mémoire de cette variable, au lieu de gérer une chaine (dont l'espace mémoire dépend du nombre de caractères), tu peux gérer une valeur numérique similaire à un booléen (donc un 0 ou 1 dans une variable), puisque tu n'as que 2 états (stoppé ou non).



Hors ligne erdnaxeli

  • Boinc'eur Confirmé
  • ***
  • Messages: 418
  •   
    • 86 231 !
donc j'ai d'abord pensé à un changement de stratégie en cours d'écriture.  ;) Non ?

Oui initialement c'était une tache cron toute moche que j'ai voulu améliorer, bien vu :P.

Voici le bon lien : http://pastebin.com/erLTJF7R


jip

  • Invité
Réponse #8 le: 02 September 2011 à 20:19
J'aurais bien vu une petite modif sur une partie du code :

boinc_crunching=1

while true; do

    read -r loadavg1 loadavg5 loadavg15 ratio_taches_actives last_PID <<< `cat "/proc/loadavg"`

    if [ "${loadavg1//.*}" -ge "${loadavg_max}" -a $boinc_crunching -eq 1 ]; then
        ${boinccmd} --passwd ${password} --set_run_mode never
        boinc_crunching=false

    elif [ "${loadavg5//.*}" -lt $loadavg_min -a ! $boinc_crunching -eq 0 ]; then
        $boinccmd --passwd $password --set_run_mode $boinc_calcul_mode
        boinc_crunching=true
    fi

    sleep $wait
done

je n'ai pas vérifier le bon fonctionnement de ce changement, donc à vérifier coté syntaxe et valider par des tests.



Hors ligne erdnaxeli

  • Boinc'eur Confirmé
  • ***
  • Messages: 418
  •   
    • 86 231 !
Réponse #9 le: 02 September 2011 à 21:04
Ça y est, Jip me refait mon script ! Je l'attendais  :lol:

Bon, par contre je comprends pas tout. Je suis allé voir un tuto bash mais quand même, ça veut dire quoi ça : ${loadavg1//.*} ?
De ce que j'ai compris ${var//motif/remplacement} équivaut à  s/motif/remplacement/g, ou s/motif//g pour ${var//motif}}. Je suppose qu'on peut mettre des regex, donc tu voudrais vider la variable ? Je pense que c'est pas ça, donc j'en déduis que je n'ai pas compris  :pt1cable:


jip

  • Invité
Réponse #10 le: 02 September 2011 à 22:01
Ça y est, Jip me refait mon script ! Je l'attendais  :lol:

Bon, par contre je comprends pas tout. Je suis allé voir un tuto bash mais quand même, ça veut dire quoi ça : ${loadavg1//.*} ?
De ce que j'ai compris ${var//motif/remplacement} équivaut à  s/motif/remplacement/g, ou s/motif//g pour ${var//motif}}. Je suppose qu'on peut mettre des regex, donc tu voudrais vider la variable ? Je pense que c'est pas ça, donc j'en déduis que je n'ai pas compris  :pt1cable:

non, j'ai juste viré (comme toi) tout ce qui est à partir du point et tout ce qui est derrière. pour en faire un entier pour le test  ;)

la variable "boinc_crunching" pourrais aussi prendre les valeurs "true" et "false" pour les tester directement sans comparaison à 0 ou 1.
« Modifié: 02 September 2011 à 22:03 par [AF>Libristes] Jip »



Hors ligne erdnaxeli

  • Boinc'eur Confirmé
  • ***
  • Messages: 418
  •   
    • 86 231 !
Réponse #11 le: 03 September 2011 à 09:02
Ah bah oui, c'est pas une regex, c'est juste un bon vieux joker *. Ok, j'ai compris  :hyperbon:


jip

  • Invité
Réponse #12 le: 03 September 2011 à 09:17
tu vois, en fait c'est assez simple mais pourtant puissant et efficace la substitution de variables ...

et pourtant je suis encore loin de tout maitriser et exploiter de ce coté là ...  ;)

donc tu peux en user et en abuser, et surement aller plus loin que moi. :origin: