Attualmente sto studiando lo scheduler di Linux. Per quanto riguarda l'affinità core della CPU, vorrei sapere quanto segue:In che modo ogni processo è bloccato a un core specifico per pianificazione (Linux)
1) In che modo ciascun processo (thread) è bloccato su un core?
c'è una chiamata di sistema sched_setaffinity
per modificare l'affinità nucleo su cui viene eseguito un processo. Ma internamente, quando viene generato un processo (o un thread), in che modo lo scheduler Linux predefinito assegna il processo (thread) a un core specifico? Ho modificato la chiamata di sistema sched_setaffinity
per scaricare informazioni sull'attività trasferita da un nucleo all'altro.
printk(KERN_INFO "%d %d %ld %lu %s\n", current->pid, current->tgid,
current->state, current->cpus_allowed,
current->comm);
Sembra che non v'è alcuna discarica delle suddette informazioni in /var/log/messages
. Quindi lo scheduler predefinito attacca ogni processo in un modo diverso, ma non riesco a capire come.
2) È possibile ottenere l'ID nucleo tramite PID o altre informazioni?
Questo è ciò che voglio implementare all'interno del kernel di Linux. In task_struct
, c'è un membro chiamato cpus_allowed
. Ma questa è una maschera per impostare l'affinità, non l'ID principale. Voglio recuperare un dato che identifica il nucleo su cui è in esecuzione il processo specificato.
Grazie,
Grazie per la risposta. Ma questo è diverso da quello che voglio. Mi chiedevo se la mia descrizione fosse fuorviante ... Prima di tutto, non uso la chiamata di sistema 'sched_setaffinity' (non sched_set_affinity ma sched_setaffinity) perché non creo un'applicazione in esecuzione nello spazio utente. – akry
In secondo luogo, il campo 'cpus_allowed' (non cpu_allowed) non è una informazione sufficiente per identificare il core della CPU su cui è in esecuzione il processo. cpus_allowed è impostato come 1 di default in modo che il processo possa spostare tutti i core disponibili. Se c'è un campo/metodo che dice la posizione in cui il processo è in esecuzione, questo è quello che voglio veramente sapere. – akry
Comunque, grazie per aver risposto alla mia domanda. – akry