La politique de programmation Linux par défaut est SCHED_OTHER
, qui n'a pas de choix de priorité mais un niveau nice
à modifier dans la politique.
Vous devrez passer à une autre politique d'ordonnancement en utilisant la fonction pthread_setschedparam
(voir aussi man sched_setscheduler
)
politiques de planification 'normale': (à partir sched_setscheduler(2)
)
SCHED_OTHER the standard round-robin time-sharing policy;
SCHED_BATCH for "batch" style execution of processes; and
SCHED_IDLE for running very low priority background jobs.
politiques de planification en temps réel :
SCHED_FIFO a first-in, first-out policy; and
SCHED_RR a round-robin policy.
Dans votre cas, vous pouvez peut-être utiliser SCHED_BATCH
car cela ne nécessite pas de privilèges root.
Avertissement: Une mauvaise utilisation des stratégies de planification en temps réel peut bloquer votre système. C'est pourquoi vous avez besoin des privilèges root pour effectuer ce type d'opération. Pour être sûr de ce que votre machine est capable de faire, vous pouvez utiliser l'outil chrt
du paquet util-linux
.
À titre d'exemple:
$ chrt -m
SCHED_OTHER min/max priority : 0/0
SCHED_FIFO min/max priority : 1/99
SCHED_RR min/max priority : 1/99
SCHED_BATCH min/max priority : 0/0
SCHED_IDLE min/max priority : 0/0
Une façon de déchets moins de temps (que j'utilise souvent):
alias batchmake='time chrt --batch 0 make --silent'
Tout en restant avec les privilèges de l'utilisateur, ce propulse le make
de 15% (dans mon Cas).
Edit: introduction nice
, SCHED_BATCH
, SCHED_IDLE
et chrt
outil. Pour Precision ! :)
re: 'SCHED_OTHER', ce n'est pas tout à fait correct puisque le bon niveau prend quand même effet. – Hasturkun
@Hasturkun: vous avez raison, il y a le * nice * tweak, comme un conseil pour le planificateur (pas une priorité du planificateur!). Merci pour l'exactitude! – levif
vous n'avez pas vraiment besoin de privilèges root, vous avez juste besoin d'avoir les rlimits pour que le prio maximum que vous pouvez définir soit> 0 – Spudd86