Ahora estoy estudiando el programador de Linux. En cuanto a la afinidad del núcleo de la CPU, me gustaría saber lo siguiente:¿Cómo se ancló cada proceso a un núcleo específico por planificador (Linux)
1) ¿Cómo se anclan cada proceso (hilo) a un núcleo?
hay una llamada al sistema sched_setaffinity
para cambiar la afinidad central en la que se ejecuta un proceso. Pero internamente, cuando se genera un proceso (o un hilo), ¿cómo el programador de Linux predeterminado asigna el proceso (hilo) a un núcleo específico? Modifiqué la llamada al sistema sched_setaffinity
para volcar información sobre la tarea que se está moviendo de un núcleo a otro.
printk(KERN_INFO "%d %d %ld %lu %s\n", current->pid, current->tgid,
current->state, current->cpus_allowed,
current->comm);
Parece que no hay volcado de la información anterior en /var/log/messages
. Entonces, el programador predeterminado fija cada proceso de una manera diferente, pero no puedo entender cómo.
2) ¿Es posible obtener ID de núcleo por PID u otra información?
Esto es lo que quiero implementar dentro del kernel de Linux. En task_struct
, hay un miembro llamado cpus_allowed
. Pero esta es una máscara para establecer la afinidad, no la identificación del núcleo. Deseo recuperar datos que identifiquen el núcleo en el que se está ejecutando el proceso especificado.
Gracias,
Gracias por su respuesta. Pero esto es diferente de lo que quiero. Me preguntaba si mi descripción es engañosa ... En primer lugar, no uso la llamada al sistema 'sched_setaffinity' (no sched_set_affinity sino sched_setaffinity) porque no creo una aplicación que se ejecute en el espacio del usuario. – akry
En segundo lugar, el campo 'cpus_allowed' (no cpu_allowed) no es información suficiente para identificar el núcleo de CPU en el que se está ejecutando el proceso. cpus_allowed se configura como 1 por defecto, de modo que es probable que el proceso mueva todos los núcleos disponibles. Si hay algún campo/método que indique la ubicación donde se está ejecutando el proceso, esto es lo que realmente quiero saber. – akry
De todos modos, gracias por responder mi pregunta. – akry