Сейчас я изучаю планировщик Linux. Что касается сродства ядра процессора, я хотел бы знать следующее:
1) Как каждый процесс (поток) прикрепляется к ядру?
существует системный вызов sched_setaffinity
для изменения соответствия ядра, на котором выполняется процесс. Но внутренне, когда процесс (или поток) генерируется, как планировщик Linux по умолчанию назначает процесс (поток) определенному ядру? Я изменил системный вызов sched_setaffinity
для получения информации о перемещении задачи из одного ядра в другое.
printk(KERN_INFO "%d %d %ld %lu %s\n", current->pid, current->tgid,
current->state, current->cpus_allowed,
current->comm);
Похоже, в /var/log/messages
отсутствует дамп вышеуказанной информации. Так что планировщик по умолчанию закрепляет каждый процесс по-своему, но я не могу понять, как.
2) Можно ли получить идентификатор ядра по PID или другой информации?
Это то, что я хочу реализовать внутри ядра Linux. В task_struct
есть член по имени cpus_allowed
. Но это маска для установки сходства, а не идентификатор ядра. Я хочу получить данные, идентифицирующие ядро, на котором выполняется указанный процесс.
Спасибо