Salut
Prestige
En ce qui me concerne > je n'ai que quelques considérations « exotériques » à te proposer.
j'aimerais savoir comment attribuer la charge de tous les coeurs du processeur à un processus sur macOS...
Je ne sais pas si c’est possible depuis l’interface utilisateur
Une indication déjà ancienne d'Apple statuait :
Bloc de code:
OS X does not export interfaces that identify processors or control thread placement
—explicit thread to processor binding is not supported. Instead, the kernel manages all
thread placement. Applications expect that the scheduler will, under most circumstances,
run its threads using a good processor placement with respect to cache affinity.
(OS X n'exporte pas d'interface qui identifie les CPU ou contrôle le placement des fils - une liaison impérative de fil à processeur n'est pas supportée. À la place > le kernel gère tous les placements de fils. Les applications s'attendent à ce que l'échéancier (du kernel) - dans la plupart des cas - exécute leurs fils en utilisant un bon placement aux processeurs, en tenant compte des affinités mises en cache.)
=> ce qui revient à dire que le
kernel est maître du jeu en ce qui concerne la distribution de fils aux
CPU.
----------
Malgré cette restriction > une bibliothèque
Thread Affinity API a été mise à la disposition de créateurs d'applications > implémentant -->
Bloc de code:
A mechanism for an application to express thread affinity hints to the scheduler
as an extension to Mach thread policies.
(Un mécanisme permettant à une application l'expression de suggestions d'affinités fil / processeurs à l'échéancier du kernel - en tant qu'extension aux principes du kernel relatifs au traitement des fils.)
----------
Mais s'il ne s'agit pas d'une implémentation interne d'application > mais d'une préférence
a posteriori d'utilisateur > alors j'ai l'impression que les "suggestions prioritaires" qui peuvent être passées à l'«échéancier» (
task_scheduler) du
kernel relèvent des commandes
nice &
renice (comme tu l'as évoqué) -
nice pour lancer un processus avec telle priorité suggérée >
renice pour modifier le statut d'un processus déjà démarré par une suggestion de priorité.
La civilité (
niceness) d'un processus consistant dans son effacement devant les autres (valeurs supérieure à 0) > l'incivilité (
meanness) d'un processus consistant à se pousser en avant en priorité dans l'emploi du temps des tâches du
kernel (valeurs inférieures à 0).
De ce point de vue > à supposer le
PID du processus lancé connu (commande
TOP ou «
Moniteur d'activité») =
485 (par exemple) > je peux par la commande :
connaître la "valeur de civilité" du processus ciblé (par exemple
18 - politesse équivalant à une extrême urbanité) > et ayant l'intention d'exercer une incivilité maximale > je peux modifier la priorité de ce processus par une commande du type :
Bloc de code:
sudo renice -n -20 -p 485
- un lancement initial en
root du processus du type :
Bloc de code:
sudo nice -n -20 [PATH][EXECUTABLE]
étant peut-être susceptible d'une plus grande "force de persuasion" pour l'échéancier du
kernel.