Isolar o módulo do kernel em um núcleo específico usando o Cpuset

No espaço do usuário, podemos usarcpuset para realmenteisolar um núcleo específico em nosso sistema e execute apenas um processo específico para esse núcleo.

Estou tentando fazer a mesma coisa com um módulo do kernel. Então, eu quero que o módulo seja executado em um núcleo isolado. Em outras palavras:Como usocpuseté de dentro de um módulo do kernel? *

Usandolinux / cpuset.h no meu módulo do kernel não funciona. Então, eu tenho um módulo como este:

#include <linux/module.h>
#include <linux/cpuset.h>

...
#ifdef CONFIG_CPUSETS
    printk(KERN_INFO, "cpusets is enabled!");
#endif
cpuset_init(); // this function is declared in cpuset.h
...

Ao tentar carregar este módulo, recebo (emdmesg) a seguinte mensagemcpusets is enabled!. Mas eu também recebo a mensagemUnknown symbol cpu_init (err 0).

Da mesma forma, tentei usarsched_setaffinity delinux/sched.h para mover todo o processo em execução, ses para um núcleo específico e, em seguida, execute meu módulo para um núcleo isolado. Eu recebi a mesma mensagem de erro:Unknown symbol sched_setaffinity (err 0). Acho que recebi os "símbolos desconhecidos" porque essas funções não têmEXPORT_SYMBOL no kernel. Então eu fui e tentei ligar para osys_sched_setaffinity chamada do sistema (com base nissoPergunta, questão), mas novamente recebi esta mensagem:Unknown symbol sys_sched_setaffinity (err 0)!

Além disso, não estou procurando uma solução que useisolcpus, que é definido durante a inicialização. Gostaria apenas de carregar o módulo e depois o isolamento para ocorrer.

(Mais preciso, quero que seus threads do kernel sejam executados emisolado núcleos. Eu sei que posso usar afinidade para vincular threads a núcleos específicos, mas isso não me garante que os núcleos serão isolados por outros processos em execução neles.)

questionAnswers(3)

yourAnswerToTheQuestion