Utilitaire, Renice et priorité application

AlexP8

Membre actif
23 Décembre 2006
101
1
39
Bonjour,
Je cherche un utilitaire qui me permettrait de donner des priorité d'exécution à une application .
(en effet, si par exemple j'ai un soft qui doit transformer pleins d'images, que je lance une tache et que pendant qu'elle s'exécute je vais surfer sur le forum de macg.co, je me rends compte que cette tâche n'avance plus aussi vite que si je restais sur le dit soft).

En cherchant sur le web et dans ce forum , je trouve des traces d'articles assez vieux (plusieurs années) qui parlent d'une commande unix : renice, qui permet de donner une priorité d'exécutions aux différentes tâches.

Du coup je suis allé voir sur l'app store si il n'y avait pas une petite application dédiée, et en tappant " renice " , je ne trouve rien :( .

Du coup , je me demande : est ce que cette commande est toujours d'actualité et pertinente, et si oui , auriez vous un soft à conseiller qui peut gérer ça ?


merci
Alex
 
Merci Jean jd63
j'avais vu ce soft , mais il est vieux ! Il a été concu pour la 10.2 ! Est ce que tu t'en es déjà servi ?
 
renice existe toujours. Simplement, c'est une commande en mode texte, dans un shell (dans Terminal, quoi).
On doit l'appliquer au processus voulu (processus que tu peux retrouver avec le Moniteur d'Activité ou avec la commande pgrep dans le shell).
 
oui , merci . Effectivement si on doit l'appliquer à chaque fois en ligne de commande ce n'est pas vraiment pratique d'utilisation....
 
Tu peux faire un script et nicher ce script dans une action Automator ou un script AppleScript.
 
Merci jeand : en fait l'application n'est même pas utilisable avec la dernière version de mac.
Alors je viens d'essayer la commande renice (je vais expliquer ci dessous) mais ça n'a pas l'air concluant...
Pour faire un script, j'avoue ne pas y connaitre grand chose (pour ne pas dire rien... j'ai vaguement fait un script pour mail il y a qq années). Il me semble donc que pour faire le script il fait le PID de l'application , or j'imagine que celui ci change à chaque fois ? non ?


voilà ce que j'ai cru comprendre sur la commande renice, mais ça ne semble pas marcher . Peut etre je l'utilise mal.
Pour connaitre la valeur de priorité d'une application , il faut , dans le terminal taper :

ps -lp PID de l'application .
En l'occurence, le PID qui m'interesse est 711 => ps -lp 711

ça donne comme résultat :
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD

501 711 1 1004084 0 46 0 9077376 1679616 - R 0 ?? 327:35.15 /Applications/Ad

La valeur qu'on recherche c'est NI
ici NI est à 0.

Ensuite, je dois changer les priorité avec renice. Mais avant de pouvoir le faire, je dois me logger en mode "root" pour avoir les permissions necessaires. Pour se faire :
tappons : sudo -s
puis le mot de passe est demandé
Password:
Enfin , on arrive à qqch comme ça .
bash-3.2#

là on va utiliser la commande renice
renice -n (une valeur numérique qui va de -20 à 20 . Sachant que -20 donne le plus de priorité et 20 le moins de priorité) -p PID
dans mon cas :
renice -n -20 -p 711


pour verifier : ps -lp 711
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD

501 711 1 1004084 0 4 -20 10917656 2920844 - S< 0 ?? 369:49.65 /Applications/Adobe Bridge CC/Adobe Bridge CC.ap


Voilà !


Alors qu'est ce que ça change ????
Franchement .... pas grand chose !! meme rien du tout dans l'utilisation que je fais du soft .

Pour mesurer je regarde le moniteur d'activité et l'historique du processeur (les petits cubes verts qui s'empilent quand le pocesseur est utilisé à fond) => qu'est ce que je constate après avoir passé cette ligne de commande : rien ! ! le processeur en travail pas à fond si je ne suis pas sur la tache .
Par contre, dès que je me mets sur le soft en question, ça y est , le processeur se remet à carburer et les cubes verts s'empilent ! et le processeurs chauffe .

Ce que j'en conclue .
Ou bien qqch m'échappe : et svp dites moi quoi ?
ou bien la commande renice n'a pas d'effet notoire dans l'utilisation du cpu ici ...

Une idée quelqu'un ?
 
Note que tu peux faire en sorte de ne pas avoir besoin d'entrer de mot de passe pour appeler renice ; ça peut être pratique.
 
Salut Alex.

Rien que quelques gloses à propos de ton message #8 -->

- a) "le PID de l'application : j'imagine que celui ci change à chaque fois ? non ?" --> oui : il n'est donc pas possible d'employer une valeur numérique constante comme IDentifiant du Processus d'une application.

--------------------​

- b) concernant l'emploi de la commande ps : afin de ne pas être noyé dans un flot d'informations indésirées, mais de n'obtenir exclusivement que les informations pertinentes, la commande pourrait avoir la forme syntaxique suivante :

Bloc de code:
ps -o [KEYWORD1,KEYWORD2,...] PID

--> commentaire : introduire l'option -o = "Display information associated with the space or comma separated list of keywords specified" (afficher l'information associée à une série de n mots_clés séparés entre eux par des virgules - la liste des keywords opératoires étant donnée dans la page de man). Ce qui donnerait par exemple :

Bloc de code:
ps -o nice,%cpu,%mem 711

--------------------​

- c) concernant l'emploi de la commande renice : pas besoin de passer dans le shell de root -bash-3.2# pour la passer - une simple invocation de sudo en préfixe de commande suffit (avec authentification par le mot-de-passe admin en aveugle à la volée)

Par ailleurs, l'emploi de l'option -n affecte la priorité constituée d'un processus x d'un simple "incrément de traitement de faveur" (nice valeur increment) ; l'absence d'emploi de l'option -n affecte la priorité constituée d'un processus x d'un "changement de valeur" en terme de priorité --> il est alors présumable qu'une commande sans l'option -n a plus de force.

L'échelle numérique des grandeurs attribuables va de -20 à +20. Les grandeurs négatives augmentent la priorité, les grandeurs positives diminuent la priorité. Inversion (le "plus" valant "moins", le "moins" valant "plus") à première vue déconcertante - je me risque à l'interpréter ainsi (pour lui donner sens à l'aide d'un peu de rhétorique) : une grandeur positive augmente l'écart du processus au noyau de prise en charge primaire / une grandeur négative diminue l'écart du processus au noyau de prise en charge primaire.

--> il s'ensuit que tu pourrais essayer une commande du type :

Bloc de code:
sudo renice -20 711

--------------------​

☞ ces gloses dites, je me demande - comme toi - si les effets produits par la commande renice ne restent pas seulement marginaux.
 
Merci macomaniac ,
merci pour ce petit cours et ces éclaircissements .
Effectivement, c'est plus propre plus concis et plus clair écrit comme ça :D
Bon .... par contre , ce n'est pas plus efficace ! lol .

peut etre que la question de priorité des processus n'est plus pertinente (maintenant qu'il y a plusieurs processeurs) ?
Peut etre qu'il faudrait chercher si il n'existe pas une fonction qui gère le partage des taches au processeurs (bon ça revient un peu au meme).

Peut etre faudrait il comprendre ce qui se passe lorsque je passe d'une application à l'autre ? Pourquoi une application qui n'est pas en premier plan "perd" de la priorité ? et pourquoi dès que je la mets en premier plan (c'est à dire l'application sélectionnée) elle se met à carburer à fond ?

Pour apporter un peu d'eau au moulin, j'ai essayé une petite application sensé rebooster les taches en fond : CPU Speed Accelerator => résultat : rien ! inefficace .......

Si quelqu'un à une idée .... ?
 
Regarde cet article.
À sa lecture, on voit plutôt bien pourquoi utiliser nice et renice ne semble pas apporter les résultats extramidables que tu espères.

Quant aux commandes. Mettons que tu t'intéresses à la priorité de TextEdit ( :D ) :
a) le pid se récupère ainsi :
Bloc de code:
myPID=$(pgrep -i textedit)
b) la priorité :
Bloc de code:
myPRI=$(ps -o nice= $myPID)
c) ensuite tu peux calculer une nouvelle priorité myPRI :
Bloc de code:
myPRI=$(( myPRI - 10 ))
d) puis modifier la priorité effective du processus :
Bloc de code:
sudo renice $myPRI $myPID

Comme je l'indiquais ci-dessus, on peut modifier la configuration de sudo pour faire en sorte que l'appel sudo renice ne requière pas de mot de passe (tout en conservant cette nécessité pour les autres commandes : restons sérieux !), afin de faciliter l'exécution d'un script par exemple.
 
L'aimable auteur de l'article cité par bompi - Topher Kessler :

464733_original.jpg

en porteur de barbe (voire seulement de barbichette) devant, quotidiennement, arranger cette pilosité selon de complexes critères d'équité, était on ne peut mieux habilité à traiter des procédés du kernel pour démêler prioritairement les fils à passer au CPU. Car c'est bien de justice distributive qu'il est question, et de la limite des passe-droits dans cette population stratifiée (ou comment la politique est au cœur d'un Système Logique)...

En résumé : les processus ou fils relèvent de 4 strates de priorité descendante : 01 = niveau_kernel ; 02 = niveau_horloge ; 03 = niveau_Système ; 04 = niveau_standard. En supposant le processus d'une application comme «TextEdit» (
361608_original.png
) relevant de la strate 04, une commande renice visant à augmenter le degré prioritaire de ce processus n'impactera - si elle le peut - que la file d'attente des processus ressortissant de la strate 04, en promouvant éventuellement le processus «TextEdit» en tête de file des processus standards. Le processus «TextEdit» restera donc devancé par les fils relevant des strates davantage prioritaires 01 à 03.

La strate - pour ne pas dire "caste" - d'appartenance d'un processus fixe donc des limites en priorité "absolue" qui ne peuvent pas être transgressées --> un processus bénéficiaire de la commande renice ne peut donc que grimper dans la file d'attente spécifique des processus dont le "censeur" du kernel (le gestionnaire d'emploi du temps processeur : kernel_scheduler) traite les vœux. Mais ce passe-droit accordé par la commande renice dans les limites d'une strate de processus, peut très bien rester sans effets notables relativement à d'autres de la même strate, si ces derniers ont d'autres arguments à faire valoir auprès du "censeur" (kernel_scheduler), comme l'emploi de ressources hardware (carte graphique et pourquoi pas Wi-Fi ?).

Se pourrait-il que «Safari» (ou un autre navigateur) s'arrange pour faire valoir un tel argument neutralisant le passe-droit que la commande renice accorde à l'application lancée par Alex - concurrence gérée dans le cadre de la strate 04 des processus standard ? En contre-exemple : dès qu'on lance un processus d'encodage de «HandBrake», une consommation phénoménale de CPU intervient qui prend la main hégémoniquement sur les autres processus utilisateur : faudrait-il en déduire que «HandBrake» est une application qui relève du niveau_horloge ("temps réel") = strate 02 et qui, par là-même, se trouve privilégiée juste en-dessous des processus directs du noyau (et, de fait, «HandBrake» recourt à un décompte d'horloge pendant tout son processus - comme «Carbon Copy Cloner» par exemple aussi) ?

Étant donné ces supputations, je propose un test à Alex. Il existe 2 commandes d'édition des priorités : nice et renice (je profite de mon élan rhétorique pour revenir sur l'emploi de ce mot anglais : "nice", qui veut dire "gentil" - pris ici dans une acception de "courtoisie civile" --> la "courtoisie" d'un processus l'est donc à l'égard des autres : plus un processus est "courtois", plus il s'efface civilement pour laisser à d'autres la place dans la file d'attente, moins par conséquent il se rend prioritaire : il se laisse "passer devant" ; au contraire, moins un processus est "courtois", plus il se montre vachard en remontant incivilement la file d'attente pour "passer devant" les autres : il grimpe donc en position de priorité).

- renice est une commande qui prend un processus en chemin pour affecter sa priorité relative dans la file d'attente constituée d'une strate. Pour l'application d'Alex, le processus ayant été lancé par lui qui en est l'exécutant et semble-t-il relevant de la strate 04, se fait bousculer par les arguments que fait valoir un navigateur internet, également lancé par lui et relevant de la même strate des priorités.

- nice, par contre, est une commande qui lance un processus en lui affectant une priorité et qui, pour ce faire, doit opérer en mode root --> le processus ne va donc plus relever de la strate 04 (processus ordinaires d'utilisateur), mais de la strate 03 (processus-Système dont l'opérateur est root). La commande nice est donc susceptible de faire sauter une strate à un processus utilisateur via le lancement de l'application en mode root. La commande ne se réfère évidemment pas à un PID, puisque le processus de l'application n'est pas déjà lancé, mais à l'exécutable (le fichier exec) recelé dans l'arborescence de l'application at: /Applications/Machin.app/Contents/MacOS/Machin (pour accéder graphiquement à cet exécutable de l'application : sélectionner l'icône de l'app avec un clic secondaire (aka ctrl_clic) --> afficher le contenu du paquet > dossier Contents > dossier MacOS > exécutable --> faire un glisser-déposer dans la fenêtre du «Terminal» au bon emplacement.​

Syntaxe de la commande :

Bloc de code:
sudo nice -n -20 /Applications/Machin.app/Contents/MacOS/Machin

--> l'application se lance en droit root (donc présumablement dans la strate 03 des priorités-Système) avec le passe-droit -20 qui lui affecte le maximum d'incivilité vacharde à l'endroit des autres et donc le maximum de priorité relative dans sa strate) --> il suffit de lui assigner la tâche voulue --> est-ce que la concurrence d'un navigateur se trouve par là limitée ?

[NB. L'utilisateur de l'application étant root, il y a des risques que l'application se réfère au dossier de compte de root comme logement d'utilisateur pour proposer un point de chute par défaut du produit d'un encodage. Si le "Bureau" est proposé par défaut, il y a des chances que cela corresponde à l'adresse : /private/root/Desktop et pas au Bureau de session de l'utilisateur à l'adresse : /Users/user/Desktop. Vérifier le point de chute renseigné par défaut pour l'éditer s'il y a lieu...]
 
Dernière édition par un modérateur:
Bonjour Macomaniac et Bompi ,

merci pour vos réponses . Il m'a fallu un certain temps pour tout comprendre l'article en anglais (il faut s'accrocher quand on a pas un super niveau) . Heureusement le roman littéraire de Macomaniac :p résume bien la chose .

Alors je viens de tester les deux commandes, et je ne vois pas de résultat significatif .


Dans les deux cas, lorsque le système n'est pas surchargé (par d'autres applications gourmandes), la tache qui nous intéresse tourne au fond à un niveau moyen . Lorsqu'on va dessus, on voit dans le moniteur d'activité une augmentation de l'utilisation des CPU .


Dans les deux cas, lorsque le système surchargé (j'ouvre volontairement plusieurs applications gourmandes), la tache qui nous intéresse, tourne beaucoup beaucoup moins bien en tache de fond. Et lorsqu'on va dessus, elle retrouve toute sa vigueur.


Quant à l'utilisation de la commence "nice" , effectivement elle ouvre le soft dans une forme root , on perd alors toutes les couches utilisateurs (préférence, langue, etc).

Mais ça ne marche pas plus vite pour autant :( .


Bien essayé en tout cas !
 
Afin d'épuiser les possibilités, Alex, il te resterait à tester une double commande renice. Suppose que l'identifiant du processus lancé de ton éditeur d'images soit toujours 711 et que le processus lancé de ton navigateur web soit 863, alors tu pourrais enchaîner en guise de test

Bloc de code:
sudo renice -20 711
sudo renice +20 863

afin d'accorder le maximum de priorité relative à l'éditeur d'images (en l'affectant du minimum de courtoisie), et le minimum de priorité relative au navigateur web (en l'affectant du maximum de courtoisie). Un inconvénient est qu'un navigateur web implique un paquet de processus simultanés et pas un fil isolé --> passer autant de commandes renice +20 que de fils actifs du navigateur d'après le «Moniteur d'Activité». Assez laborieux, mais c'est un test n'est-ce pas ? [J'anticipe déjà le résultat : rien de changé
361608_original.png
].

--------------------​

Sinon, je suis tombé sur un petit logiciel par un Mr Geeko : ☞Freezer☜ --> le logiciel affiche un menulet dans la barre supérieure du Finder : en le déroulant, est affichée la liste des applications actives, avec un onglet attaché à chacune offrant notamment -->

- le menu : Make priority où l'on retrouve un gestionnaire de la commande renice avec la possibilité de faire varier de -20 à +20 la priorité de chacune.

- il y a aussi un menu : Make Focus (focaliser) dont je me demande s'il s'agit d'un moyen de garder l'accent sur un processus alors même qu'il passe en toile de fond dans la session.

- et encore, un menu : Freeze qui équivaut à geler carrément le processus d'une application lancée.

- une option générale : Defreeze all assure (par-delà ce nom ciblé sur le "dégelage") la remise à zéro instantanée des préférences précédentes.​

☞ Le logiciel, quoique déjà ancien, est parfaitement fonctionnel sous «Yosemite» y compris, mais il faut faire un don de 1,99$ minimum pour débloquer ces fonctionnalités (en échange, un code est renvoyé automatiquement par email). Je me demande si tu peux y trouver un intérêt, vu le peu d'effet de l'emploi de renice dans le «Terminal» jusqu'ici. À moins que deux renice inverses ne produisent un résultat (auquel cas ce logiciel serait un moyen commode de les gérer à la volée). Ou que l'option : Focus n'induise un effet d'optimisation du processus sélectionné.
 
Dernière édition par un modérateur:
Hello ,
alors j'ai testé donc idée macomaniac, et ... comme c'était prévisible rien ....
J'ai aussi investi 2$ dans ce petit soft que tu présente .... et bien c'est assez rigolo, on peut "geler" des application, c'est à dire les rendre inactives en quelques sortes (elles sont marquées en rouge (ne répondant pas) dans le "Forcer à quitter") .
Et quand on les dégèle tout redevient comme si de rien n'était .

L'option make focus permet de tout stoper sauf l'application qui nous intéresse ....
En somme ça revient un peu à fermer les autres application sans les fermer vraiment ... mais on ne peut plus les utiliser !

aujourd'hui, je me dis que le plus simple si on veut qu'une application carbure , c'est de rester dessus et en la laisser en tache de fond ... et de fermé tous les applications gourmandes ....c'est un peu dommage ... parce que lorsqu'on fait un export par exemple, on pourrait en profiter pour aller surfer sur le site de Macg.co pendant que l'ordi mouline..
 
Pour ne pas rester sur une note d'échec, peut puis je ouvrir aux interpretations ?

Si la commande nice et renice , donnent de la priorité aux application, est ce de la priorité seulement au niveau du processeur ?
Si oui , ceci pourrait expliquer quand dans mon cas cela ne suffise pas à "booster" une application en fond de tache.
En effet, l'application que j'utilise nécessite beaucoup de mémoire vive et sollicite beaucoup le disque dure : elle lit des gros tableaux, les traite et les enregistre.. Donc si les commandent donne la priorité au "moteur", et qu'il n'y a pas le "carburant" qui arrive, c'est sur que la machine n'ira pas plus vite .
Peut etre existe t il d'autres commande qui donnent la priorité en ram et en utilisation de disque dur à tel ou tel processus ??

Du moins c'est bien ce qui semble se passer lorsque l'on passe d'une application en tâche de fond, à la meme application en premier plan....
 
Si la commande nice et renice , donnent de la priorité aux application, est ce de la priorité seulement au niveau du processeur ?

Oui : c'est ce que j'ai compris. La commande renice (qui prend un processus déjà lancé en cours de route) passe une information de priorité au kernel_scheduler (une fonctionnalité du kernel ou micro-noyau de l'OS, qui gère les préséances de transfert des processus à traiter au processeur). Préséance interne à une "bande d'appartenance" du processus (comme décrit par Kessler).

Chez toi, ça n'a l'air de rien changer au problème : dès que tu renvoies la tâche en arrière-plan (background) en promouvant un autre processus - celui d'un navigateur internet - en avant-plan (foreground) par le jeu de la superposition de la fenêtre de ce dernier à la première --> il s'ensuit un net ralentissement de l'opération de la tâche de fond, dont il suffit de ramener la fenêtre en avant-plan pour relancer son efficacité.​

l'application que j'utilise nécessite beaucoup de mémoire vive

J'en viens à penser comme toi que tu as un problème de RAM. Tu n'as pas dit quel Mac tu avais (modèle ? année de production ?) non plus que la version d'OSX installée («Mavericks 10.9»? «Yosemite 10.10» ? ou un OS antérieur ?). «Mavericks» a introduit un nouvelle technologie de gestion de la RAM, qui consiste à compresser l'espace-RAM utilisé par une application dès que cette dernière est renvoyée en toile de fond suite à la superposition à sa fenêtre de la fenêtre d'avant-plan d'une autre application. Se pourrait-il que ce phénomène de compression de l'espace-RAM occupé par ton processus de traitement dès que tu lances en avant-plan un navigateur internet soit responsable de la chute d'efficacité de la première tâche ?

Tu pourrais effectivement déplacer ton centre d'examen : combien as-tu de RAM installée sur ton Mac ? Est-ce le maximum installable (voir l'application gratuite ☞MacTracker☜ qui te dira tout par rapport au modèle de ton Mac) ? Si tu lances le «Moniteur d'activité» (Applications/Utilitaires), à l'onglet Mémoire : est-ce que tu notes des informations pertinentes, genre "Pression sur la mémoire" (en bas de fenêtre) : est-ce que tout est au vert ou pas ? À Fichier d'échange utilisé (il s'agit d'une utilisation d'une part d'espace-disque pour délester la RAM en cas de saturation - avec l'inconvénient d'un net ralentissement des processus impliqués : c'est le "swap") --> est-ce que la valeur est sur 0 ou un nombre positif ? Combien de Mo de RAM requiert le processus de ton traitement  (dans la colonne principale listant par ordre alphabétique les processus) ?

Si tu as un Mac déjà ancien avec un disque à plateaux rotatif (un HDD), il est sûr que le remplacer par un SSD boosterait le fonctionnement (le remplacement est enfantin sur des portables, mais requiert plus de bricolage sur un iMac) - c'est surtout une question de budget disponible. Ce changement de disque combiné à une augmentation de RAM (si c'était envisageable) règlerait vraisemblablement ton problème.​
 
Hello Macomaniac,

Alors c'est peut être une question matériel, mais là, ça va être compliqué de changer car je pense que je suis plutot bien équipé.
J'ai un macbook 2,8Ghz i7 , 16Go de Ram, et disk dur SSD .

Ce n'est pas juste 1 fenêtre web qui ralentit tout, mais lorsque je lance plusieurs programmes gourmands !
Et du coup, c'est d'autant plus frustrant de voir que cette belle Ferrari roule à 300km/h quand on la regarde, mais que lorsqu'on ne la regarde plus (background), elle fait sa mijorée, et se traine discrètement à 60km/h sur l'autoroute ! :D.

Le programme que j'utilise c'est Adobe Bridge et plus précisément le module camera raw. Le soft est fait de tel manière que, de toutes manières, la mémoire se sature au bout d'un moment.

Enfin , lorsqu'on regarde la bécane (forground) , elle tourne à fond ! :D.