Qu'un noyau soit préemptif ou non dépend de ce que vous voulez préempter, comme dans le noyau Linux, il y a plusieurs choses qui peuvent avoir la préemption activée/désactivée séparément.
Si votre noyau a CONFIG_IKCONFIG
et CONFIG_IKCONFIG_PROC
activé, vous pouvez connaître votre configuration de préemption via /proc/config.gz
(si vous ne l'avez pas, certaines distributions fournissent la configuration du noyau en /boot
à la place):
$ 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 avez CONFIG_IKCONFIG
, mais pas CONFIG_IKCONFIG_PROC
, vous pouvez toujours l'extraire de l'image du noyau avec extract-ikconfig
.
Un noyau préemptif (bureau à faible latence) a PREEMPT
marqué dans son nom de version (uname -a
). Cela apparaît également dans /proc/version
et dans la chaîne "version magique" utilisée pour décider si les modules peuvent/ne peuvent pas être chargés sur un noyau donné, par ex.
mymodule: version magic '3.4.35 mod_unload ARMv7 p2v8 '
should be '3.4.35 preempt mod_unload ARMv7 p2v8 '
Aucun balisage de ce type n'existe pour CONFIG_PREEMPT_VOLUNTARY
, autant que je sache.