Comment puis-je vérifier ma configuration de préemption du noyau?

11

Je veux vérifier si mon noyau Linux est préemptif ou non préemptif. Comment puis-je vérifier cela en utilisant une commande, quelque chose comme uname -a?

daehee
la source

Réponses:

10

Que le noyau soit préemptif ou non dépend de ce que vous voulez préempter, comme dans le noyau Linux, il existe différentes choses qui peuvent avoir la préemption activée / désactivée séparément.

Si votre noyau a été activé CONFIG_IKCONFIGet CONFIG_IKCONFIG_PROCactivé, vous pouvez découvrir votre configuration de préemption via /proc/config.gz(si vous ne l'avez pas, certaines distributions livrent la configuration du noyau à la /bootplace):

$ gzip -cd /proc/config.gz | grep PREEMPT
CONFIG_TREE_PREEMPT_RCU=y
CONFIG_PREEMPT_RCU=y
CONFIG_PREEMPT_NOTIFIERS=y
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_PREEMPT_COUNT=y
# CONFIG_DEBUG_PREEMPT is not set
# CONFIG_PREEMPT_TRACER is not set

Si vous l'avez CONFIG_IKCONFIG, mais pas CONFIG_IKCONFIG_PROC, vous pouvez toujours le retirer de l'image du noyau avec extract-ikconfig.

Chris Down
la source
J'ai fait un module noyau en framboise qui dialogue avec un capteur externe pour demander la température. pour parler avec le capteur, je dois définir l'entrée et la sortie des broches gpio pendant une durée spécifiée (en ms). et le module fonctionne bien. les modules du noyau ne sont pas non plus préemptés par d'autres processus par l'ordonnanceur, car s'il est préempté, le timing sera incorrect et le résultat obtenu par le capteur sera erroné.
mikmik
2

Un noyau préemptif (bureau à faible latence) a PREEMPTmarqué son nom de version ( uname -a). Cela apparaît également dans /proc/versionet dans la chaîne "version magic" utilisée pour décider si les modules peuvent / ne peuvent pas être chargés sur un noyau donné, par exemple

mymodule: version magic '3.4.35 mod_unload ARMv7 p2v8 ' 
              should be '3.4.35 preempt mod_unload ARMv7 p2v8 '

Aucun marquage de ce type n'existe pour CONFIG_PREEMPT_VOLUNTARY, afaik.

PypeBros
la source