Как изменить политику планировщика в Загружаемом модуле ядра (LKM) в Linux? - PullRequest
0 голосов
/ 23 мая 2018

Я написал LKM в Linux.Функция ioctl, my_ioctl вызывается программой уровня пользователя foo.c.Я хочу изменить политику планирования на foo.c.Поэтому я делаю следующее в моей my_ioctl функции из этой ссылки :

struct sched_attr attr;
int ret;
unsigned int flags = 0;

attr.size = sizeof(attr);
attr.sched_flags = 0;
attr.sched_nice = 0;
attr.sched_priority = 0;

/* This creates a 10ms/30ms reservation */
attr.sched_policy = SCHED_DEADLINE;
attr.sched_runtime = 10 * 1000 * 1000;
attr.sched_period = attr.sched_deadline = 30 * 1000 * 1000;

ret = sched_setattr(current->pid, &attr, flags);
if (ret < 0) {
    perror("sched_setattr");
    exit(-1);
}

sched_setattr выглядит следующим образом:

int sched_setattr(pid_t pid,
          const struct sched_attr *attr,
          unsigned int flags) {
    return syscall(__NR_sched_setattr, pid, attr, flags);
}

Я изменил syscall до sys_mycall , потому что это LKM .struct sched_attr также определено в вышеупомянутой ссылке на документацию по ядру Linux.Однако я не мог изменить политику планирования этим.Это выдает ошибку как scheduling policy cannot be changed from kernel space.Я не понимаю, почему это так.Существует утилита chrt, которая делает то же самое для процесса из пространства пользователя;тогда почему это невозможно из LKM?Или я что-то упустил?

...