Ob ein Kernel präemptiv ist oder nicht, hängt davon ab, was Sie präemptiv machen möchten, da es im Linux-Kernel verschiedene Dinge gibt, bei denen die Präemption separat aktiviert/deaktiviert werden kann.
Wenn Ihr Kernel CONFIG_IKCONFIG
hat und CONFIG_IKCONFIG_PROC
aktiviert ist, können Sie Ihre Präemptionskonfiguration über /proc/config.gz
herausfinden (Wenn Sie dies nicht haben, liefern einige Distributionen die Kernel-Konfiguration in /boot
stattdessen):
$ 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
Wenn Sie CONFIG_IKCONFIG
haben , aber nicht CONFIG_IKCONFIG_PROC
, können Sie es immer noch mit extract-ikconfig
aus dem Kernel-Image herausholen .
Ein präemptiver Kernel (Desktop mit niedriger Latenz) hat PREEMPT
in seinem Versionsnamen gekennzeichnet (uname -a
). Dies erscheint auch in /proc/version
und in der Zeichenfolge "Version Magic", die verwendet wird, um zu entscheiden, ob Module auf einem bestimmten Kernel geladen werden können oder nicht, z.
mymodule: version magic '3.4.35 mod_unload ARMv7 p2v8 '
should be '3.4.35 preempt mod_unload ARMv7 p2v8 '
Für CONFIG_PREEMPT_VOLUNTARY
existiert kein solches Tagging , afaik.