Como posso verificar minha configuração de preempção de kernel?

11

Quero verificar se meu kernel do Linux é preventivo ou não preventivo. Como posso verificar isso usando um comando, algo como uname -a?

daehee
fonte

Respostas:

10

Se um kernel é preemptivo ou não, depende do que você deseja antecipar, como no kernel Linux, há várias coisas que podem ter a preempção ativada / desativada separadamente.

Se o seu kernel tiver CONFIG_IKCONFIGe CONFIG_IKCONFIG_PROCativado, você poderá descobrir sua configuração de preempção /proc/config.gz(se você não tiver isso, algumas distribuições enviarão a configuração do kernel /boot):

$ 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

Se você possui CONFIG_IKCONFIG, mas não CONFIG_IKCONFIG_PROCpode, ainda pode tirá-lo da imagem do kernel extract-ikconfig.

Chris Down
fonte
Fiz um módulo de kernel em framboesa que dialogava com um sensor externo para pedir temperatura. Para falar com o sensor, devo definir a entrada e a saída dos pinos do gpio pelo período de tempo especificado (em ms). e o módulo funciona bem. assim como os módulos do kernel não são impedidos por outros processos pelo agendador, pois, se for antecipado, o tempo estará errado e o resultado obtido pelo sensor estará errado.
Mikmik
2

Um kernel preemptivo (área de trabalho de baixa latência) foi PREEMPTmarcado em seu nome de versão ( uname -a). Isso também aparece na /proc/versionstring "version magic" usada para decidir se os módulos podem ou não ser carregados em um determinado kernel, por exemplo

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

Não existe essa marcação para CONFIG_PREEMPT_VOLUNTARY, depois.

PypeBros
fonte