Теперь я изучаю планировщик 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
. Но это маска для определения близости, а не идентификатор ядра. Я хочу получить данные, идентифицирующие ядро, на котором запущен указанный процесс.
Спасибо,