Friday, October 15, 2021

Coupez!

Imaginons qu'on ait envie de faire un peu de demoscene au milieu de Linux. Imaginons encore qu'on ait vraiment besoin qu'une partie du programme ne soit jamais interrompue par autre-chose. Difficile, hein ?

J'ai fait un truc un peu du genre, un jour, mais il faut avoir accès à la configuration du bootloader. De même qu'on peut forcer le kernel Linux à n'utiliser qu'une partie de la mémoire, on peut restreindre l'ensemble de coeurs accessibles au scheduler grâce à isolcpus=0,1,2 (ou tout autre combinaison qui vous convienne, laisser un coeur sur 4 au système, c'était un peu extrême :-P). Quel est l'intérêt ? eh bien, c'est que si ces coeurs ne sont plus utilisés par les processus génériques, un programme ayant les droits suffisant peut toujours faire appel à sched_setaffinity() pour se lier à un coeur en particulier, y compris un coeur qui avait été 'isolé' du reste du système.

Je me demande si ça donnerait quelque-chose d'intéressant sur le devterm. 'faudra que j'y exécute un lscpu ce soir, tiens... Pourquoi je vous ressort ça là maintenant? Hmm ... peut-être à cause du gars qui faisait la promotion de ce genre de technique poussée au point d'héberger un système temps-réel à côté de Windows entre la démo de miroirs déformables en temps réel, les caméras 3D temps-réel et du système de lentille liquide contrôlée électriquement sur la foire de Stuttgart ...

2 comments:

Your poor thread said...

if you're after something like that, make sure you located your linux distro's cpu governor settings and turns them into 'performance' for the corresponding core. If not, it may keep changing core's stepping speed without warning your application and all your 'i'm in total control of the hardware' fantasies will fall down.

code blueprint said...

Yeah, but isolcpus configuration is static. Most of the time, cset shield --cpu is by far the best option that’s least likely to catch you by surprise.