Stiamo usando la versione 2.4-20 del kernel e dobbiamo contare il numero di utenti attivi, in modalità kernel. L'obiettivo è cambiare lo schedulatore, quindi siamo in sched.c, modificando la funzione schedule().come contare il numero di utenti attivi nel kernel
Quello che facciamo è contare gli utenti nella macro list_for_each.
list_for_each(tmp, &runqueue_head) {
p = list_entry(tmp, struct task_struct, run_list);
if (can_schedule(p, this_cpu)) {
if (unique(p->uid)) add_new_user(p->uid);
int weight = goodness(p, this_cpu, prev->active_mm);
if (weight > c)
c = weight, next = p;
}
}
che è fondamentalmente l'aggiunta di utenti unici a un elenco. Tuttavia, otteniamo risultati casuali. C'è un modo concreto per risolvere questo problema?
Grazie.
Cosa intendi per "risultati casuali"? – ArjunShankar
All'inizio abbiamo contato gli utenti con la funzione bontà(), con numeri assolutamente arbitrari (anche se avevamo 4 utenti in esecuzione contemporaneamente, potremmo ottenere 1 utente come risultato). in sched(), sembra che abbiamo valori coerenti ma non siamo sicuri, dal momento che sched() viene eseguito così frequentemente, abbiamo bisogno di prendere campioni (una volta ogni 5000 giri). Immagino che non ci sia un campo nel kernel che contiene gli attuali utenti attivi? se non c'è, qual è il modo migliore per contarli? Grazie per la risposta. –
Grazie per il chiarimento. Non conosco la risposta a questo. La mia intenzione era di sottolineare che la domanda non era del tutto chiara. Suggerirei di modificarlo nella domanda. In bocca al lupo! – ArjunShankar