Изоляция модуля ядра от конкретного ядра с помощью процессора
Из пользовательского пространства мы можем использоватьcpuset на самом делеизолировать конкретное ядро в нашей системе и выполнить только один конкретный процесс для этого ядра.
Я пытаюсь сделать то же самое с модулем ядра. Поэтому я хочу, чтобы модуль выполнялся в изолированном ядре. Другими словами:Как я используюcpuset
внутри модуля ядра? *
С помощьюLinux / cpuset.h в моем модуле ядра не работает. Итак, у меня есть такой модуль:
#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
...
При попытке загрузить этот модуль я получаю (вdmesg
) следующее сообщениеcpusets is enabled!
, Но я также получаю сообщениеUnknown symbol cpu_init (err 0)
.
Точно так же я пытался использоватьsched_setaffinity
отlinux/sched.h
для того, чтобы переместить все запущенные процессы, ses на конкретное ядро, а затем запустить мой модуль на изолированное ядро. Я получил то же сообщение об ошибке:Unknown symbol sched_setaffinity (err 0)
, Я думаю, что я получил "неизвестные символы", потому что эти функции не имеютEXPORT_SYMBOL
в ядре. Поэтому я пошел и попытался позвонитьsys_sched_setaffinity
системный вызов (основываясь на этомвопрос) но опять получил это сообщение:Unknown symbol sys_sched_setaffinity (err 0)
!
Кроме того, я не ищу решение, которое используетisolcpus
, который устанавливается при загрузке. Я хотел бы просто загрузить модуль, а затем произойти изоляция.