CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[linux] select et processus

dnob700
dnob700
Niveau 10
19 août 2010 à 13:47:16

Salut,

Est-ce que quelqu'un sait comment est réalisée l'ordonnancement de processus ? Et plus particulièrement le réveil de ceux-ci.

Supposons que j'ai, entre autre, un processus qui travaille peu car il passe la plupart de son temps à attendre des sockets dans un appel select. Mais, j'aimerais que lorsque l'une de ses socket soit prête alors il s'active le plus vite possible et avec une grande priorité. Si j'augmente la priorité de ce processus aurais-je l'effet désiré ? I.e. est-ce que le système s'apercevra qu'il peut être réveillé dès qu'une socket est prête. Et aussi, est-ce que ça pourrait nuire à la performance globale du système : si le processus a une priorité plus élevé, est-ce qu'il va être réveillé plus souvent par le système _avant_ qu'une socket ne soit prête (pour être rendormie juste après) ou alors est-ce que ce genre de chose est très bien gérée et ne se produit pas ?

Il me semble que le scheduler de linux favorise les processus qui sont bloqués sur des I/O (afin j'ai lu ça dans un truc pas tout jeune, je ne sais pas si c'est toujours vrai). Mais comment peut-on s'assurer qu'un processus bénéficie bien de cette politique ?

Je suis aussi preneur d'un pointeur vers quelque chose qui parle de ce genre de question si vous en avez, car je n'ai pas trop d'idée sur où trouver ces infos (ailleurs que dans les sources de linux).

Merci

chris_27
chris_27
Niveau 10
19 août 2010 à 14:23:03

D'après ce que je sais :

1) le scheduler n'est pas unique. Il faut voir lequel a été choisi lors de la compilation du noyau.
2) il y a(vait ?) une option pour jouer sur la "réactivité" du système.
3) pourquoi n'utiliserais-tu pas nive pour donner une priorité maximale à ton processus ? (ok, ça nécessite les droits root mais bon…)

chris_27
chris_27
Niveau 10
19 août 2010 à 14:37:59

nice*

(je ne suis pas encore réveillé moi :rouge: )

godrik
godrik
Niveau 30
19 août 2010 à 17:35:13

Quand je faisais joujou avec une lib de calcul haute perf, je passais mon processus en real-time avec un appel a sched_setscheduler avec FIFO comme parametre. Cette priorite est la plus violente qui existe. Si le processus devient 'runnable' le noyau preempte immediatement autant de processus que neccaissaire pour faire tourner le processus real-time. Comme tu peux te douter. C'est extremement violent et ca sature autant de CPU que tu as de process. Et si tu as une boucle infini, tu ne pourras pas killer le processus puisque tu ne pourra pas de logguer. Il faut alors faire utiliser une kernel trap. Tu peux aussi utiliser la policy RR qui fait du round robin parmis les processus Realtime et placer un serveur ssh la bas pour pouvoir avoir un shell real time.

dnob700
dnob700
Niveau 10
20 août 2010 à 14:26:34

En fait, assez spécifiquement ma question était de savoir si un programme qui a une très grosse priorité mais qui est bloqué dans un select (ou autre) occupe du CPU (ou en occupe plus que le même qui n'aurait pas une telle priorité). De la réponse de godrik, j'ai l'impression que non (et puis je pourrais faire un test, c'est vrai).

Chris : oui, de-nicer mes processus est ce que je ferais. C'est dommage que le système de fichier ne gère pas encore les "capabilities" sinon il n'y aurait pas besoin d'être root pour faire ça.

godrik
godrik
Niveau 30
20 août 2010 à 17:20:03

select est un appel bloquant, le processus est dans un etat de sommeil (je ne sais plus le terme adequat) quand tu attend sur select. Il sera reveille par le noyau quand il y aura des choses a lire. Cependant, c'est possible qu'il ne s'endorme pas immediatement. Il y a plein de politique dans le noyau d'attente active pendant X millisecondes avant de passer en attente passive. C'est ce qui est fait par exemple pour les mutex. Peut etre qu'il y a un comportement similaire pour select.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment