Man page - sched(7)
Packages contains this manual
- shm_overview(7)
- nss(5)
- proc_mtrr(5)
- intro(7)
- tcp(7)
- iso_8859-9(7)
- armscii-8(7)
- proc_kpagecount(5)
- initrd(4)
- mouse(4)
- proc_stat(5)
- x25(7)
- proc_interrupts(5)
- fifo(7)
- repertoiremap(5)
- icmp(7)
- futex(7)
- feature_test_macros(7)
- lp(4)
- bpf-helpers(7)
- epoll(7)
- proc_sys_dev(5)
- namespaces(7)
- proc_sysrq-trigger(5)
- proc_bus(5)
- cp1251(7)
- proc_pid_maps(5)
- proc_sys_vm(5)
- proc_pid_projid_map(5)
- st(4)
- proc_pid(5)
- issue(5)
- pid_namespaces(7)
- unicode(7)
- inode(7)
- hosts.equiv(5)
- iso-8859-13(7)
- proc_fb(5)
- proc_modules(5)
- proc_pid_autogroup(5)
- keyrings(7)
- sysvipc(7)
- proc_kmsg(5)
- cgroups(7)
- latin6(7)
- proc_pid_uid_map(5)
- unix(7)
- proc_pid_io(5)
- pts(4)
- packet(7)
- ld-linux.so(8)
- tzselect(8)
- iconv(1)
- proc_pid_syscall(5)
- proc_pid_net(5)
- proc_pid_pagemap(5)
- tty(4)
- proc_profile(5)
- standards(7)
- proc_pid_mounts(5)
- filesystems(5)
- iso-8859-15(7)
- locale(5)
- iso_8859_3(7)
- xattr(7)
- iso-8859-2(7)
- proc_uptime(5)
- persistent-keyring(7)
- credentials(7)
- proc_pid_timers(5)
- utmpx(5)
- vcsa(4)
- proc_pid_exe(5)
- proc_net(5)
- proc_timer_stats(5)
- ip(7)
- proc_pid_fd(5)
- ptmx(4)
- user_namespaces(7)
- resolv.conf(5)
- url(7)
- iso_8859_5(7)
- iso_8859-8(7)
- urn(7)
- process-keyring(7)
- proc_pid_auxv(5)
- proc_ksyms(5)
- proc_ide(5)
- veth(4)
- ldd(1)
- proc_swaps(5)
- landlock(7)
- proc_vmstat(5)
- system_data_types(7)
- cp1252(7)
- lirc(4)
- proc_kpageflags(5)
- random(7)
- precedence(7)
- cpuset(7)
- proc_pid_ns(5)
- acct(5)
- latin4(7)
- proc_pid_cgroup(5)
- proc_cpuinfo(5)
- iso_8859-2(7)
- proc_keys(5)
- charsets(7)
- pldd(1)
- proc_pid_stat(5)
- rtnetlink(7)
- netlink(7)
- ram(4)
- mem(4)
- iso-8859-6(7)
- proc_key-users(5)
- iso_8859_15(7)
- fanotify(7)
- proc_sys_net(5)
- sysfs(5)
- math_error(7)
- latin1(7)
- proc_pid_root(5)
- nptl(7)
- proc_cgroups(5)
- proc_iomem(5)
- proc_pid_statm(5)
- sem_overview(7)
- hier(7)
- full(4)
- proc_pid_status(5)
- proc_pid_cwd(5)
- proc_pid_cpuset(5)
- proc_scsi(5)
- uri(7)
- proc_diskstats(5)
- iso_8859_6(7)
- latin2(7)
- latin5(7)
- man-pages(7)
- ld.so(8)
- uts_namespaces(7)
- proc_pid_mountstats(5)
- intro(3)
- proc_pid_seccomp(5)
- proc_pid_wchan(5)
- attributes(7)
- symlink(7)
- mount_namespaces(7)
- charmap(5)
- tis-620(7)
- iso-8859-10(7)
- getent(1)
- proc_buddyinfo(5)
- ttytype(5)
- rtc(4)
- proc_malloc(5)
- suffixes(7)
- sln(8)
- signal(7)
- proc_sys_abi(5)
- signal-safety(7)
- time_namespaces(7)
- proc_pid_comm(5)
- raw(7)
- gai.conf(5)
- proc_crypto(5)
- locale(1)
- iso-8859-3(7)
- motd(5)
- proc_meminfo(5)
- iso-8859-8(7)
- protocols(5)
- proc_pid_map_files(5)
- pthreads(7)
- null(4)
- proc(5)
- zdump(8)
- socket(7)
- proc_sys_kernel(5)
- ddp(7)
- memusagestat(1)
- hd(4)
- iso-8859-14(7)
- shells(5)
- pipe(7)
- glob(7)
- proc_self(5)
- network_namespaces(7)
- utmp(5)
- proc_kcore(5)
- nsswitch.conf(5)
- sd(4)
- iso-8859-5(7)
- iso_8859_16(7)
- man(7)
- iso_8859-6(7)
- dir_colors(5)
- mq_overview(7)
- vsock(7)
- ascii(7)
- thread-keyring(7)
- fs(5)
- proc_pid_attr(5)
- proc_sys_debug(5)
- proc_sys(5)
- proc_pid_cmdline(5)
- pty(7)
- services(5)
- cgroup_namespaces(7)
- securetty(5)
- netdevice(7)
- iso_8859_13(7)
- host.conf(5)
- proc_pid_setgroups(5)
- proc_slabinfo(5)
- sock_diag(7)
- iso_8859-14(7)
- iso-8859-11(7)
- iso_8859_11(7)
- operator(7)
- regex(7)
- wavelan(4)
- proc_sys_fs(5)
- nologin(5)
- proc_pci(5)
- koi8-r(7)
- erofs(5)
- intro(2)
- utf8(7)
- proc_kallsyms(5)
- proc_sysvipc(5)
- queue(7)
- proc_sys_sunrpc(5)
- intro(5)
- latin8(7)
- mtrace(1)
- ipc_namespaces(7)
- dsp56k(4)
- iso_8859_4(7)
- proc_pid_smaps(5)
- proc_cmdline(5)
- rpc(5)
- proc_tty(5)
- proc_version(5)
- smartpqi(4)
- proc_pid_timerslack_ns(5)
- aio(7)
- session-keyring(7)
- resolver(5)
- slabinfo(5)
- wtmp(5)
- iso_8859_9(7)
- proc_locks(5)
- mailaddr(7)
- proc_pid_oom_score(5)
- kmem(4)
- iconvconfig(8)
- iso_8859-7(7)
- glibc(7)
- hostname(7)
- proc_thread-self(5)
- ipv6(7)
- iso_8859_7(7)
- proc_kpagecgroup(5)
- core(5)
- time(7)
- units(7)
- proc_dma(5)
- loop(4)
- address_families(7)
- zero(4)
- intro(4)
- procfs(5)
- iso_8859-4(7)
- vdso(7)
- tmpfs(5)
- iso-8859-16(7)
- iso_8859_10(7)
- user-session-keyring(7)
- libc(7)
- proc_fs(5)
- koi8-u(7)
- latin3(7)
- proc_tid_children(5)
- proc_pid_limits(5)
- proc_pid_coredump_filter(5)
- iso_8859-15(7)
- arp(7)
- urandom(4)
- iso_8859-10(7)
- hpsa(4)
- proc_pid_environ(5)
- boot(7)
- ftm(7)
- ld-linux(8)
- proc_driver(5)
- loop-control(4)
- iso_8859-16(7)
- proc_filesystems(5)
- tzfile(5)
- sprof(1)
- proc_pid_task(5)
- proc_pid_oom_score_adj(5)
- proc_mounts(5)
- iso-8859-4(7)
- iso_8859-1(7)
- utf-8(7)
- iso_8859-13(7)
- intro(6)
- proc_timer_list(5)
- rtld-audit(7)
- iso_8859-3(7)
- group(5)
- sched(7)
- proc_pid_clear_refs(5)
- hosts(5)
- iso_8859-11(7)
- numa(7)
- iso_8859_2(7)
- locale(7)
- iso-8859-1(7)
- fuse(4)
- proc_tid(5)
- proc_execdomains(5)
- proc_pid_mountinfo(5)
- intro(8)
- iso_8859_8(7)
- proc_loadavg(5)
- proc_pid_oom_adj(5)
- re_format(7)
- iso_8859_14(7)
- zic(8)
- bootparam(7)
- inotify(7)
- posixoptions(7)
- proc_partitions(5)
- iso-8859-9(7)
- proc_pid_mem(5)
- networks(5)
- proc_sys_user(5)
- udp(7)
- proc_zoneinfo(5)
- latin10(7)
- proc_pid_fdinfo(5)
- proc_pid_stack(5)
- memusage(1)
- spufs(7)
- pkeys(7)
- path_resolution(7)
- proc_ioports(5)
- intro(1)
- ldconfig(8)
- msr(4)
- svipc(7)
- port(4)
- proc_pid_personality(5)
- cciss(4)
- latin9(7)
- capabilities(7)
- localedef(1)
- vcs(4)
- iso_8859-5(7)
- elf(5)
- proc_sys_proc(5)
- console_codes(4)
- random(4)
- iso-8859-7(7)
- termcap(5)
- cpuid(4)
- environ(7)
- string_copying(7)
- proc_pid_gid_map(5)
- queue(3)
- termio(7)
- user-keyring(7)
- complex(7)
- latin7(7)
- proc_config.gz(5)
- udplite(7)
- kernel_lockdown(7)
- proc_devices(5)
- proc_apm(5)
- iso_8859_1(7)
- proc_pid_numa_maps(5)
apt-get install manpages
Available languages:
en fr ja ruManual
sched
NOMDESCRIPTION
Résumé des API
Politiques dâordonnancement
SCHED_FIFO : Ordonnancement premier entré, premier sorti
SCHED_RRÂ : ordonnancement tourniquet
SCHED_DEADLINE: ordonnancement sur échéances selon le modÚle des tùchessporadiques.
SCHED_OTHER : ordonnancement temps partagé par défaut
La valeur de politesse
SCHED_BATCHÂ : ordonnancement de processus par lots
SCHED_IDLE : ordonnancement de tùches de trÚs faible priorité
RĂ©initialiser la politique dâordonnancement pour les processus enfant
PrivilĂšges et limites de ressources
Limiter lâutilisation CPU des processus temps-rĂ©el et Ă Ă©chĂ©ances.
Temps de réponse
Divers
FonctionnalitĂ© dâautogroupage
Valeur de politesse et ordonnancement de groupe
Fonctionnalités temps réel dans le noyau Linux principal
NOTES
VOIR AUSSI
TRADUCTION
NOM
sched - Aperçu de lâordonnancement de CPU
DESCRIPTION
Depuis Linux 2.6.23, lâordonnanceur par dĂ©faut est CFS (Completely Fair Scheduler â ordonnanceur complĂštement Ă©quitable). Il remplace lâordonnanceur prĂ©cĂ©dent, « O(1) ».
Résumé des API
Linux fournit
les appels systĂšme suivants pour contrĂŽler le
comportement de lâordonnancement du CPU, la politique
et la priorité des processus (ou, plus
précisément, des threads).
nice
(2)
Définir une nouvelle valeur de politesse pour le thread appelant et renvoyer cette nouvelle valeur.
getpriority (2)
Renvoyer la valeur de politesse dâun thread, dâun groupe de processus ou de lâensemble des threads possĂ©dĂ©s par un utilisateur particulier.
setpriority (2)
DĂ©finir la valeur de politesse dâun thread, dâun groupe de processus ou de lâensemble des threads possĂ©dĂ©s par un utilisateur particulier.
sched_setscheduler (2)
DĂ©finir la politique dâordonnancement et les paramĂštres du thread indiquĂ©.
sched_getscheduler (2)
Renvoyer la politique dâordonnancement du thread indiquĂ©.
sched_setparam (2)
DĂ©finir les paramĂštres dâordonnancement du thread indiquĂ©.
sched_getparam (2)
RĂ©cupĂ©rer les paramĂštres dâordonnancement du thread indiquĂ©.
sched_get_priority_max (2)
Renvoyer la prioritĂ© la plus haute disponible pour la politique dâordonnancement indiquĂ©e.
sched_get_priority_min (2)
Renvoyer la prioritĂ© la plus basse disponible pour la politique dâordonnancement indiquĂ©e.
sched_rr_get_interval (2)
Récupérer le quantum de temps alloué utilisé pour les threads ordonnancés par une politique de type répartition par tourniquet (round robin).
sched_yield (2)
Provoquer la libĂ©ration du CPU par lâappelant afin de permettre lâexĂ©cution dâautres threads.
sched_setaffinity (2)
DĂ©finir le masque dâaffinitĂ© CPU du thread indiquĂ© (propre Ă Linux).
sched_getaffinity (2)
RĂ©cupĂ©rer le masque dâaffinitĂ© CPU du thread indiquĂ© (propre Ă Linux).
sched_setattr (2)
DĂ©finir la politique dâordonnancement et les paramĂštres du thread indiquĂ©. Cet appel systĂšme (propre Ă Linux) fournit un sur-ensemble de la fonctionnalitĂ© de sched_setscheduler (2) et de sched_setparam (2).
sched_getattr (2)
RĂ©cupĂ©rer la politique dâordonnancement et les paramĂštres du thread indiquĂ©. Cet appel systĂšme (propre Ă Linux) fournit un sur-ensemble de la fonctionnalitĂ© de sched_getscheduler (2) et de sched_getparam (2).
Politiques dâordonnancement
Lâordonnanceur est la partie du noyau qui dĂ©cide quel thread prĂȘt va ĂȘtre exĂ©cutĂ© ensuite. Chaque processus a une politique dâordonnancement associĂ©e et une prioritĂ© dâordonnancement statique , sched_priority . Lâordonnanceur prend ses dĂ©cisions en fonction de la politique dâordonnancement et de la prioritĂ© statique de tous les threads du systĂšme.
Pour les threads ordonnancĂ©s sous lâune des politiques dâordonnancement normales ( SCHED_OTHER , SCHED_IDLE , SCHED_BATCH ), sched_priority nâest pas utilisĂ©e dans les dĂ©cisions dâordonnancement (et doit valoir 0).
Les processus ordonnancĂ©s sous lâune des politiques dâordonnancement temps rĂ©el ( SCHED_FIFO , SCHED_RR ) ont une valeur sched_priority dans lâintervalle 1 (faible) Ă Â 99 (haute). (Comme les nombres lâimpliquent, les threads temps rĂ©el ont toujours une prioritĂ© plus haute que les threads normaux.) Notez bien : POSIX.1 exige dâune implĂ©mentation quâelle gĂšre seulement un minimum de 32 niveaux de prioritĂ© distincts pour les politiques temps rĂ©el et certains systĂšmes nâoffrent que ce minimum. Les programmes portables doivent utiliser sched_get_priority_min (2) et sched_get_priority_max (2) pour connaĂźtre lâintervalle des prioritĂ©s gĂ©rĂ©es pour une politique particuliĂšre.
ThĂ©oriquement, lâordonnanceur entretient une liste de tous les threads prĂȘts pour lâexĂ©cution pour chaque valeur possible de sched_priority . Afin de dĂ©terminer quel processus doit sâexĂ©cuter ensuite, lâordonnanceur recherche la liste non vide de plus haute prioritĂ© statique et choisit le thread en tĂȘte de cette liste.
La politique dâordonnancement dâun thread dĂ©termine lâemplacement oĂč il sera insĂ©rĂ© dans la liste contenant les threads de mĂȘme prioritĂ© statique et comment il se dĂ©placera dans cette liste.
Tout ordonnancement est prĂ©emptif : si un thread avec une prioritĂ© statique plus Ă©levĂ©e devient prĂȘt, le thread actuellement en cours dâexĂ©cution est interrompu et retourne dans la liste dâattente avec son niveau de prioritĂ© statique. La politique dâordonnancement dĂ©termine lâordre utilisĂ© seulement dans la liste de threads prĂȘts avec des prioritĂ©s statiques Ă©gales.
SCHED_FIFO : Ordonnancement premier entré, premier sorti
SCHED_FIFO ne peut ĂȘtre utilisĂ©e quâavec des prioritĂ©s statiques supĂ©rieures Ă Â 0, ce qui signifie que dĂšs quâun thread SCHED_FIFO devient prĂȘt, il prĂ©empte nâimporte quel thread SCHED_OTHER , SCHED_BATCH ou SCHED_IDLE en cours dâexĂ©cution. SCHED_FIFO est un ordonnancement simple sans dĂ©coupage temporel. Pour les threads ordonnancĂ©s selon la politique SCHED_FIFO , les rĂšgles suivantes sont appliquĂ©es :
|
- |
Un thread SCHED_FIFO qui a Ă©tĂ© prĂ©emptĂ© par un autre thread de prioritĂ© supĂ©rieure restera en tĂȘte de liste pour sa prioritĂ© et reprendra son exĂ©cution dĂšs que tous les threads de prioritĂ© supĂ©rieure seront Ă nouveau bloquĂ©s. |
||
|
- |
Quand un thread SCHED_FIFO bloquĂ© devient prĂȘt, il est insĂ©rĂ© en fin de liste pour sa prioritĂ©. |
||
|
- |
Si un appel Ă sched_setscheduler (2), sched_setparam (2), sched_setattr (2), pthread_setschedparam (3) ou pthread_setschedprio (3) modifie la prioritĂ© du thread SCHED_FIFO prĂȘt ou en cours dâexĂ©cution, identifiĂ© par pid , lâeffet sur la position du thread dans la liste dĂ©pend de la direction de la modification de la prioritĂ© des threads : |
(a)
|
Si la prioritĂ© du thread est relevĂ©e, il est placĂ© en fin de liste pour sa nouvelle prioritĂ©. Par consĂ©quent, il peut prĂ©empter un thread en cours dâexĂ©cution ayant la mĂȘme prioritĂ©. |
|||
|
(b) |
Si la priorité du thread est inchangée, sa position dans la liste des exécutions est inchangée. |
||
|
(c) |
Si la prioritĂ© du thread est abaissĂ©e, il est placĂ© en tĂȘte de liste pour sa nouvelle prioritĂ©. |
Selon POSIX.1-2008, les modifications de priorité (ou politique) de thread en utilisant tout autre mécanisme que pthread_setschedprio (3) devraient aboutir à ce que le thread soit placé en fin de liste pour sa priorité.
|
- |
Un thread appelant sched_yield (2) sera placé en fin liste. |
Aucun autre Ă©vĂ©nement ne dĂ©placera un thread ordonnancĂ© selon la politique SCHED_FIFO dans la liste dâattente des threads prĂȘts de prioritĂ© statique Ă©quivalente.
Un thread SCHED_FIFO sâexĂ©cute jusquâĂ ce quâil soit bloquĂ© par une requĂȘte dâentrĂ©e-sortie, quâil soit prĂ©emptĂ© par un thread de prioritĂ© supĂ©rieure ou quâil appelle sched_yield (2).
SCHED_RRÂ : ordonnancement tourniquet
SCHED_RR est une amĂ©lioration simple de SCHED_FIFO . Tout ce qui est dĂ©crit pour SCHED_FIFO sâapplique aussi Ă SCHED_RR , sauf que chaque thread ne dispose que dâun quantum de temps maximal pour son exĂ©cution. Si lâexĂ©cution dâun thread SCHED_RR est dâune durĂ©e supĂ©rieure ou Ă©gale au quantum de temps, il sera placĂ© en fin de liste pour sa prioritĂ©. Un thread SCHED_RR qui a Ă©tĂ© prĂ©emptĂ© par un thread de prioritĂ© supĂ©rieure et par consĂ©quent qui reprend lâexĂ©cution en tant que thread en cours, terminera la part non utilisĂ©e de son quantum de temps dans le tourniquet. La valeur du quantum de temps peut ĂȘtre lue avec sched_rr_get_interval (2).
SCHED_DEADLINE: ordonnancement sur échéances selon le modÚle des tùchessporadiques.
Depuis Linux 3.14, Linux offre une politique dâordonnancement sur Ă©chĂ©ances ( SCHED_DEADLINE ). LâimplĂ©mentation actuelle de cette politique repose sur les algorithmes GEDF (Global Earliest Deadline First, ou « prioritĂ© globale Ă lâĂ©chĂ©ance proche ») et CBS (Constant Bandwidth Server, ou « serveur Ă bande passante constante ») utilisĂ©s conjointement. Pour dĂ©finir ou rĂ©cupĂ©rer cette politique et ses attributs associĂ©s, les appels systĂšme sched_setattr (2) et sched_getattr (2) doivent ĂȘtre utilisĂ©s.
Une tĂąche sporadique prĂ©sente une sĂ©quence de sous-tĂąches qui sont chacune activĂ©es au moins une fois par pĂ©riode. Chaque sous-tĂąche a Ă©galement une Ă©chĂ©ance relative , avant laquelle elle doit achever son exĂ©cution, et un temps dâexĂ©cution qui est le temps CPU nĂ©cessaire pour quâelle sâexĂ©cute. Le moment auquel une tĂąche est activĂ©e parce quâune sous-tĂąche doit ĂȘtre exĂ©cutĂ©e est appelĂ© temps dâactivation (Ă©galement dĂ©signĂ© temps dâappel (« request time ») ou temps de libĂ©ration (« release time »)). Le temps de lancement est le moment auquel la tĂąche commence son exĂ©cution. Lâ Ă©chĂ©ance impĂ©rative est obtenue en additionnant lâĂ©chĂ©ance relative et le temps dâactivation.
Le schéma suivant illustre ces termes :
activation/réveil
échéance impérative
| temps du lancement |
| | |
v v v
-----x--------xoooooooooooooooooooooooo--------x--------x---
|<- temps dâexĂ©cution ->|
|<---------- échéance relative
---------->|
|<----------------- période
---------------------->|
Lorsquâune politique SCHED_DEADLINE est activĂ©e au moyen de sched_setattr (2), il est possible de prĂ©ciser trois paramĂštres : Runtime , Deadline et Period . Ces paramĂštres ne correspondent pas forcĂ©ment aux termes dĂ©crits prĂ©cĂ©demment : il est dâusage dâaffecter Ă Runtime une valeur supĂ©rieure au temps dâexĂ©cution moyen (ou le pire temps dâexĂ©cution possible, pour les cas de temps rĂ©el extrĂȘmes) ; Deadline prend la valeur de lâĂ©chĂ©ance relative ; enfin, Period reçoit la valeur de la pĂ©riode de la tĂąche. Ainsi, pour un ordonnancement SCHED_DEADLINE , on obtient.
activation/réveil
échéance impérative
| temps du lancement |
| | |
v v v
-----x--------xoooooooooooooooooooooooo--------x--------x---
|<------- Exécution ------->|
|<----------------- ĂchĂ©ance
------------>|
|<----------------- Période
---------------------->|
Les trois paramĂštres de configuration de lâordonnancement sur Ă©chĂ©ances correspondent aux champs sched_runtime , sched_deadline et sched_period de la structure sched_attr (consultez sched_setattr (2)). Ces champs sont exprimĂ©s en nanosecondes. Si la valeur 0 est affectĂ©e Ă sched_period , ce paramĂštre prend la valeur de sched_deadline .
Le noyau exige que :
sched_runtime <= sched_deadline <= sched_period
De plus, dans lâimplĂ©mentation actuelle, tous les paramĂštres doivent valoir au moins 1024 (câest Ă dire Ă peine plus quâune microseconde, qui est la rĂ©solution de cette implĂ©mentation) et moins de 2^63. Si la valeur de lâun de ces paramĂštres sort de cet intervalle, sched_setattr (2) Ă©choue en renvoyant lâerreur EINVAL .
Le CBS assure que les diffĂ©rentes tĂąches nâinterfĂšrent pas en bloquant les threads qui tentent de dĂ©passer leur temps dâexĂ©cution (Runtime).
Pour que les conditions requises par lâordonnancement sur Ă©chĂ©ances soient remplies, le noyau doit empĂȘcher des situations dans lesquelles lâensemble des threads SCHED_DEADLINE nâest pas rĂ©alisable (ordonnancement non possible) en tenant compte des contraintes donnĂ©es. Le noyau doit donc exĂ©cuter un test dâapprobation lorsque la politique SCHED_DEADLINE et ses attributs sont dĂ©finis ou modifiĂ©s. Ce test dâapprobation valide que le changement demandĂ© est rĂ©alisable ; si ce nâest pas le cas, sched_setattr (2) Ă©choue et renvoie lâerreur EBUSY .
Par exemple, il est nĂ©cessaire (et par forcĂ©ment suffisant) pour lâutilisation totale dâĂȘtre infĂ©rieure ou Ă©gale au nombre total de CPU disponibles, oĂč, puisque chaque thread peut sâexĂ©cuter au plus pour Runtime par Period , lâutilisation pour ce thread vaut son Runtime divisĂ© par sa Period .
Pour assurer les conditions qui sont requises lorsquâun thread est autorisĂ© Ă utiliser la politique SCHED_DEADLINE , les threads SCHED_DEADLINE ont la prioritĂ© la plus Ă©levĂ©e parmi tous les threads (contrĂŽlable par lâutilisateur) du systĂšme. Si un thread ordonnancĂ© selon SCHED_DEADLINE est prĂȘt, il aura la prioritĂ© sur tout autre thread ordonnancĂ© par une autre politique.
Un appel Ă fork (2) effectuĂ© par un thread ordonnancĂ© selon la politique SCHED_DEADLINE Ă©chouera en renvoyant lâerreur EAGAIN , sauf dans le cas ou lâattribut « reset-on-fork » du thread est activĂ© (voir plus bas).
Un thread ordonnancé selon SCHED_DEADLINE qui appelle sched_yield (2) cédera la priorité à la sous-tùche en cours et attendra une nouvelle période pour débuter.
SCHED_OTHER : ordonnancement temps partagé par défaut
SCHED_OTHER peut ĂȘtre utilisĂ© seulement pour la prioritĂ© statique 0 (câest-Ă -dire que les threads sous politique temps rĂ©el ont la prioritĂ© sur les processus SCHED_OTHER ). SCHED_OTHER est lâordonnanceur temps partagĂ© de Linux prĂ©vu pour tous les threads nâayant pas besoin des mĂ©canismes temps rĂ©el spĂ©ciaux.
Le thread Ă exĂ©cuter est choisi dans la liste des threads de prioritĂ© statique 0, en utilisant une prioritĂ© dynamique qui ne sâapplique que dans cette liste. La prioritĂ© dynamique est basĂ©e sur la valeur de politesse (« nice ») du thread (voir ci-dessous) et est incrĂ©mentĂ©e Ă chaque quantum de temps oĂč le thread est prĂȘt, mais non sĂ©lectionnĂ© par lâordonnanceur. Cela garantit une progression Ă©quitable de tous les threads SCHED_OTHER .
Dans le code source du noyau Linux, la politique SCHED_OTHER est en fait appelée SCHED_NORMAL .
La valeur de politesse
La valeur de politesse est un attribut pouvant ĂȘtre utilisĂ© pour influencer lâordonnanceur en faveur ou dĂ©faveur dâun processus dans les choix dâordonnancement. Elle affecte lâordonnancement des processus SCHED_OTHER et SCHED_BATCH (voir ci-dessous). La valeur de politesse peut ĂȘtre modifiĂ©e avec nice (2), setpriority (2) ou sched_setattr (2).
Selon POSIX.1, la valeur de politesse est un attribut par processus, câest-Ă -dire que les threads dans un processus devraient partager la valeur de politesse. Cependant, dans Linux, cette valeur est un attribut par thread : des threads distincts dans le mĂȘme processus peuvent avoir des valeurs de politesse diffĂ©rentes.
LâĂ©ventail des valeurs de politesse diffĂšre selon les systĂšmes UNIX. Dans un Linux moderne, il varie de â20 (prioritĂ© Ă©levĂ©e) Ă Â +19 (prioritĂ© basse). Dans quelques autres systĂšmes, la plage est de â20 à  20. Les tout premiers noyaux Linux (avant Linux 2.0) avaient une plage de âinfini à  15 .
De mĂȘme, le degrĂ© auquel la valeur de politesse affecte lâordonnancement respectif des processus SCHED_OTHER varie selon les systĂšmes UNIX et selon les versions du noyau Linux.
Avec lâarrivĂ©e de lâordonnanceur CFS dans Linux 2.6.23, Linux a adoptĂ© un algorithme qui provoque des diffĂ©rences relatives aux valeurs de politesse ayant un impact plus important. Dans lâimplĂ©mentation actuelle, chaque unitĂ© de diffĂ©rence dans les valeurs de politesse dans deux processus aboutit Ă un facteur de 1,25 dans le degrĂ© dont lâordonnancement favorise le processus de plus haute prioritĂ©. Cela fait que les trĂšs petites valeurs de prioritĂ© (+19) fournissent vraiment peu de CPU pour un processus Ă chaque fois quâil existe une charge de plus haute prioritĂ© sur le systĂšme, et cela fait que les hautes valeurs (â20) fournissent la plus grande partie du CPU aux applications en ayant besoin (par exemple, certaines applications audio).
Dans Linux, la limite de ressources RLIMIT_NICE peut ĂȘtre utilisĂ©e pour dĂ©finir une limite jusquâĂ laquelle une valeur de politesse de processus non privilĂ©giĂ© peut ĂȘtre Ă©levĂ©e. Consultez setrlimit (2) pour les dĂ©tails.
Pour davantage dâexplications Ă propos de la valeur de politesse, consultez ci-dessous les sous-sections sur la fonctionnalitĂ© dâautogroupe et sur lâordonnancement de groupe.
SCHED_BATCHÂ : ordonnancement de processus par lots
(Depuis Linux 2.6.16) SCHED_BATCH ne peut ĂȘtre utilisĂ©e quâavec une prioritĂ© statique de 0. Cette politique est similaire Ă SCHED_OTHER en ce quâelle ordonnance les threads conformĂ©ment Ă leur prioritĂ© dynamique (basĂ©e sur la valeur de politesse). La diffĂ©rence est que cette politique fera que lâordonnanceur considĂ©rera toujours que ce thread demande beaucoup de ressources processeur. Par consĂ©quent, il lui appliquera une petite pĂ©nalitĂ© dâordonnancement vis-Ă -vis du comportement au rĂ©veil, ainsi le thread sera lĂ©gĂšrement dĂ©savantagĂ© dans les dĂ©cisions dâordonnancement.
Cette politique est utile pour les charges de travail non interactives, mais qui ne souhaitent pas diminuer leur valeur de politesse, ou pour celles qui veulent une politique dâordonnancement dĂ©terministe sans que lâinteractivitĂ© ne cause de prĂ©emptions supplĂ©mentaires (entre les tĂąches des charges).
SCHED_IDLE : ordonnancement de tùches de trÚs faible priorité
(Depuis Linux 2.6.23.) SCHED_IDLE ne peut ĂȘtre utilisĂ©e quâavec une prioritĂ© statique de 0 ; la valeur de politesse nâa pas dâinfluence pour cette politique.
Cette politique est conçue pour lâexĂ©cution de tĂąches de trĂšs faible prioritĂ© (infĂ©rieure mĂȘme Ă une valeur de politesse +19 avec les politiques SCHED_OTHER ou SCHED_BATCH ).
RĂ©initialiser la politique dâordonnancement pour les processus enfant
Chaque thread possĂšde un attribut dâordonnancement reset-on-fork. Lorsque cet attribut est dĂ©fini, les enfants créés au moyen de fork (2) nâhĂ©ritent pas des politiques dâordonnancement nĂ©cessitant des droits. Lâattribut reset-on-fork peut ĂȘtre dĂ©fini soit :
|
- |
en appliquant un OU logique Ă lâattribut SCHED_RESET_ON_FORK dans lâargument policy au moment de lâappel Ă sched_setscheduler (2) (Ă partir de Linux 2.6.32) ; |
||
|
- |
ou en ajoutant lâargument SCHED_FLAG_RESET_ON_FORK dans attr.sched_flags au moment de lâappel Ă sched_setattr (2). |
Notez que les constantes utilisĂ©es dans ces deux API ont des noms diffĂ©rents. La disposition de lâattribut reset-on-fork peut, de façon analogue, ĂȘtre obtenue au moyen de sched_getscheduler (2) et de sched_getattr (2).
La fonctionnalitĂ© reset-on-fork est prĂ©vue pour des applications de lecture audiovisuelle et peut ĂȘtre utilisĂ©e pour empĂȘcher les applications de passer outre la limite de ressource RLIMIT_RTTIME (consultez getrlimit (2)) en crĂ©ant de nombreux processus enfant.
Plus prĂ©cisĂ©ment, si lâattribut reset-on-fork est utilisĂ©, les rĂšgles suivantes seront appliquĂ©es lors de la crĂ©ation ultĂ©rieure des enfants :
|
- |
Si le thread appelant a une politique dâordonnancement SCHED_FIFO ou SCHED_RR , la politique pour les processus enfant est rĂ©initialisĂ©e Ă SCHED_OTHER . |
||
|
- |
Si le processus appelant a une valeur de politesse négative, elle est mise à zéro pour les processus enfant. |
Une fois que lâattribut reset-on-fork est activĂ©, il ne peut ĂȘtre dĂ©sactivĂ© que si le thread possĂšde la capacitĂ© CAP_SYS_NICE . Cet attribut est dĂ©sactivĂ© pour les processus enfant créés avec fork (2).
PrivilĂšges et limites de ressources
Avant Linux 2.6.12, seuls les threads privilĂ©giĂ©s ( CAP_SYS_NICE ) pouvaient attribuer une prioritĂ© statique non nulle (câest-Ă -dire dĂ©finir une politique dâordonnancement temps rĂ©el). Le seul changement quâun thread non privilĂ©giĂ© pouvait faire Ă©tait dâaffecter la politique SCHED_OTHER et cela ne pouvait ĂȘtre fait que si lâUID effectif de lâappelant Ă©tait le mĂȘme que lâUID rĂ©el ou effectif du thread cible (câest-Ă -dire le thread spĂ©cifiĂ© par pid ) dont la politique Ă©tait modifiĂ©e.
Un thread doit avoir des droits spécifiques ( CAP_SYS_NICE ) pour pouvoir affecter ou modifier la politique SCHED_DEADLINE .
Depuis Linux 2.6.12, la limite de ressources RLIMIT_RTPRIO dĂ©finit un plafond pour la prioritĂ© statique dâun thread non privilĂ©giĂ© pour les politiques SCHED_RR et SCHED_FIFO . Les rĂšgles pour modifier la politique dâordonnancement et la prioritĂ© sont les suivantes :
|
- |
Si un thread non privilĂ©giĂ© a une limite souple RLIMIT_RTPRIO non nulle, il peut modifier sa politique et sa prioritĂ© dâordonnancement, Ă condition que la prioritĂ© reste infĂ©rieure au maximum de sa prioritĂ© actuelle et Ă sa limite souple RLIMIT_RTPRIO . |
||
|
- |
Si la limite souple RLIMIT_RTPRIO est nulle, les seules modifications permises sont une diminution de la prioritĂ© ou bien un basculement vers une politique qui nâest pas temps rĂ©el. |
||
|
- |
Soumis aux mĂȘmes rĂšgles, un autre thread non privilĂ©giĂ© peut Ă©galement faire ces modifications Ă partir du moment oĂč lâUID effectif du thread effectuant la modification correspond Ă lâUID rĂ©el ou effectif du thread cible. |
||
|
- |
Des rĂšgles particuliĂšres sâappliquent Ă la politique SCHED_IDLE . Avant Linux 2.6.39, un thread non privilĂ©giĂ© opĂ©rant sous cette politique ne peut pas modifier sa politique, quelle que soit la valeur de sa limite souple de ressources RLIMIT_RTPRIO . Depuis Linux 2.6.39, un thread non privilĂ©giĂ© peut basculer vers la politique SCHED_BATCH ou SCHED_OTHER tant que sa valeur de politesse tombe dans lâintervalle permis par sa limite de ressources RLIMIT_NICE (consultez getrlimit (2)). |
Les threads privilĂ©giĂ©s ( CAP_SYS_NICE ) ignorent la limite RLIMIT_RTPRIO : comme avec dâanciens noyaux, ils peuvent modifier arbitrairement la politique dâordonnancement et la prioritĂ©. Consultez getrlimit (2) pour plus dâinformations sur RLIMIT_RTPRIO .
Limiter lâutilisation CPU des processus temps-rĂ©el et Ă Ă©chĂ©ances.
Une boucle sans fin non bloquante dans un thread ordonnancĂ© selon une politique SCHED_FIFO , SCHED_RR ou SCHED_DEADLINE peut potentiellement bloquer indĂ©finiment lâaccĂšs au CPU de tous les threads. Avant Linux 2.6.25, le seul moyen dâĂ©viter quâun processus temps rĂ©el hors de contrĂŽle ne bloque le systĂšme Ă©tait dâexĂ©cuter (sur la console) un shell ayant un prioritĂ© statique supĂ©rieure Ă celle de lâapplication testĂ©e. Cela permettait dâexĂ©cuter en urgence une commande kill sur les applications temps rĂ©el en cours de test qui ne se bloquaient pas ou ne se terminaient pas comme prĂ©vu.
Depuis Linux 2.6.25, il existe dâautres techniques pour traiter le cas des processus temps rĂ©el et Ă Ă©chĂ©ances qui sont hors de contrĂŽle. Lâune de ces techniques consiste Ă utiliser la limite de ressources RLIMIT_RTTIME pour dĂ©finir la limite du temps CPU quâun processus temps rĂ©el a le droit de consommer. Consultez getrlimit (2) pour plus de dĂ©tails.
Depuis,
Linux 2.6.25 propose également deux fichiers
/proc
qui peuvent ĂȘtre utilisĂ©s pour
réserver une certaine quantité de temps CPU
aux processus non temps réel. La réservation
de temps CPU par ce moyen permet dâallouer du temps
CPU, par exemple, Ă un shell administrateur pour
quâil puisse exĂ©cuter une commande kill sur un
processus hors de contrĂŽle. Ces deux fichiers
définissent des valeurs exprimées en
microseconde :
/proc/sys/kernel/sched_rt_period_us
Ce fichier dĂ©finit une pĂ©riode dâordonnancement correspondant Ă 100 % de la bande passante du CPU. La valeur contenue dans ce fichier peut aller de 1 Ă INT_MAX , soit une durĂ©e allant de 1 microseconde Ă environ 35 minutes. La valeur par dĂ©faut contenue dans ce fichier est 1 000 000 (1 seconde).
/proc/sys/kernel/sched_rt_runtime_us
La valeur contenue dans ce fichier dĂ©finit quelle part dâune « pĂ©riode » peut ĂȘtre utilisĂ©e par des processus temps rĂ©el et Ă Ă©chĂ©ances. La valeur contenue dans ce fichier peut aller de â1 Ă INT_MAX â1. â1 fixe un temps dâexĂ©cution Ă©gal Ă la pĂ©riode, câest Ă dire quâaucun temps CPU nâest rĂ©servĂ© pour les processus non temps rĂ©el (ce qui correspond au comportement avant Linux 2.6.25 du noyau). La valeur par dĂ©faut contenue dans ce fichier est 950 000 (0,95 seconde), ce qui signifie que 5 % du temps CPU est rĂ©servĂ© aux processus qui ne sâexĂ©cutent pas selon une politique dâordonnancement temps rĂ©el ou Ă Ă©chĂ©ances.
Temps de réponse
Un thread de haute prioritĂ© bloquĂ© en attente dâentrĂ©es-sorties est affectĂ© dâun certain temps de rĂ©ponse avant dâĂȘtre sĂ©lectionnĂ© Ă nouveau. Le concepteur dâun gestionnaire de pĂ©riphĂ©rique peut rĂ©duire grandement ce temps de rĂ©ponse en utilisant un gestionnaire dâinterruptions « lentes ».
Divers
Les processus enfant hĂ©ritent de la politique dâordonnancement et des paramĂštres associĂ©s lors dâun fork (2). La politique et les paramĂštres dâordonnancement sont conservĂ©s au travers dâun execve (2).
Le verrouillage de pages en mĂ©moire est gĂ©nĂ©ralement nĂ©cessaire pour les processus temps rĂ©el afin dâĂ©viter les dĂ©lais de pagination ; cela peut ĂȘtre effectuĂ© avec mlock (2) ou mlockall (2).
FonctionnalitĂ© dâautogroupage
Depuis Linux 2.6.38, le noyau fournit une fonctionnalitĂ© connue comme lâautogroupage pour amĂ©liorer les performances des bureaux interactifs confrontĂ©s Ă des charges de travail multiprocessus utilisant Ă©normĂ©ment le CPU telles que la construction du noyau Linux avec un grand nombre de processus de construction en parallĂšle (câest-Ă -dire lâindicateur -j de make (1)).
Cette fonction opĂšre en conjonction avec lâordonnancement CFS et nĂ©cessite un noyau configurĂ© avec CONFIG_SCHED_AUTOGROUP . Sur un systĂšme en cours dâexĂ©cution, cette fonctionnalitĂ© est activĂ©e ou dĂ©sactivĂ©e Ă lâaide du fichier /proc/sys/kernel/sched_autogroup_enabled . Une valeur 0 dĂ©sactive cette fonctionnalitĂ© tandis quâune valeur 1 lâactive. La valeur par dĂ©faut dans ce fichier est 1 Ă moins que le noyau ait Ă©tĂ© amorcĂ© avec le paramĂštre noautogroup .
Un nouvel autogroupe est créé quand une nouvelle session est créée Ă lâaide de setsid (2). Cela se produit, par exemple, quand une nouvelle fenĂȘtre de terminal est dĂ©marrĂ©e. Un nouveau processus créé par fork (2) hĂ©rite de lâappartenance dâautogroupe de son parent. Par consĂ©quent, tous les processus dans une session sont membres du mĂȘme autogroupe. Un autogroupe est automatiquement dĂ©truit quand le dernier processus du groupe se termine.
Lorsque lâautogroupage est activĂ©, tous les membres dâun autogroupe sont placĂ©s dans le mĂȘme ordonnanceur « groupe de tĂąches » du noyau. Lâordonnanceur CFS emploie un algorithme qui Ă©galise la distribution des cycles du CPU entre les groupes de tĂąches. Le bĂ©nĂ©fice qui en dĂ©coule pour la performance de bureau interactif peut ĂȘtre dĂ©crit Ă lâaide de lâexemple qui suit.
Supposons quâil existe deux autogroupes en compĂ©tition pour le mĂȘme CPU (câest-Ă -dire soit un systĂšme avec un seul CPU, soit lâutilisation de taskset (1) pour confiner tous les processus sur le mĂȘme CPU sur un systĂšme SMP). Le premier groupe contient dix processus liĂ©s Ă un CPU dâune construction de noyau dĂ©marrĂ©e avec make -j10 . Lâautre groupe contient un seul processus liĂ© Ă un CPU : un lecteur vidĂ©o. Le rĂ©sultat de lâautogroupage est que les deux groupes recevront chacun la moitiĂ© des cycles CPU. Câest-Ă -dire que le lecteur vidĂ©o recevra 50 % des cycles CPU, plutĂŽt que seulement 9 % des cycles, ce qui conduirait probablement Ă une lecture vidĂ©o dĂ©gradĂ©e. La situation sur le systĂšme SMP est plus complexe, mais lâeffet gĂ©nĂ©ral est le mĂȘme : lâordonnanceur rĂ©partit les cycles CPU dans les groupes de tĂąches de telle façon quâun autogroupe contenant un grand nombre de processus liĂ©s Ă un CPU nâaboutisse pas Ă un accaparement des cycles CPU au dĂ©triment des autres travaux dans le systĂšme.
Lâappartenance Ă un autogroupe de processus (groupe de tĂąches) peut ĂȘtre vue dans le fichier /proc/ pid /autogroup :
$
cat
/proc/1/autogroup
/autogroup-1 nice 0
Ce fichier peut aussi ĂȘtre utilisĂ© pour modifier la bande passante de CPU allouĂ©e Ă un autogroupe. Cela peut ĂȘtre rĂ©alisĂ© en Ă©crivant un nombre dans le champ « nice » du fichier pour dĂ©finir la valeur de politesse de lâautogroupe. Lâintervalle autorisĂ© va de +19 (prioritĂ© basse) Ă -20 (prioritĂ© haute). LâĂ©criture dâune valeur en dehors de cet intervalle provoquera lâĂ©chec de write (2) avec lâerreur EINVAL .
Le rĂ©glage de la politesse de lâautogroupe a la mĂȘme acception que la valeur de politesse du processus, mais sâapplique Ă la rĂ©partition des cycles CPU Ă un autogroupe dans son ensemble, basĂ©e sur les valeurs relatives de politesse des autres autogroupes. Pour un processus dans un autogroupe, les cycles CPU quâil reçoit sont dĂ©duits de la valeur de politesse de lâautogroupe (comparĂ©e aux autres autogroupes) et de la valeur de politesse du processus (comparĂ©e aux autres processus dans le mĂȘme autogroupe).
Lâutilisation du contrĂŽleur de CPU cgroups (7) pour placer les processus dans des cgroups autres que le cgroup racine du CPU contourne lâeffet de lâautogroupage.
La fonctionnalitĂ© dâautogroupage groupe seulement les processus ordonnancĂ©s selon des politiques non temps rĂ©el ( SCHED_OTHER , SCHED_BATCH et SCHED_IDLE ). Elle ne groupe pas les processus ordonnancĂ©s selon les politiques temps rĂ©el et Ă Ă©chĂ©ances. Ceux-ci sont ordonnancĂ©s selon les rĂšgles dĂ©crites ci-dessus.
Valeur de politesse et ordonnancement de groupe
Lors de lâordonnancement de processus non temps rĂ©el (câest-Ă -dire ceux ordonnancĂ©s selon les politiques SCHED_OTHER , SCHED_BATCH et SCHED_IDLE ), Lâordonnanceur CFS emploie une technique connue comme « ordonnancement de groupe » (group scheduling) si le noyau a Ă©tĂ© configurĂ© avec lâoption CONFIG_FAIR_GROUP_SCHED (ce qui est typique).
Avec lâordonnancement de groupe, les threads sont ordonnancĂ©s dans des « groupes de tĂąches ». Celles-ci ont une relation hiĂ©rarchique, avec comme racine le groupe de tĂąches initial du systĂšme connu comme « groupe de tĂąches racine » (root task group). Les groupes de tĂąches sont constituĂ©s dans les circonstances suivantes :
|
- |
Tous les threads dans un cgroup du CPU forment un groupe de tĂąches. Le parent de ce groupe de tĂąches est le groupe de tĂąches du cgroup parent correspondant. |
||
|
- |
Si lâautogroupage est activĂ©, alors tous les threads qui sont (implicitement) placĂ©s dans un autogroupe (câest-Ă -dire la mĂȘme session, telle que créée par setsid (2)) forment un groupe de tĂąches. Chaque nouvel autogroupe est par consĂ©quent un groupe de tĂąches distinct. Le groupe de tĂąches racine est le parent de tous les autogroupes de ce type. |
||
|
- |
Si lâautogroupage est activĂ©, alors le groupe de tĂąches racine se compose de tous les processus dans le cgroup racine du CPU qui nâĂ©taient pas par ailleurs placĂ©s implicitement dans un nouvel autogroupe. |
||
|
- |
Si lâautogroupage est dĂ©sactivĂ©, alors le groupe de tĂąches racine est constituĂ© de tous les processus dans le cgroup racine du CPU. |
||
|
- |
Si lâordonnancement de groupe a Ă©tĂ© dĂ©sactivĂ© (câest-Ă -dire que le noyau a Ă©tĂ© configurĂ© sans CONFIG_FAIR_GROUP_SCHED ), alors tous les processus du systĂšme sont en thĂ©orie placĂ©s dans un groupe de tĂąches unique. |
Avec lâordonnancement de groupe, une valeur de politesse de thread a un effet sur les dĂ©cisions dâordonnancement seulement relatives aux autres threads dans le mĂȘme groupe de tĂąches . Cela a quelques consĂ©quences surprenantes en terme de sĂ©mantique traditionnelle de la valeur de politesse sur les systĂšmes UNIX. En particulier, si lâautogroupage est activĂ© (par dĂ©faut dans diverses distributions), alors lâemploi de setpriority (2) ou nice (1) sur un processus a un effet seulement sur lâordonnancement concernant les autres processus exĂ©cutĂ©s dans la mĂȘme session (classiquement : la mĂȘme fenĂȘtre de terminal).
Inversement, pour deux processus qui sont (par exemple) les seuls processus liĂ©s Ă un CPU dans diffĂ©rentes sessions (par exemple, des fenĂȘtres distinctes de terminal, chacune des tĂąches Ă©tant liĂ©e Ă un autogroupe distinct), modifier la valeur de politesse du processus dâune des sessions nâa pas dâeffet en terme de dĂ©cision dâordonnancement relative au processus dans lâautre session. Un contournement utile possible consiste Ă utiliser une commande telle que la suivante pour modifier la valeur de politesse de lâautogroupe pour tous les processus dans une session de terminal :
$ echo 10 > /proc/self/autogroup
Fonctionnalités temps réel dans le noyau Linux principal
Depuis Linux 2.6.18, Linux a Ă©tĂ© graduellement pourvu de capacitĂ©s temps rĂ©el, la plupart Ă©tant dĂ©rivĂ©es de lâancien ensemble de greffons realtime-preempt . JusquâĂ ce que ces greffons aient Ă©tĂ© entiĂšrement fusionnĂ©s dans le noyau principal, ils devront ĂȘtre installĂ©s pour atteindre les meilleures performances temps rĂ©el. Ces greffons sâappellent :
patch- version-noyau -rt version-greffon
et peuvent ĂȘtre tĂ©lĂ©chargĂ©s Ă partir de http://www.kernel.org/pub/linux/kernel/projects/rt/ .
Sans les greffons et avant leur complĂšte inclusion dans le noyau principal, la configuration du noyau nâoffre que trois classes de prĂ©emption CONFIG_PREEMPT_NONE , CONFIG_PREEMPT_VOLUNTARY et CONFIG_PREEMPT_DESKTOP qui fournissent respectivement « aucune », « quelque » et une « considĂ©rable » rĂ©duction de la pire latence dâordonnancement.
Avec les greffons appliquĂ©s ou aprĂšs leur pleine inclusion dans le noyau principal, la configuration supplĂ©mentaire CONFIG_PREEMPT_RT devient disponible. Si elle est choisie, Linux est transformĂ© en un systĂšme dâexploitation temps rĂ©el ordinaire. Les politiques dâordonnancement FIFO et RR sont alors utilisĂ©es pour lancer un thread avec une vraie prioritĂ© temps rĂ©el et une latence minimale dâordonnancement de pire cas.
NOTES
Le contrĂŽleur cgroups (7) de CPU peut ĂȘtre utilisĂ© pour limiter la consommation de CPU par les groupes de processus.
Ă lâorigine, le noyau Linux standard visait un systĂšme dâexploitation Ă vocation gĂ©nĂ©raliste, devant gĂ©rer des processus en arriĂšre-plan, des applications interactives et des applications en temps rĂ©el souples (qui ont besoin en gĂ©nĂ©ral de rĂ©pondre Ă des critĂšres de temps maximal). Bien que Linux 2.6 ait permis la prĂ©emption par le noyau et que lâordonnanceur O(1), nouvellement introduit, assure que le temps nĂ©cessaire pour planifier soit fixĂ© et dĂ©terministe quel que soit le nombre de tĂąches, une vraie gestion temps rĂ©el nâĂ©tait pas possible avant Linux 2.6.17.
VOIR AUSSI
chcpu (1), chrt (1), lscpu (1), ps (1), taskset (1), top (1), getpriority (2), mlock (2), mlockall (2), munlock (2), munlockall (2), nice (2), sched_get_priority_max (2), sched_get_priority_min (2), sched_getaffinity (2), sched_getparam (2), sched_getscheduler (2), sched_rr_get_interval (2), sched_setaffinity (2), sched_setparam (2), sched_setscheduler (2), sched_yield (2), setpriority (2), pthread_getaffinity_np (3), pthread_getschedparam (3), pthread_setaffinity_np (3), sched_getcpu (3), capabilities (7), cpuset (7)
Programming for the real world â POSIX.4 de Bill O. Gallmeister, OâReilly & Associates, Inc., ISBN 1-56592-074-0.
Les fichiers source du noyau Linux Documentation/scheduler/ sched-deadline.txt , Documentation/scheduler/sched-rt-group.txt , Documentation/scheduler/sched-design-CFS.txt et Documentation/ scheduler/sched-nice-design.txt
TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Cédric Boutillier <cedric.boutillier@gmail.com>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>
Cette traduction est une documentation libre ; veuillez vous reporter Ă la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il nây a aucune RESPONSABILITĂ LĂGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .